TiffFrame

Inheritance: java.lang.Object, com.aspose.imaging.DisposableObject, com.aspose.imaging.DataStreamSupporter, com.aspose.imaging.Image, com.aspose.imaging.RasterImage, com.aspose.imaging.RasterCachedImage

public final class TiffFrame extends RasterCachedImage

إطار TIFF.

المنشئات

المنشئالوصف
TiffFrame(InputStream stream)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(InputStream stream, TiffOptions options)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(String path)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(String path, TiffOptions options)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(RasterImage image)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(RasterImage image, TiffOptions options)ينشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(TiffOptions options, int width, int height)ينشئ مثيلاً جديدًا من الفئة TiffFrame.

الطرق

طريقةالوصف
getBackgroundColor()يحصل على قيمة للون الخلفية.
setBackgroundColor(Color value)يضبط قيمة للون الخلفية.
hasAlpha()يحصل على قيمة تشير إلى ما إذا كان هذا الكائن يحتوي على ألفا.
getBitsPerPixel()يحصل على عدد بتات الصورة لكل بكسل.
getFrameOptions()يحصل على خيارات إنشاء الإطار.
getHeight()يحصل على ارتفاع الصورة.
getWidth()يحصل على عرض الصورة.
getHorizontalResolution()يحصل على الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذا RasterImage.
setHorizontalResolution(double value)يضبط الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذا RasterImage.
getVerticalResolution()يحصل على الدقة العمودية، بوحدة البكسل لكل بوصة، لهذا RasterImage.
setVerticalResolution(double value)يضبط الدقة العمودية، بوحدة البكسل لكل بوصة، لهذا RasterImage.
getPathResources()يحصل على موارد المسار.
setPathResources(List value)يضبط موارد المسار.
removeMetadata()يزيل بيانات التعريف لهذه المثيلة من الصورة عن طريق تعيين IHasXmpData.XmpData هذا (IHasXmpData.getXmpData/IHasXmpData.setXmpData(XmpPacketWrapper)) و IHasExifData.ExifData (IHasExifData.getExifData/IHasExifData.setExifData(ExifData) IHasExifData.setExifData) إلى null.
getOriginalOptions()يحصل على الخيارات بناءً على إعدادات الملف الأصلي.
alignResolutions()طريقة مساعدة لجعل الدقة الأفقية والعمودية متساوية.
copyFrame(TiffFrame tiffFrame)ينسخ الإطار بالكامل (نسخ مكررة).
createFrameFrom(TiffFrame tiffFrame, TiffOptions options)ينشئ الإطار من tiffFrame المحدد باستخدام options المحددة.
resize(int newWidth, int newHeight, int resizeType)يُعيد تحجيم الصورة.
rotateFlip(int rotateFlipType)يدور، يقلب، أو يدور ويقلب الصورة.
rotate(float angle, boolean resizeProportionally, Color backgroundColor)دوّر الصورة حول المركز.
crop(Rectangle rectangle)قص الصورة.

Example: This example shows how to create a TIFF image from scratch and save it to a file.

String dir = "c:\\temp\\";

com.aspose.imaging.imageoptions.TiffOptions createOptions =
        new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);

// عيّن 8 بتات لكل مكوّن لوني.
createOptions.setBitsPerSample(new int[]{8, 8, 8});

// عيّن ترتيب البايت Big Endian (Motorola)
createOptions.setByteOrder(com.aspose.imaging.fileformats.tiff.enums.TiffByteOrder.BigEndian);

// قم بتعيين ضغط LZW.
createOptions.setCompression(com.aspose.imaging.fileformats.tiff.enums.TiffCompressions.Lzw);

// قم بتعيين نموذج اللون RGB.
createOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.Rgb);

// سيتم تخزين جميع مكونات اللون داخل مستوى واحد.
createOptions.setPlanarConfiguration(com.aspose.imaging.fileformats.tiff.enums.TiffPlanarConfigs.Contiguous);

// إنشاء إطار TIFF بحجم 100×100 بكسل.
// لاحظ أنك لا تحتاج إلى تحرير إطار صراحةً إذا كان مُدرجًا في TiffImage.
// عند تحرير الحاوية سيتم تحرير جميع الإطارات تلقائيًا.
com.aspose.imaging.fileformats.tiff.TiffFrame firstFrame = new com.aspose.imaging.fileformats.tiff.TiffFrame(createOptions, 100, 100);

