تعزيز معالجة الصور باستخدام الواجهة الحديثة

المقدمة

تاريخيًا، تعتمد Aspose Slides على java.awt وتحتوي الواجهة العامة على الفئات التالية من هناك:

اعتبارًا من الإصدار 24.4، تم إعلان أن هذه الواجهة العامة مهجورة.

من أجل التخلص من الاعتماد على هذه الفئات، أضفنا ما يسمى بـ “Modern API” - أي الواجهة التي يجب استخدامها بدلاً من الواجهة المهجورة، والتي لا تحتوي توقيعاتها على تبعيات على BufferedImage. تم إعلان Graphics2D مهجور وتم إزالة دعمه من الواجهة العامة لـ Slides.

في الإصدارات الحالية، اعتبر الواجهة العامة التي تعتمد على أنواع java.awt قديمة/مهجورة. استخدم الواجهة الحديثة للكود الجديد وعند ترحيل سير عمل معالجة الصور الحالي.

الواجهة الحديثة

تمت إضافة الفئات والعدادات (enums) التالية إلى الواجهة العامة:

  • IImage - تمثّل الصورة النقطية أو المتجهة.
  • ImageFormat - تمثّل تنسيق ملف الصورة.
  • Images - طرق لإنشاء والعمل مع واجهة IImage.

يرجى ملاحظة أن IImage قابل للتخلص منه ويجب أن يتبعه استدعاء dispose() أو أي نمط التخلص المناسب.

استخدم getImage لتوليد شريحة أو شكل واحد. استخدم getImages لتوليد عدة شرائح عرض. استخدم طرق Images لتحميل الصور، addImage مع IImage لإضافتها إلى عرض تقديمي، و replaceImage مع IImage لتحديث صورة موجودة في العرض.

مثال نموذجي لاستخدام الواجهة الجديدة قد يبدو كما يلي:

