بهبود پردازش تصویر با API مدرن

معرفی

به‌صورت تاریخی، Aspose Slides به java.awt وابسته بوده و در API عمومی کلاس‌های زیر را دارد:

به‌موجب نسخه 24.4، این API عمومی به‌عنوان منسوخ اعلام شده است.

به‌منظور حذف وابستگی‌ها به این کلاس‌ها، ما به اصطلاح «API مدرن» را افزودیم – یعنی API‌ای که باید به‌جای نسخه منسوخ استفاده شود، که امضاهای آن شامل وابستگی به BufferedImage هستند. Graphics2D به‌عنوان منسوخ اعلام شده و پشتیبانی آن از API عمومی Slides حذف شده است.

در نسخه‌های فعلی، API عمومی که به انواع java.awt وابسته است را به‌عنوان قدیمی/منسوخ درنظر بگیرید. برای کد جدید و هنگام مهاجرت جریان‌های پردازش تصویر موجود از API مدرن استفاده کنید.

API مدرن

کلاس‌ها و enumهای زیر به API عمومی اضافه شدند:

  • IImage - تصویر رستر یا وکتور را نشان می‌دهد.
  • ImageFormat - فرمت فایل تصویر را نشان می‌دهد.
  • Images - متدهایی برای ایجاد نمونه و کار با کلاس IImage .

توجه داشته باشید که [IImage] قابل حذف است (باید پس از استفاده حذف شود).

از getImage برای رندر یک اسلاید یا شکل استفاده کنید. از getImages برای رندر چندین اسلاید ارائه استفاده کنید. از متدهای Images برای بارگذاری تصاویر، addImage با IImage برای افزودن آن‌ها به یک ارائه، و replaceImage با IImage برای به‌روزرسانی تصویر موجود در ارائه استفاده کنید.

یک سناریوی معمولی برای استفاده از API جدید می‌تواند به‌صورت زیر باشد:

use aspose\slides\Presentation;
use aspose\slides\ShapeType;
use aspose\slides\ImageFormat;
use aspose\slides\Images;


$pres = new Presentation();

# یک نمونه‌ی حذف‌پذیر از IImage را از فایل روی دیسک ایجاد کنید.
$image = Images::fromFile("image.png");

# یک تصویر PowerPoint ایجاد کنید با افزودن یک نمونه IImage به تصاویر ارائه.
$ppImage = $pres->getImages()->addImage($image);
$image->dispose();

# افزودن یک شکل تصویر به اسلاید شماره ۱
$pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $ppImage);

$dimension = new Java("java.awt.Dimension", 1920, 1080);
# یک نمونه از IImage که اسلاید شماره ۱ را نمایندگی می‌کند، دریافت کنید.
$slideImage = $pres->getSlides()->get_Item(0)->getImage($dimension);

# تصویر را روی دیسک ذخیره کنید.
$slideImage->save("slide1.jpeg", ImageFormat::Jpeg);
$slideImage->dispose();

$pres->dispose();

جایگزینی کدهای قدیمی با API مدرن

به‌طور کلی، شما باید فراخوانی‌هایی که از BufferedImage و ImageIO استفاده می‌کنند را با متدهای جدید که از IImage استفاده می‌کنند، جایگزین کنید.

Legacy/deprecated API:

$dimension = new Java("java.awt.Dimension", 1920, 1080);
$slideImage = $pres->getSlides()->get_Item(0)->getThumbnail($dimension);
$imageio = new Java("javax.imageio.ImageIO");
$javafile = new Java("java.io.File", "image.png");
$imageio->write($slideImage, "PNG", $javafile);

Modern API:

$dimension = new Java("java.awt.Dimension", 1920, 1080);
$slideImage = $pres->getSlides()->get_Item(0)->getImage($dimension);
$slideImage->save("image.png", ImageFormat::Png);
$slideImage->dispose();

دریافت تصویر کوچک اسلاید

Legacy/deprecated API:

use aspose\slides\Presentation;


$pres = new Presentation("pres.pptx");

$slideImage = $pres->getSlides()->get_Item(0)->getThumbnail();

imageio = new Java("javax.imageio.ImageIO");
$javafile = new Java("java.io.File", "slide1.png");
$imageio->write($slideImage, "PNG", $javafile);

$pres->dispose();

Modern API:

use aspose\slides\Presentation;
use aspose\slides\ImageFormat;


$pres = new Presentation("pres.pptx");

$slideImage = $pres->getSlides()->get_Item(0)->getImage();
$slideImage->save("slide1.png", ImageFormat::Png);
$slideImage->dispose();

