Spravovat obrázkové rámečky v prezentacích pomocí Javy
Úvod
Obrázkový rámeček je tvar, který obsahuje obrázek – je to jako obrázek v rámečku.
Můžete přidat obrázek na snímek pomocí obrázkového rámečku. Tímto způsobem můžete formátovat obrázek úpravou rámečku.
Tip
Aspose poskytuje zdarma konvertory —JPEG do PowerPoint a PNG do PowerPoint —které umožňují rychle vytvářet prezentace z obrázků.Vytvořit obrázkový rámeček
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte šířku a výšku obrázku.
- Vytvořte PictureFrame na základě šířky a výšky obrázku pomocí metody
AddPictureFramevystavené objektem tvaru přidruženým k odkazovanému snímku. - Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento Java kód ukazuje, jak vytvořit obrázkový rámeček:
// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získá první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Vytvoří instanci třídy Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Přidá obrázkový rámeček s ekvivalentní výškou a šířkou obrázku
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Zapíše soubor PPTX na disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Vytvořit obrázkový rámeček s relativním měřítkem
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Přidejte obrázek do kolekce obrázků prezentace.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte relativní šířku a výšku obrázku v obrázkovém rámečku.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento Java kód ukazuje, jak vytvořit obrázkový rámeček s relativním měřítkem:
// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získá první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Vytvoří instanci třídy Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Přidá obrázkový rámeček s výškou a šířkou ekvivalentní obrázku
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Nastavení relativního měřítka výšky a šířky
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// Zapíše soubor PPTX na disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Extrahovat rastrové obrázky z obrázkových rámečků
Můžete extrahovat rastrové obrázky z objektů PictureFrame a uložit je jako PNG, JPG a další formáty. Níže uvedený příklad kódu demonstruje, jak extrahovat obrázek z dokumentu sample.pptx a uložit jej ve formátu PNG.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
IShape firstShape = firstSlide.getShapes().get_Item(0);
if (firstShape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) firstShape;
try {
IImage slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
slideImage.save("slide_1_shape_1.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
}
} catch (IOException e) {
} finally {
presentation.dispose();
}
Extrahovat SVG obrázky z obrázkových rámečků
Když prezentace obsahuje SVG grafiku umístěnou uvnitř tvarů PictureFrame, Aspose.Slides pro Java umožňuje získat původní vektorové obrázky s plnou věrností. Procházením kolekce tvarů snímku můžete identifikovat každý PictureFrame, zkontrolovat, zda podkladový IPPImage obsahuje SVG obsah, a poté tento obrázek uložit na disk nebo do proudu v jeho nativním SVG formátu.
Následující ukázka kódu demonstruje, jak extrahovat SVG obrázek z obrázkového rámečku:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) shape;
ISvgImage svgImage = pictureFrame.getPictureFormat().getPicture().getImage().getSvgImage();
FileOutputStream fos = new FileOutputStream("output.svg");
fos.write(svgImage.getSvgData());
fos.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
presentation.dispose();
}
Získat průhlednost obrázku
Aspose.Slides umožňuje získat efekt průhlednosti aplikovaný na obrázek. Tento Java kód demonstruje operaci:
Presentation presentation = new Presentation("Test.pptx");
var pictureFrame = (IPictureFrame) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var effect : imageTransform) {
if (effect instanceof IAlphaModulateFixed) {
var alphaModulateFixed = (IAlphaModulateFixed) effect;
var transparencyValue = 100 - alphaModulateFixed.getAmount();
System.out.println("Picture transparency: " + transparencyValue);
}
}
Získat jas a kontrast obrázku
Aspose.Slides umožňuje získat efekt jasu a kontrastu aplikovaný na obrázek. Rozhraní ILuminance představuje tento transformační efekt obrázku.
Tento Java kód ukazuje, jak získat nastavení jasu a kontrastu z obrázkového rámečku:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame) shape;
IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (IImageTransformOperation effect : imageTransform) {
if (effect instanceof ILuminance) {
ILuminanceEffectiveData luminance = ((ILuminance) effect).getEffective();
float brightness = luminance.getBrightness();
float contrast = luminance.getContrast();
System.out.println("Brightness: " + brightness);
System.out.println("Contrast: " + contrast);
}
}
} finally {
presentation.dispose();
}
Formátování obrázkového rámečku
Aspose.Slides poskytuje řadu možností formátování, které lze použít na obrázkový rámeček. Pomocí těchto možností můžete upravit rámeček tak, aby splňoval konkrétní požadavky.
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte šířku a výšku obrázku.
- Vytvořte
PictureFramena základě šířky a výšky obrázku pomocí metody AddPictureFrame vystavené objektu IShapes přidruženému k odkazovanému snímku. - Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Nastavte barvu čáry obrázkového rámečku.
- Nastavte šířku čáry obrázkového rámečku.
- Otočte obrázkový rámeček zadáním kladné nebo záporné hodnoty.
- Kladná hodnota otáčí obrázek po směru hodinových ručiček.
- Záporná hodnota otáčí obrázek proti směru hodinových ručiček.
- Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento Java kód demonstruje proces formátování obrázkového rámečku:
// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získá první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Vytvoří instanci třídy Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Přidá obrázkový rámeček s výškou a šířkou ekvivalentní obrázku
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Aplikuje určité formátování na PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Zapíše soubor PPTX na disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tip
Aspose nedávno vyvinul bezplatný Collage Maker. Pokud potřebujete sloučit JPG/JPEG nebo PNG obrázky, vytvořit mřížky z fotografií, můžete použít tuto službu.Přidat obrázek jako odkaz
Aby se předešlo velké velikosti prezentace, můžete přidávat obrázky (nebo videa) pomocí odkazů místo vkládání souborů přímo do prezentace. Tento Java kód ukazuje, jak přidat obrázek a video do zástupce:
Presentation presentation = new Presentation("input.pptx");
try {
ArrayList<IShape> shapesToRemove = new ArrayList<IShape>();
int shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
for (int i = 0; i < shapesCount; i++)
{
IShape autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
if (autoShape.getPlaceholder() == null)
{
continue;
}
switch (autoShape.getPlaceholder().getType())
{
case PlaceholderType.Picture:
IPictureFrame pictureFrame = presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle,
autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), null);
pictureFrame.getPictureFormat().getPicture().setLinkPathLong(
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
shapesToRemove.add(autoShape);
break;
case PlaceholderType.Media:
IVideoFrame videoFrame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(
autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), "");
videoFrame.getPictureFormat().getPicture().setLinkPathLong(
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
videoFrame.setLinkPathLong("https://youtu.be/t_1LYZ102RA");
shapesToRemove.add(autoShape);
break;
}
}
for (IShape shape : shapesToRemove)
{
presentation.getSlides().get_Item(0).getShapes().remove(shape);
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
Oříznout obrázky
Tento Java kód ukazuje, jak oříznout existující obrázek na snímku:
Presentation pres = new Presentation();
// Vytvoří nový objekt obrázku
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Přidá PictureFrame na snímek
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Ořízne obrázek (procentuální hodnoty)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Uloží výsledek
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Odstranit oříznuté oblasti obrázku
Pokud chcete odstranit oříznuté oblasti obrázku obsaženého v rámečku, můžete použít metodu deletePictureCroppedAreas(). Tato metoda vrátí oříznutý obrázek nebo původní obrázek, pokud oříznutí není potřeba.
Tento Java kód demonstruje operaci:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Získá PictureFrame z prvního snímku
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Smaže oříznuté oblasti obrázku PictureFrame a vrátí oříznutý obrázek
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Uloží výsledek
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
POZNÁMKA
Metoda deletePictureCroppedAreas() přidává oříznutý obrázek do kolekce obrázků prezentace. Pokud je obrázek použit pouze v zpracovaném PictureFrame, tato úprava může snížit velikost prezentace. V opačném případě se počet obrázků ve výsledné prezentaci zvýší.
Metoda během ořezávání převádí WMF/EMF meta‑soubory na rastrový PNG obrázek.
Komprimovat obrázky
Můžete komprimovat obrázek v prezentaci pomocí metody IPictureFillFormat.compressImage. Tato metoda komprimuje obrázek snížením jeho velikosti na základě velikosti tvaru a zadaného rozlišení, s možností smazat oříznuté oblasti.
Upravuje velikost a rozlišení obrázku podobně jako funkce PowerPointu Picture Format → Compress Pictures → Resolution.
Následující Java příklady ukazují, jak komprimovat obrázek v prezentaci zadáním cílového rozlišení a volitelným odstraněním oříznutých oblastí:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimuje obrázek s cílovým rozlišením 150 DPI (webové rozlišení) a odstraní oříznuté oblasti.
boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
// Zkontroluje výsledek komprese.
if (result) {
System.out.println("Image successfully compressed.");
} else {
System.out.println("Image compression failed or no changes were necessary.");
}
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Nebo přímo s vlastním DPI:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimuje obrázek na 150 DPI (webové rozlišení), odstraňuje oříznuté oblasti.
pictureFrame.getPictureFormat().compressImage(true, 150f);
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
POZNÁMKA
Metoda převádí obrázek na nižší rozlišení na základě velikosti tvaru a zadaného DPI. Oříznuté oblasti mohou být také smazány pro optimalizaci velikosti souboru.Pokud je obrázek meta‑soubor (WMF/EMF) nebo SVG, komprese se neuplatní. Kvalita JPEG je zachována nebo mírně snížena podle rozlišení, podobně jako PowerPoint zachází s vysokým rozlišením JPEG.
Zamknout poměr stran
Pokud chcete, aby tvar obsahující obrázek zachoval svůj poměr stran i po změně rozměrů obrázku, můžete použít metodu setAspectRatioLocked k nastavení volby Lock Aspect Ratio.
Tento Java kód ukazuje, jak zamknout poměr stran tvaru:
Presentation pres = new Presentation("pres.pptx");
try {
ILayoutSlide layout = pres.getLayoutSlides().getByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.getSlides().addEmptySlide(layout);
IPPImage picture;
IImage image = Images.fromFile("image.png");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
IPictureFrame pictureFrame = emptySlide.getShapes().addPictureFrame(
ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
// nastavit tvar tak, aby zachoval poměr stran při změně velikosti
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
POZNÁMKA
Nastavení Lock Aspect Ratio zachovává pouze poměr stran tvaru, ne samotného obrázku, který obsahuje.Použít vlastnost StretchOff
Použitím vlastností StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight a StretchOffsetBottom z rozhraní IPictureFillFormat a třídy PictureFillFormat můžete určit výplňový obdélník.
Když je pro obrázek zadáno natažení, zdrojový obdélník se přepočítá tak, aby zaplnil určený výplňový obdélník. Každý okraj výplňového obdélníku je definován procentuálním posunem od odpovídajícího okraje ohraničujícího rámečku tvaru. Kladné procento udává odsazení dovnitř, záporné procento pak vystoupení ven.
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Přidejte obdélník
AutoShape. - Vytvořte obrázek.
- Nastavte typ výplně tvaru.
- Nastavte režim výplně obrázkem.
- Přidejte nastavený obrázek k výplni tvaru.
- Zadejte posuny obrázku od odpovídajících okrajů ohraničujícího rámečku tvaru.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento Java kód demonstruje proces, kde je použita vlastnost StretchOff:
// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získá první snímek
ISlide slide = pres.getSlides().get_Item(0);
// Vytvoří instanci třídy ImageEx
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Přidá AutoShape nastavený na obdélník
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Nastaví typ výplně tvaru
aShape.getFillFormat().setFillType(FillType.Picture);
// Nastaví režim výplně obrázkem tvaru
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Nastaví obrázek pro výplň tvaru
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Určuje posuny obrázku od odpovídajícího okraje ohraničujícího rámečku tvaru
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
//Zapíše soubor PPTX na disk
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Často kladené otázky
Jak zjistit, které formáty obrázků jsou podporovány pro PictureFrame?
Aspose.Slides podporuje jak rastrové obrázky (PNG, JPEG, BMP, GIF atd.), tak vektorové obrázky (například SVG) prostřednictvím objektu obrázku přiřazeného k PictureFrame. Seznam podporovaných formátů obecně překrývá možnosti motoru pro konverzi snímků a obrázků.
Jaký vliv bude mít přidání desítek velkých obrázků na velikost a výkon PPTX?
Vkládání velkých obrázků zvyšuje velikost souboru a spotřebu paměti; propojování na obrázky pomáhá udržet velikost prezentace nízkou, ale vyžaduje, aby externí soubory zůstaly dostupné. Aspose.Slides poskytuje možnost přidávat obrázky jako odkazy pro snížení velikosti souboru.
Jak mohu zamknout objekt obrázku před neúmyslným přesouváním/změnou velikosti?
Použijte uzamykání tvarů pro PictureFrame (např. zakázání přesunu nebo změny velikosti). Mechanismus uzamykání je popsán pro tvary v samostatném článku o ochraně a je podporován pro různé typy tvarů, včetně PictureFrame.
Zůstane zachována vektorová věrnost SVG při exportu prezentace do PDF/obrázků?
Aspose.Slides umožňuje extrahovat SVG z PictureFrame jako původní vektor. Při exportu do PDF nebo rasterových formátů může být výsledek rasterizován podle nastavení exportu; fakt, že původní SVG je uložen jako vektor, je potvrzen chováním extrakce.