Presentation pres = new Presentation();
try {
    IPPImage ppImage;
    // إنشاء كائن IImage قابل للتخلص منه من الملف على القرص.
    IImage image = Images.fromFile("image.png");
    try {
        // إنشاء صورة PowerPoint بإضافة كائن IImage إلى صور العرض التقديمي.
        ppImage = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // إضافة شكل صورة على الشريحة #1
    pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // الحصول على كائن IImage الذي يمثل الشريحة #1.
    IImage slideImage = pres.getSlides().get_Item(0).getImage(new Dimension(1920, 1080));
    try {
        // حفظ الصورة على القرص.
        slideImage.save("slide1.jpeg", ImageFormat.Jpeg);
    } finally {
        if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

استبدال الكود القديم بالواجهة الحديثة

بشكل عام، ستحتاج إلى استبدال الاستدعاءات التي تستخدم BufferedImage و ImageIO بالطرق الجديدة التي تستخدم IImage.

الواجهة القديمة/المهجورة:

BufferedImage slideImage = pres.getSlides().get_Item(0).getThumbnail(new Dimension(1920, 1080));
try {
    ImageIO.write(slideImage, "PNG", new File("image.png"));
} catch (IOException e) {
    e.printStackTrace();
}

الواجهة الحديثة:

IImage slideImage = pres.getSlides().get_Item(0).getImage(new Dimension(1920, 1080));
try {
    slideImage.save("image.png", ImageFormat.Png);
} finally {
    if (slideImage != null) slideImage.dispose();
}

الحصول على صورة مصغرة للشريحة

الواجهة القديمة/المهجورة:

Presentation pres = new Presentation("pres.pptx");
try {
    BufferedImage slideImage = pres.getSlides().get_Item(0).getThumbnail();
    try {
        ImageIO.write(slideImage, "PNG", new File("slide1.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
} finally {
    if (pres != null) pres.dispose();
}

الواجهة الحديثة:

Presentation pres = new Presentation("pres.pptx");
try {
    IImage slideImage = pres.getSlides().get_Item(0).getImage();
    try {
        slideImage.save("slide1.png", ImageFormat.Png);
    } finally {
        if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

الحصول على صورة مصغرة للشكل

الواجهة القديمة/المهجورة:

Presentation pres = new Presentation("pres.pptx");
try {
    BufferedImage shapeImage = pres.getSlides().get_Item(0).getShapes().get_Item(0).getThumbnail();
    try {
        ImageIO.write(shapeImage, "PNG", new File("shape.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
} finally {
    if (pres != null) pres.dispose();
}

الواجهة الحديثة:

Presentation pres = new Presentation("pres.pptx");
try {
    IImage shapeImage = pres.getSlides().get_Item(0).getShapes().get_Item(0).getImage();
    try {
        shapeImage.save("shape.png");
    } finally {
        if (shapeImage != null) shapeImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

الحصول على صورة مصغرة للعرض التقديمي

الواجهة القديمة/المهجورة:

Presentation pres = new Presentation("pres.pptx");
try {
    BufferedImage[] bitmaps = pres.getThumbnails(new RenderingOptions(), new Dimension(1980, 1028));
    for (int index = 0; index < bitmaps.length; index++)
    {
        try 
        {
            BufferedImage thumbnail = bitmaps[index];
            ImageIO.write(thumbnail, "PNG", new File("slide" + index + ".png"));
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

الواجهة الحديثة:

Presentation pres = new Presentation("pres.pptx");
try {
    IImage[] images = pres.getImages(new RenderingOptions(), new Dimension(1980, 1028));
    try
    {
        for (int index = 0; index < images.length; index++)
        {
            IImage thumbnail = images[index];
            thumbnail.save("slide" + index + ".png", ImageFormat.Png);
        }
    }
    finally
    {
        for (IImage image : images)
        {
            image.dispose();
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

إضافة صورة إلى عرض تقديمي

الواجهة القديمة/المهجورة:

Presentation pres = new Presentation();
try {
    IPPImage ppImage = null;
    try {
        BufferedImage bufferedImages = ImageIO.read(new File("image.png"));
        ppImage = pres.getImages().addImage(bufferedImages);
    } catch (IOException e) {
        e.printStackTrace();
    }

    pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
} finally {
    if (pres != null) pres.dispose();
}

الواجهة الحديثة:

Presentation pres = new Presentation();
try {
    IPPImage ppImage;
    IImage image = Images.fromFile("image.png");
    try {
        ppImage = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
} finally {
    if (pres != null) pres.dispose();
}

الطرق المهجورة واستبدالها في الواجهة الحديثة

Presentation

توقيع الطريقة توقيع الطريقة البديلة
public final BufferedImage[] getThumbnails(IRenderingOptions options) public final IImage[] getImages(IRenderingOptions options)
public final BufferedImage[] getThumbnails(IRenderingOptions options, float scaleX, float scaleY) public final IImage[] getImages(IRenderingOptions options, float scaleX, float scaleY)
public final BufferedImage[] getThumbnails(IRenderingOptions options, int[] slides) public final IImage[] getImages(IRenderingOptions options, int[] slides)
public final BufferedImage[] getThumbnails(IRenderingOptions options, int[] slides, float scaleX, float scaleY) public final IImage[] getImages(IRenderingOptions options, int[] slides, float scaleX, float scaleY)
public final BufferedImage[] getThumbnails(IRenderingOptions options, int[] slides, Dimension imageSize) public final IImage[] getImages(IRenderingOptions options, int[] slides, Dimension imageSize)
public final BufferedImage[] getThumbnails(IRenderingOptions options, Dimension imageSize) public final IImage[] getImages(IRenderingOptions options, Dimension imageSize)

Shape

توقيع الطريقة توقيع الطريقة البديلة
public final BufferedImage getThumbnail() public final IImage getImage()
public final BufferedImage getThumbnail(int bounds, float scaleX, float scaleY) public final IImage getImage(int bounds, float scaleX, float scaleY)

Slide

توقيع الطريقة توقيع الطريقة البديلة
public final BufferedImage getThumbnail() public final IImage getImage()
public final BufferedImage getThumbnail(float scaleX, float scaleY) public final IImage getImage(float scaleX, float scaleY)
public final BufferedImage getThumbnail(IRenderingOptions options) public final IImage getImage(IRenderingOptions options)
public final BufferedImage getThumbnail(IRenderingOptions options, float scaleX, float scaleY) public final IImage getImage(IRenderingOptions options)
public final BufferedImage getThumbnail(IRenderingOptions options, Dimension imageSize) public final IImage getImage(IRenderingOptions options, Dimension imageSize)
public final BufferedImage getThumbnail(ITiffOptions options) public final IImage getImage(ITiffOptions options)
public final BufferedImage getThumbnail(Dimension imageSize) public final IImage getImage(Dimension imageSize)
public final void renderToGraphics(IRenderingOptions options, Graphics2D graphics) لا يوجد بديل في الواجهة الحديثة
public final void renderToGraphics(IRenderingOptions options, Graphics2D graphics, float scaleX, float scaleY) لا يوجد بديل في الواجهة الحديثة
public final void renderToGraphics(IRenderingOptions options, Graphics2D graphics, Dimension renderingSize) لا يوجد بديل في الواجهة الحديثة

Output

توقيع الطريقة توقيع الطريقة البديلة
public final IOutputFile add(String path, BufferedImage image) public final IOutputFile add(String path, IImage image)

ImageCollection

توقيع الطريقة توقيع الطريقة البديلة
public final IPPImage addImage(BufferedImage image) public final IPPImage addImage(IImage image)

PPImage

توقيع الطريقة توقيع الطريقة البديلة
public final BufferedImage getSystemImage() public final IImage getImage()

PatternFormat

توقيع الطريقة توقيع الطريقة البديلة
public final BufferedImage getTileImage(Color styleColor) public final IImage getTile(Color styleColor)
public final BufferedImage getTileImage(Color background, Color foreground) public final IImage getTile(Color background, Color foreground)

PatternFormatEffectiveData

توقيع الطريقة توقيع الطريقة البديلة
public final java.awt.image.BufferedImage getTileImage(Color background, Color foreground) public final IImage getTileIImage(Color background, Color foreground)

دعم API لـ Graphics2D

الطرق التي تستخدم Graphics2D تم إعلانها مهجورة ولا يوجد لها بديل مباشر في الواجهة الحديثة.

استخدم طرق عرض الصور في الواجهة الحديثة بدلاً من الواجهة التي تعرض إلى Graphics2D:

Slide

الأسئلة المتكررة

لماذا تم إلغاء Graphics2D؟

تم إلغاء دعم Graphics2D في الواجهة العامة لتوحيد العمل مع العرض والصور، وإزالة الروابط إلى تبعيات خاصة بالمنصة، والتحول إلى نهج متعدد المنصات باستخدام IImage. استخدم getImage أو getImages بدلاً من العرض إلى Graphics2D.

ما الفائدة العملية من IImage مقارنة بـ BufferedImage؟

IImage يوحد العمل مع كل من الصور النقطية والمتجهة ويبسّط حفظها بأشكال متعددة عبر ImageFormat.

هل ستؤثر الواجهة الحديثة على أداء توليد الصور المصغرة؟

التحول من getThumbnail إلى getImage لا يفاقم السيناريوهات: الطرق الجديدة توفر نفس القدرات لإنتاج الصور مع الخيارات والأحجام، مع الحفاظ على دعم خيارات العرض. الفائدة أو الفقد المحدد يعتمد على السيناريو، لكن وظيفيًا البدائل متكافئة.