// املأ الإطار بالكامل بالتدرج الأزرق‑الأصفر.
com.aspose.imaging.brushes.LinearGradientBrush gradientBrush = new com.aspose.imaging.brushes.LinearGradientBrush(
        new com.aspose.imaging.Point(0, 0),
        new com.aspose.imaging.Point(firstFrame.getWidth(), firstFrame.getHeight()),
        com.aspose.imaging.Color.getBlue(),
        com.aspose.imaging.Color.getYellow());

com.aspose.imaging.Graphics graphics = new com.aspose.imaging.Graphics(firstFrame);
graphics.fillRectangle(gradientBrush, firstFrame.getBounds());

// إنشاء صورة TIFF.
com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = new com.aspose.imaging.fileformats.tiff.TiffImage(firstFrame);
try {
    tiffImage.save(dir + "output.tif");
} finally {
    tiffImage.dispose();
}

TiffFrame(InputStream stream)

public TiffFrame(InputStream stream)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
تدفقjava.io.InputStreamالدفق لتحميل صورة منه وتهيئة بيانات بكسل الإطار ولوحة الألوان.

TiffFrame(InputStream stream, TiffOptions options)

public TiffFrame(InputStream stream, TiffOptions options)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
تدفقjava.io.InputStreamالدفق لتحميل صورة منه وتهيئة بيانات بكسل الإطار ولوحة الألوان.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(String path)

public TiffFrame(String path)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
مسارjava.lang.Stringالمسار لتحميل صورة منه وتهيئة بيانات بكسل الإطار ولوحة الألوان.

TiffFrame(String path, TiffOptions options)

public TiffFrame(String path, TiffOptions options)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
مسارjava.lang.Stringالمسار لتحميل صورة منه وتهيئة بيانات بكسل الإطار ولوحة الألوان.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(RasterImage image)

public TiffFrame(RasterImage image)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
imageRasterImageالصورة لتهيئة بيانات بكسل الإطار ولوحة الألوان.

TiffFrame(RasterImage image, TiffOptions options)

public TiffFrame(RasterImage image, TiffOptions options)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
imageRasterImageالصورة لتهيئة بيانات بكسل الإطار ولوحة الألوان.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(TiffOptions options, int width, int height)

public TiffFrame(TiffOptions options, int width, int height)

ينشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
optionsTiffOptionsخيارات الإطار.
widthintالعرض.
heightintالارتفاع.

getBackgroundColor()

public Color getBackgroundColor()

يحصل على قيمة للون الخلفية.

Returns: Color

setBackgroundColor(Color value)

public void setBackgroundColor(Color value)

يضبط قيمة للون الخلفية.

Parameters:

معاملنوعالوصف
valueColor

hasAlpha()

public boolean hasAlpha()

يحصل على قيمة تشير إلى ما إذا كان هذا الكائن يحتوي على ألفا.

Returns: منطقي - true إذا كان لهذه الحالة ألفا؛ وإلا false.

Example: The following example loads a TIFF image and prints information about raw data format and alpha channel.

String dir = "c:\\temp\\";

String fileName = dir + "sample.tif";
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(fileName);
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    // إذا كان إطار TIFF النشط يحتوي على قناة ألفا، فسيُعتبر أن صورة TIFF بأكملها تحتوي على قناة ألفا.
    System.out.printf("ImageFile=%s, FileFormat=%s, HasAlpha=%s\r\n", fileName, tiffImage.getRawDataFormat(), tiffImage.hasAlpha());

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        System.out.printf("Frame=%s, FileFormat=%s, HasAlpha=%s\r\n", ++i, frame.getRawDataFormat(), frame.hasAlpha());
    }
} finally {
    image.dispose();
}

// قد يبدو الإخراج هكذا:
// ImageFile=c:\temp\sample.tif, FileFormat=RgbIndexed1Bpp, القنوات المستخدمة: 1, HasAlpha=False
// Frame=1, FileFormat=RgbIndexed1Bpp, القنوات المستخدمة: 1, HasAlpha=False
// Frame=2, FileFormat=RgbIndexed1Bpp, القنوات المستخدمة: 1, HasAlpha=False