$pres->dispose();

دریافت تصویر کوچک شکل

Legacy/deprecated API:

use aspose\slides\Presentation;


$pres = new Presentation("pres.pptx");

$shapeImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getThumbnail();

$imageio = new Java("javax.imageio.ImageIO");
$javafile = new Java("java.io.File", "shape.png");
$imageio->write($shapeImage, "PNG", $javafile);

$pres->dispose();

Modern API:

use aspose\slides\Presentation;
use aspose\slides\ImageFormat;


$pres = new Presentation("pres.pptx");

$shapeImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage();
$shapeImage->save("shape.png");
$shapeImage->dispose();

$pres->dispose();

دریافت تصویر کوچک ارائه

Legacy/deprecated API:

use aspose\slides\Presentation;
use aspose\slides\RenderingOptions;


$pres = new Presentation("pres.pptx");

$renderingOptions = new RenderingOptions();
$dimension = new Java("java.awt.Dimension", 1920, 1080);

$bitmaps = $pres->getThumbnails($renderingOptions, $dimension);
for ($i = 0; $i < count(java_values($bitmaps)); $i++)
{
    $thumbnail = $bitmaps[$i];
    $imageio = new Java("javax.imageio.ImageIO");
    $javafile = new Java("java.io.File", "slide" . $i . ".png");
    $imageio->write($thumbnail, "PNG", $javafile);
}

$pres->dispose();

Modern API:

use aspose\slides\Presentation;
use aspose\slides\ImageFormat;
use aspose\slides\RenderingOptions;


$pres = new Presentation("pres.pptx");

$renderingOptions = new RenderingOptions();
$dimension = new Java("java.awt.Dimension", 1920, 1080);

$images = $pres->getImages($renderingOptions, $dimension);
for ($i = 0; $i < count(java_values($images)); $i++)
{
    $thumbnail = $images[$i];
    $thumbnail->save("slide" . $i . ".png", ImageFormat::Png);
}

$pres->dispose();

افزودن تصویر به یک ارائه

Legacy/deprecated API:

use aspose\slides\Presentation;
use aspose\slides\ShapeType;


$pres = new Presentation();

$imageio = new Java("javax.imageio.ImageIO");
$javafile = new Java("java.io.File", "image.png");

$bufferedImages = $imageio->read($javafile);
$ppImage = $pres->getImages()->addImage($bufferedImages);

$pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $ppImage);

$pres->dispose();

Modern API:

use aspose\slides\Presentation;
use aspose\slides\Images;
use aspose\slides\ShapeType;


$pres = new Presentation();

$image = Images::fromFile("image.png");
$ppImage = $pres->getImages()->addImage($image);
$image->dispose();

$pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $ppImage);

$pres->dispose();

متدهای منسوخ و جایگزین آن‌ها در API مدرن

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) No Modern API replacement
public final void renderToGraphics(IRenderingOptions options, Graphics2D graphics, float scaleX, float scaleY) No Modern API replacement
public final void renderToGraphics(IRenderingOptions options, Graphics2D graphics, Dimension renderingSize) No Modern API replacement

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 به‌عنوان منسوخ اعلام شده‌اند و جایگزین مستقیم در API مدرن ندارند.

به‌جای API که به Graphics2D رندر می‌کند، از متدهای رندر تصویر API مدرن استفاده کنید:

Slide

FAQ

چرا Graphics2D حذف شد؟

پشتیبانی از Graphics2D در API عمومی منسوخ شده است تا کار با رندر و تصاویر یکپارچه شود، وابستگی‌های پلتفرم‑خاص حذف شوند و به رویکردی چندپلتفرمی با IImage سوئیچ کنیم. به‌جای رندر به Graphics2D از getImage یا getImages استفاده کنید.

مزیت عملی IImage نسبت به BufferedImage چیست؟

IImage کار با هر دو تصویر رستر و وکتور را یکپارچه می‌کند و ذخیره به فرمت‌های مختلف را از طریق ImageFormat ساده می‌سازد.

آیا API مدرن بر عملکرد تولید تصویر کوچک تأثیر خواهد گذاشت؟

تبدیل از getThumbnail به getImage باعث کاهش یا افزایش عملکرد نمی‌شود: متدهای جدید همان قابلیت‌ها را برای تولید تصاویر با گزینه‌ها و اندازه‌ها فراهم می‌کنند و پشتیبانی از گزینه‌های رندر را حفظ می‌کنند. سود یا هزینه خاص بسته به سناریو متفاوت است، اما از نظر عملکردی جایگزین‌ها معادل هستند.