بهینه‌سازی مدیریت تصاویر در ارائه‌ها با استفاده از جاوا

مقدمه

تصاویر ارائه‌ها را جذاب‌تر و جالب‌تر می‌کنند. در Microsoft PowerPoint می‌توانید عکس‌ها را از یک فایل، اینترنت یا مکان‌های دیگر به اسلایدها اضافه کنید. به طور مشابه Aspose.Slides به شما اجازه می‌دهد تصاویر را به اسلایدهای ارائه‌تان از طریق روش‌های مختلف اضافه کنید.

Aspose.Slides از عملیات با تصاویر در این قالب‌های محبوب پشتیبانی می‌کند: JPEG، PNG، GIF و سایرین.

اضافه کردن تصاویر ذخیره شده به‌صورت محلی به اسلایدها

می‌توانید یک یا چند تصویر موجود در کامپیوتر خود را به یک اسلاید در ارائه اضافه کنید. این کد نمونه در Java نشان می‌دهد چگونه یک تصویر را به اسلاید اضافه کنید:

Presentation pres = new Presentation();
try {
	ISlide slide = pres.getSlides().get_Item(0);
	    IPPImage picture;
        IImage image = Images.fromFile("image.png");
        try {
            picture = pres.getImages().addImage(image);
        } finally {
            if (image != null) image.dispose();
        }
	slide.getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, picture);

	pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
	if (pres != null) pres.dispose();
}

اضافه کردن تصاویر از وب به اسلایدها

اگر تصویری که می‌خواهید به اسلاید اضافه کنید بر روی کامپیوتر شما موجود نیست، می‌توانید تصویر را مستقیماً از وب اضافه کنید.

این کد نمونه نشان می‌دهد چگونه یک تصویر را از وب به اسلاید در Java اضافه کنید:

Presentation pres = new Presentation();
try {
	ISlide slide = pres.getSlides().get_Item(0);

	URL imageUrl = new URL("[REPLACE WITH URL]");
	URLConnection connection = imageUrl.openConnection();
	InputStream inputStream = connection.getInputStream();

	ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
	try {
		byte[] buffer = new byte[1024];
		int read;

		while ((read = inputStream.read(buffer, 0, buffer.length)) != -1)
			outputStream.write(buffer, 0, read);

		outputStream.flush();

		IPPImage image = pres.getImages().addImage(outputStream.toByteArray());
		slide.getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, image);
	} finally {
		if (inputStream != null) inputStream.close();
		outputStream.close();
	}

	pres.save("pres.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
	if (pres != null) pres.dispose();
}

اضافه کردن تصاویر به اسلاید مسترها

اسلاید مستر بالاترین اسلاید است که اطلاعات (تم، قالب و غیره) درباره تمام اسلایدهای زیرین را ذخیره و کنترل می‌کند. بنابراین وقتی تصویری را به اسلاید مستر اضافه می‌کنید، آن تصویر در هر اسلاید زیر آن مستر ظاهر می‌شود.

این کد نمونه Java نشان می‌دهد چگونه یک تصویر را به اسلاید مستر اضافه کنید:

Presentation pres = new Presentation();
try {
	ISlide slide = pres.getSlides().get_Item(0);
	IMasterSlide masterSlide = slide.getLayoutSlide().getMasterSlide();

    IPPImage picture;
    IImage image = Images.fromFile("image.png");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }
	masterSlide.getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, picture);

	pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
	if (pres != null) pres.dispose();
}

اضافه کردن تصاویر به‌عنوان پس‌زمینه اسلایدها

ممکن است تصمیم بگیرید از یک تصویر به‌عنوان پس‌زمینه برای یک اسلاید خاص یا چند اسلاید استفاده کنید. در این حالت باید تنظیم تصاویر به‌عنوان پس‌زمینه برای اسلایدها را ببینید.

اضافه کردن SVG به ارائه‌ها

می‌توانید هر تصویری را با استفاده از متد addPictureFrame که متعلق به رابط IShapeCollection است، به یک ارائه اضافه یا وارد کنید.