getBitsPerPixel()

public int getBitsPerPixel()

يحصل على عدد بتات الصورة لكل بكسل.

Returns: int - عدد بتات الصورة لكل بكسل.

getFrameOptions()

public TiffOptions getFrameOptions()

يحصل على خيارات إنشاء الإطار.

Returns: TiffOptions

getHeight()

public int getHeight()

يحصل على ارتفاع الصورة.

Returns: int - ارتفاع الصورة.

getWidth()

public int getWidth()

يحصل على عرض الصورة.

Returns: int - عرض الصورة.

getHorizontalResolution()

public double getHorizontalResolution()

يحصل على الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذا RasterImage.

Returns: مزدوج - الدقة الأفقية.

Example: The following example shows how to set horizontal/vertical resolution of a separate TIFF frame.

String dir = "c:\\temp\\";

// تحميل صورة TIFF من ملف.
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.tif");
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        // احصل على الدقة الأفقية والعمودية لإطار TiffFrame.
        double horizontalResolution = frame.getHorizontalResolution();
        double verticalResolution = frame.getVerticalResolution();
        System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
        System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);

        if (horizontalResolution != 96.0 || verticalResolution != 96.0) {
            // استخدم طريقة SetResolution لتحديث قيم الدقة الاثنين في استدعاء واحد.
            System.out.println("Set resolution values to 96 dpi");
            frame.setResolution(96.0, 96.0);

            System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
            System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);
        }

        ++i;
    }
} finally {
    image.dispose();
}

setHorizontalResolution(double value)

public void setHorizontalResolution(double value)

يضبط الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذا RasterImage.

Parameters:

معاملنوعالوصف
valuedoubleالدقة الأفقية.

getVerticalResolution()

public double getVerticalResolution()

يحصل على الدقة العمودية، بوحدة البكسل لكل بوصة، لهذا RasterImage.

Returns: مزدوج - الدقة العمودية.

Example: The following example shows how to set horizontal/vertical resolution of a separate TIFF frame.

String dir = "c:\\temp\\";

// تحميل صورة TIFF من ملف.
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.tif");
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        // احصل على الدقة الأفقية والعمودية لإطار TiffFrame.
        double horizontalResolution = frame.getHorizontalResolution();
        double verticalResolution = frame.getVerticalResolution();
        System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
        System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);

        if (horizontalResolution != 96.0 || verticalResolution != 96.0) {
            // استخدم طريقة SetResolution لتحديث قيم الدقة الاثنين في استدعاء واحد.
            System.out.println("Set resolution values to 96 dpi");
            frame.setResolution(96.0, 96.0);

            System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
            System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);
        }

        ++i;
    }
} finally {
    image.dispose();
}

setVerticalResolution(double value)

public void setVerticalResolution(double value)

يضبط الدقة العمودية، بوحدة البكسل لكل بوصة، لهذا RasterImage.

Parameters:

معاملنوعالوصف
valuedoubleالدقة العمودية.

getPathResources()

public List<PathResource> getPathResources()

يحصل على موارد المسار.

القيمة: موارد المسار.

Returns: java.util.List<com.aspose.imaging.fileformats.tiff.pathresources.PathResource> - موارد المسار.

Example: The following example shows how to retrieve paths from TIFF image and display their names in the console.

try (TiffImage image = (TiffImage) Image.load("Sample.tif"))
{
    for (PathResource path : image.getActiveFrame().getPathResources())
    {
        System.out.println(path.getName());
    }
}

Example: The following example shows how to modify already existing Clipping Paths. يوضح المثال التالي كيفية تعديل مسارات القص الموجودة بالفعل. على سبيل المثال، يمكنك الاحتفاظ بمسار قص واحد فقط في الصورة.

try (TiffImage image = (TiffImage) Image.load("Sample.tif"))
{
    List<PathResource> paths = image.getActiveFrame().getPathResources();
    image.getActiveFrame().setPathResources(Collections.singletonList(paths.get(0)));
    image.save();
}

Example: Transfer Clipping Paths during export from TIFF to PSD image.

