Optimalizace správy obrázků v prezentacích pomocí Javy

Úvod

Obrázky činí prezentace poutavějšími a zajímavějšími. V Microsoft PowerPoint můžete do snímků vložit obrázky ze souboru, z internetu nebo z jiných míst. Podobně Aspose.Slides umožňuje přidávat obrázky do snímků ve vašich prezentacích různými postupy.

Aspose.Slides podporuje operace s obrázky v těchto populárních formátech: JPEG, PNG, GIF a další.

Přidání obrázků uložených lokálně do snímků

Můžete přidat jeden nebo několik obrázků z vašeho počítače na snímek v prezentaci. Tento vzorový kód v Javě ukazuje, jak přidat obrázek na snímek:

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();
}

Přidání obrázků z webu do snímků

Pokud obrázek, který chcete přidat na snímek, není k dispozici ve vašem počítači, můžete jej přidat přímo z webu.

Tento vzorový kód ukazuje, jak přidat obrázek z webu na snímek v Javě:

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();
}

Přidání obrázků do Slide Masterů

Slide master je hlavní snímek, který ukládá a řídí informace (téma, rozvržení atd.) o všech snímcích pod ním. Když tedy přidáte obrázek do slide masteru, tento obrázek se objeví na každém snímku pod tímto masterem.

Tento vzorový kód v Javě ukazuje, jak přidat obrázek do slide masteru:

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();
}

Přidání obrázků jako pozadí snímků

Můžete se rozhodnout použít obrázek jako pozadí pro konkrétní snímek nebo několik snímků. V takovém případě si prohlédněte Setting Images as Backgrounds for Slides.

Přidání SVG do prezentací

Můžete přidat nebo vložit libovolný obrázek do prezentace pomocí metody addPictureFrame patřící do rozhraní IShapeCollection.

Pro vytvoření objektu obrázku založeného na SVG můžete postupovat takto:

  1. Vytvořte objekt SvgImage pro vložení do ImageShapeCollection
  2. Vytvořte objekt PPImage z ISvgImage
  3. Vytvořte objekt PictureFrame pomocí rozhraní IPPImage

Tento vzorový kód ukazuje, jak implementovat výše uvedené kroky a přidat SVG obrázek do prezentace:

// Vytvořte instanci třídy Presentation, která představuje soubor 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();
}

Převod SVG na sadu tvarů

Převod SVG na sadu tvarů v Aspose.Slides je podobný funkčnosti PowerPointu používané k práci s SVG obrázky:

Vyskakovací nabídka PowerPoint

Funkčnost je poskytována jedním z přetížených metod addGroupShape rozhraní IShapeCollection, která jako první argument přijímá objekt ISvgImage.

Tento vzorový kód ukazuje, jak použít popsanou metodu k převodu SVG souboru na sadu tvarů:

// Vytvořte novou prezentaci
IPresentation presentation = new Presentation();
try {
    // Načtěte obsah souboru SVG
    byte[] svgContent = Files.readAllBytes(Paths.get("image.svg"));

    // Vytvořte objekt SvgImage
    ISvgImage svgImage = new SvgImage(svgContent);

    // Získat velikost snímku
    Dimension2D slideSize = presentation.getSlideSize().getSize();

    // Převést SVG obrázek na skupinu tvarů a přizpůsobit jej velikosti snímku
    presentation.getSlides().get_Item(0).getShapes().
            addGroupShape(svgImage, 0f, 0f, (float)slideSize.getWidth(), (float)slideSize.getHeight());

    // Uložte prezentaci ve formátu PPTX
    presentation.save("output.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (presentation != null) presentation.dispose();
}

Přidání obrázků jako EMF do snímků

Aspose.Slides for Java umožňuje generovat EMF obrázky z listů Excelu a přidávat tyto obrázky jako EMF do snímků pomocí Aspose.Cells.

Tento vzorový kód ukazuje, jak provést popsaný úkol:

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);

//Uložte sešit do proudu
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();
}

Nahrazení obrázků ve sbírce obrázků

Aspose.Slides umožňuje nahradit obrázky uložené v kolekci obrázků prezentace (včetně těch, které používají tvary snímků). Tato sekce ukazuje několik přístupů k aktualizaci obrázků v kolekci. API poskytuje přímé metody pro nahrazení obrázku pomocí raw bajtových dat, instance IImage nebo jiného obrázku, který už v kolekci existuje.

Postupujte podle následujících kroků:

  1. Načtěte soubor prezentace, který obsahuje obrázky, pomocí třídy Presentation.
  2. Načtěte nový obrázek ze souboru do pole bajtů.
  3. Nahraďte cílový obrázek novým obrázkem pomocí pole bajtů.
  4. V druhém přístupu načtěte obrázek do objektu IImage a nahraďte cílový obrázek tímto objektem.
  5. Ve třetím přístupu nahraďte cílový obrázek obrázkem, který již v kolekci obrázků prezentace existuje.
  6. Uložte upravenou prezentaci jako soubor PPTX.
// Vytvořte instanci třídy Presentation, která představuje soubor prezentace.
Presentation presentation = new Presentation("sample.pptx");
try {
    // První způsob.
    byte[] imageData = Files.readAllBytes(Paths.get("image0.jpeg"));
    IPPImage oldImage = presentation.getImages().get_Item(0);
    oldImage.replaceImage(imageData);
    
    // Druhý způsob.
    IImage newImage = Images.fromFile("image1.png");
    oldImage = presentation.getImages().get_Item(1);
    oldImage.replaceImage(newImage);
    newImage.dispose();
    
    // Třetí způsob.
    oldImage = presentation.getImages().get_Item(2);
    oldImage.replaceImage(presentation.getImages().get_Item(3));
    
    // Uložte prezentaci do souboru.
    presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Často kladené otázky

Zůstane původní rozlišení obrázku po vložení neporušené?

Ano. Původní pixely jsou zachovány, ale finální vzhled závisí na tom, jak je obrázek na snímku škálován a jaká komprese je použita při ukládání.

Jaký je nejlepší způsob, jak nahradit stejné logo na desítkách snímků najednou?

Umístěte logo do master snímku nebo rozvržení a nahraďte jej ve sbírce obrázků prezentace — aktualizace se projeví ve všech prvcích, které tento zdroj používají.

Lze vložené SVG převést na editovatelné tvary?

Ano. SVG můžete převést na skupinu tvarů, po čemž jednotlivé části budou editovatelné pomocí standardních vlastností tvaru.

Jak nastavit obrázek jako pozadí pro více snímků najednou?

Assign the image as the background na master snímku nebo příslušném rozvržení — každý snímek používající tento master/rozvržení zdědí pozadí.

Jak zabránit nabrání velikosti prezentace kvůli mnoha obrázkům?

Znovu použijte jediný zdroj obrázku místo duplicit, zvolte rozumná rozlišení, aplikujte kompresi při ukládání a opakující se grafiku umístěte na master, kde je to vhodné.