برای ایجاد یک شیء تصویر بر پایه تصویر SVG می‌توانید به این شکل عمل کنید:

  1. ایجاد شیء SvgImage برای افزودن به ImageShapeCollection
  2. ایجاد شیء PPImage از ISvgImage
  3. ایجاد شیء PictureFrame با استفاده از رابط IPPImage

این کد نمونه نشان می‌دهد چگونه مراحل بالا را برای افزودن یک تصویر SVG به یک ارائه پیاده‌سازی کنید:

// نمونه‌سازی کلاس Presentation که نمایانگر فایل PPTX است
Presentation pres = new Presentation();
try {
    String svgContent = new String(Files.readAllBytes(Paths.get("image.svg")));
    ISvgImage svgImage = new SvgImage(svgContent);
    IPPImage ppImage = pres.getImages().addImage(svgImage);
    pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 
			ppImage.getWidth(), ppImage.getHeight(), ppImage);
    pres.save("output.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

تبدیل SVG به مجموعه‌ای از اشکال

تبدیل SVG به مجموعه‌ای از اشکال در Aspose.Slides شبیه به عملکرد PowerPoint است که برای کار با تصاویر SVG استفاده می‌شود:

PowerPoint Popup Menu

این عملکرد توسط یکی از overloadهای متد addGroupShape رابط IShapeCollection که شیء ISvgImage را به‌عنوان اولین آرگومان می‌گیرد، فراهم می‌شود.

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

// ایجاد یک ارائه جدید
IPresentation presentation = new Presentation();
try {
    // خواندن محتوای فایل SVG
    byte[] svgContent = Files.readAllBytes(Paths.get("image.svg"));

    // ایجاد شیء SvgImage
    ISvgImage svgImage = new SvgImage(svgContent);

    // دریافت اندازه اسلاید
    Dimension2D slideSize = presentation.getSlideSize().getSize();

    // تبدیل تصویر SVG به گروهی از اشکال و مقیاس دادن آن به اندازه اسلاید
    presentation.getSlides().get_Item(0).getShapes().
            addGroupShape(svgImage, 0f, 0f, (float)slideSize.getWidth(), (float)slideSize.getHeight());

    // ذخیره ارائه در قالب PPTX
    presentation.save("output.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (presentation != null) presentation.dispose();
}

اضافه کردن تصاویر به‌صورت EMF به اسلایدها

Aspose.Slides برای Java به شما امکان می‌دهد تصاویر EMF را از شیت‌های Excel تولید کنید و این تصاویر را به‌صورت EMF در اسلایدها با Aspose.Cells اضافه کنید.

این کد نمونه نشان می‌دهد چگونه کار توصیف‌شده را انجام دهید:

Workbook book = new Workbook("chart.xlsx");
Worksheet sheet = book.getWorksheets().get(0);
ImageOrPrintOptions options = new ImageOrPrintOptions();
options.setHorizontalResolution(200);
options.setVerticalResolution(200);
options.setImageType(ImageType.EMF);

//ذخیره کتاب کار به جریان
SheetRender sr = new SheetRender(sheet, options);
Presentation pres = new Presentation();
try {
    pres.getSlides().removeAt(0);
    
    String EmfSheetName = "";
    for (int j = 0; j < sr.getPageCount(); j++)
    {
    
        EmfSheetName = "test" + sheet.getName() + " Page" + (j + 1) + ".out.emf";
        sr.toImage(j, EmfSheetName);

        IPPImage picture;
        IImage image = Images.fromFile(EmfSheetName);
        try {
            picture = pres.getImages().addImage(image);
        } finally {
            if (image != null) image.dispose();
        }
        ISlide slide = pres.getSlides().addEmptySlide(pres.getLayoutSlides().getByType(SlideLayoutType.Blank));
        IShape m = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0,
					(float)pres.getSlideSize().getSize().getWidth(), 
					(float)pres.getSlideSize().getSize().getHeight(), 
					picture);
    }
    
    pres.save("output.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

جایگزینی تصاویر در مجموعه تصاویر

Aspose.Slides به شما اجازه می‌دهد تصاویر ذخیره‌شده در مجموعه تصاویر یک ارائه (از جمله آن‌هایی که توسط اشکال اسلاید استفاده می‌شوند) را جایگزین کنید. این بخش چندین روش برای به‌روزرسانی تصاویر در مجموعه را نشان می‌دهد. API روش‌های ساده‌ای برای جایگزینی یک تصویر با استفاده از داده‌های بایتی خام، یک نمونه IImage یا تصویر دیگری که قبلاً در مجموعه وجود دارد، فراهم می‌کند.

مراحل زیر را دنبال کنید:

  1. فایل ارائه حاوی تصاویر را با کلاس Presentation بارگذاری کنید.
  2. تصویر جدید را از یک فایل به یک آرایه بایت بارگذاری کنید.
  3. تصویر هدف را با تصویر جدید با استفاده از آرایه بایت جایگزین کنید.
  4. در روش دوم، تصویر را به یک شیء IImage تبدیل کنید و تصویر هدف را با آن شیء جایگزین کنید.
  5. در روش سوم، تصویر هدف را با تصویری که قبلاً در مجموعه تصاویر ارائه وجود دارد، جایگزین کنید.
  6. ارائه اصلاح‌شده را به‌صورت فایل PPTX ذخیره کنید.
// نمونه‌سازی کلاس Presentation که نمایانگر یک فایل ارائه است.
Presentation presentation = new Presentation("sample.pptx");
try {
    // روش اول.
    byte[] imageData = Files.readAllBytes(Paths.get("image0.jpeg"));
    IPPImage oldImage = presentation.getImages().get_Item(0);
    oldImage.replaceImage(imageData);
    
    // روش دوم.
    IImage newImage = Images.fromFile("image1.png");
    oldImage = presentation.getImages().get_Item(1);
    oldImage.replaceImage(newImage);
    newImage.dispose();
    
    // روش سوم.
    oldImage = presentation.getImages().get_Item(2);
    oldImage.replaceImage(presentation.getImages().get_Item(3));
    
    // ذخیره ارائه در یک فایل.
    presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

FAQ

آیا وضوح اصلی تصویر پس از درج حفظ می‌شود؟
بله. پیکسل‌های منبع حفظ می‌شوند، اما ظاهر نهایی بستگی به این دارد که picture چگونه در اسلاید مقیاس‌بندی شود و آیا فشرده‌سازی هنگام ذخیره اعمال شده باشد یا نه.

بهترین روش برای جایگزینی یک لوگو به‌صورت همزمان در ده‌ها اسلاید چیست؟
لوگو را بر روی اسلاید مستر یا یک قالب قرار دهید و آن را در مجموعه تصاویر ارائه جایگزین کنید—به‌روزرسانی‌ها به تمام عناصری که از آن منبع استفاده می‌کنند، منتقل می‌شود.

آیا می‌توان یک SVG درج‌شده را به اشکال قابل ویرایش تبدیل کرد؟
بله. می‌توانید SVG را به یک گروه از اشکال تبدیل کنید، پس از آن بخش‌های جداگانه با خصوصیات استاندارد اشکال قابل ویرایش می‌شوند.

چگونه می‌توان یک تصویر را به‌عنوان پس‌زمینه برای چند اسلاید همزمان تنظیم کرد؟
تصویر را به‌عنوان پس‌زمینه در اسلاید مستر یا قالب مربوطه اختصاص دهید—هر اسلایدی که از آن مستر/قالب استفاده می‌کند، پس‌زمینه را ارث‌بری می‌کند.

چگونه می‌توان از افزایش حجم ارائه به‌دلیل تعداد زیاد تصاویر جلوگیری کرد؟
به‌جای استفاده از تصویرهای تکراری، یک منبع تصویر واحد را مجدداً استفاده کنید، وضوح‌های معقول انتخاب کنید، هنگام ذخیره فشرده‌سازی اعمال کنید و گرافیک‌های تکراری را در مستر قرار دهید که مناسب است.