try (Image image = Image.load("Sample.tif"))
{
    image.save("SampleWithPaths.psd", new PsdOptions());
}

Example: Create Clipping Path manually.

static void main()
{
    try (TiffImage image = (TiffImage)Image.load("Sample.tif"))
    {
        PathResource res = new PathResource();
        res.setBlockId((short) 2000);                                                  // Block Id according to Photoshop specification
        res.setName("My Clipping Path");                                               // Path name
        res.setRecords(createRecords(0.2f, 0.2f, 0.8f, 0.2f, 0.8f, 0.8f, 0.2f, 0.8f)); // Create path records using coordinates
                    
        image.getActiveFrame().setPathResources(Collections.singletonList(res));

        image.save("ImageWithPath.tif");
    }
}

private static List<VectorPathRecord> createRecords(float ... coordinates)
{
    List<VectorPathRecord>  records = createBezierRecords(coordinates);                                  // Create Bezier records using coordinates

    LengthRecord lr = new LengthRecord(); // LengthRecord required by Photoshop specification
    lr.setOpen(false);                    // Lets create closed path
    lr.setRecordCount(records.size());    // Record count in the path
                
    records.add(0, lr);

    return records;
}

private static List<VectorPathRecord> createBezierRecords(float[] coordinates)
{
    List<VectorPathRecord> l = new LinkedList<VectorPathRecord>();
                
    for (int index = 0; index < coordinates.length - 1; index += 2)
    {
        PointF pt = new PointF(coordinates[index], coordinates[index + 1]);
        BezierKnotRecord br = new BezierKnotRecord();
        br.setPathPoints(new PointF[] {pt, pt, pt});
        l.add(br);
    }
                    
    return l;
}

setPathResources(List value)

public void setPathResources(List<PathResource> value)

يضبط موارد المسار.

القيمة: موارد المسار.

Parameters:

معاملنوعالوصف
valuejava.util.List<com.aspose.imaging.fileformats.tiff.pathresources.PathResource>موارد المسار.

removeMetadata()

public void removeMetadata()

يزيل بيانات التعريف لهذه المثيلة من الصورة عن طريق تعيين IHasXmpData.XmpData هذا (IHasXmpData.getXmpData/IHasXmpData.setXmpData(XmpPacketWrapper)) و IHasExifData.ExifData (IHasExifData.getExifData/IHasExifData.setExifData(ExifData) IHasExifData.setExifData) إلى null.

getOriginalOptions()

public ImageOptionsBase getOriginalOptions()

يحصل على الخيارات بناءً على إعدادات الملف الأصلي. يمكن أن يكون هذا مفيدًا للحفاظ على عمق البت وغيرها من معلمات الصورة الأصلية دون تغيير. على سبيل المثال، إذا قمنا بتحميل صورة PNG بالأبيض والأسود بعمق 1 بت لكل بكسل ثم حفظناها باستخدام طريقة DataStreamSupporter.save(String)، سيتم إنتاج صورة PNG ناتجة بعمق 8 بت لكل بكسل. لتجنب ذلك وحفظ صورة PNG بعمق 1 بت لكل بكسل، استخدم هذه الطريقة للحصول على خيارات الحفظ المقابلة ومررها إلى طريقة Image.save(String, ImageOptionsBase) كمعامل ثانٍ.

Returns: ImageOptionsBase - The options based on the original file settings.

alignResolutions()

public void alignResolutions()

طريقة مساعدة لجعل الدقة الأفقية والعمودية متساوية.

copyFrame(TiffFrame tiffFrame)

public static TiffFrame copyFrame(TiffFrame tiffFrame)

ينسخ الإطار بالكامل (نسخ مكررة).

Parameters:

معاملنوعالوصف
tiffFrameTiffFrameإطار TIFF المراد نسخه.

Returns: TiffFrame - The newly copied tiff frame.

createFrameFrom(TiffFrame tiffFrame, TiffOptions options)

public static TiffFrame createFrameFrom(TiffFrame tiffFrame, TiffOptions options)

ينشئ الإطار من tiffFrame المحدد باستخدام options المحددة. يتم الحفاظ على بيانات البكسل ولكن يتم تحويلها إلى الصيغة المطلوبة.

Parameters:

معاملنوعالوصف
tiffFrameTiffFrameإطار TIFF لإنشاءه من.
optionsTiffOptionsالخيارات الجديدة للاستخدام.

Returns: TiffFrame - The newly created frame.

Example: The following example shows how to create a grayscale copy of an existing frame and add it to a TIFF image.

String dir = "c:\\temp\\";

com.aspose.imaging.imageoptions.TiffOptions createTiffOptions
        = new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);

// إنشاء مصدر ملف دائم، وليس مؤقتًا.
createTiffOptions.setSource(new com.aspose.imaging.sources.FileCreateSource(dir + "multipage.tif", false));
createTiffOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.Rgb);
createTiffOptions.setBitsPerSample(new int[]{8, 8, 8});

com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) com.aspose.imaging.Image.create(createTiffOptions, 100, 100);
try {
    // التدرج الخطي من الزاوية اليسرى العليا إلى الزاوية اليمنى السفلى للصورة.
    com.aspose.imaging.brushes.LinearGradientBrush brush =
            new com.aspose.imaging.brushes.LinearGradientBrush(
                    new com.aspose.imaging.Point(0, 0),
                    new com.aspose.imaging.Point(tiffImage.getWidth(), tiffImage.getHeight()),
                    com.aspose.imaging.Color.getRed(),
                    com.aspose.imaging.Color.getGreen());

    // ملء الإطار النشط بفرشاة تدرج خطية.
    com.aspose.imaging.Graphics gr = new com.aspose.imaging.Graphics(tiffImage.getActiveFrame());
    gr.fillRectangle(brush, tiffImage.getBounds());

    // خيارات التدرج الرمادي
    com.aspose.imaging.imageoptions.TiffOptions createTiffFrameOptions
            = new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);
    createTiffFrameOptions.setSource(new com.aspose.imaging.sources.StreamSource(new java.io.ByteArrayInputStream(new byte[0])));
    createTiffFrameOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.MinIsBlack);
    createTiffFrameOptions.setBitsPerSample(new int[]{8});

    // إنشاء نسخة بتدرج رمادي من الإطار النشط.
    // يتم الحفاظ على بيانات البكسل ولكنها تُحوَّل إلى الصيغة المطلوبة.
    com.aspose.imaging.fileformats.tiff.TiffFrame grayscaleFrame
            = com.aspose.imaging.fileformats.tiff.TiffFrame.createFrameFrom(tiffImage.getActiveFrame(), createTiffFrameOptions);

    // إضافة الإطار الذي تم إنشاؤه حديثًا إلى صورة TIFF.
    tiffImage.addFrame(grayscaleFrame);

    tiffImage.save();
} finally {
    tiffImage.dispose();
}

resize(int newWidth, int newHeight, int resizeType)

public void resize(int newWidth, int newHeight, int resizeType)

يُعيد تحجيم الصورة.

Parameters:

معاملنوعالوصف
newWidthintالعرض الجديد.
newHeightintالارتفاع الجديد.
resizeTypeintنوع تغيير الحجم.

rotateFlip(int rotateFlipType)

public void rotateFlip(int rotateFlipType)

يدور، يقلب، أو يدور ويقلب الصورة.

Parameters:

معاملنوعالوصف
rotateFlipTypeintنوع التدوير والقلب.

rotate(float angle, boolean resizeProportionally, Color backgroundColor)

public void rotate(float angle, boolean resizeProportionally, Color backgroundColor)

دوّر الصورة حول المركز.

Parameters:

معاملنوعالوصف
anglefloatزاوية الدوران بالدرجات. القيم الموجبة ستدور باتجاه عقارب الساعة.
resizeProportionallybooleanإذا تم تعيينه إلى true سيتغير حجم الصورة وفقًا لإسقاطات المستطيل المدور (نقاط الزوايا) وإلا سيبقى الأبعاد دون تغيير وتُدوَّر محتويات الصورة الداخلية فقط.
backgroundColorColorلون الخلفية.

crop(Rectangle rectangle)

public void crop(Rectangle rectangle)

قص الصورة.

Parameters:

معاملنوعالوصف
rectangleRectangleالمستطيل.