Optimalizálja a képek kezelését prezentációkban Androidon
Bevezetés
Aspose.Slides for Android via Java többféle módot biztosít a képek kezelésére, és mindegyik más célra szolgál. Egy képet tárolhat a prezentációban, megjelenítheti egy képkockában, háttérként használhatja a dián, külső képhez kapcsolódhat, helyettesítheti a megosztott kép erőforrást, vagy SVG tartalmat alakíthat át szerkeszthető alakzatokká.
Ez a cikk a kép erőforrásokra és azok használatára a prezentáción belül összpontosít. A képkivágásra, átlátszóságra, effektusokra, nyújtásra és egyéb formázásokra, amelyeket egyedi képkockára alkalmaznak, lásd Picture Frame.
Értse meg a képmodellt
A következő API-konceptusok szorosan kapcsolódnak, de nem cserélhetők fel:
- A presentation image collection a prezentáció által használt kép erőforrásokat tárolja. Használja a ImageCollection.addImage metódust képadatok hozzáadásához, és kap egy IPPImage erőforrást.
- A picture frame egy alakzat, amely képet jelenít meg egy dián, elrendezésen vagy mesteren. Használja az IShapeCollection.addPictureFrame metódust egy kép erőforrás elhelyezéséhez a dián.
- A dia háttér képet használ a dia kitöltésének részeként, nem alakzatként. Ezért nem viselkedik úgy, mint egy képkocka.
- A IPPImage.replaceImage kicserél egy kép erőforrást. Ha több prezentációelem használja azt, mindegyik a helyettesítést használja.
- Az SVG alakzatokká konvertálása szerkeszthető diák alakzatait hozza létre. A konverzió után a tartalom már nem egyetlen képernyő erőforrásként van kezelve.
Egy tipikus munkafolyamat ezért a következő: adjunk kép adatot a képgyűjteményhez, kapjunk egy IPPImage, majd használjuk azt az erőforrást egy vagy több képkockában vagy kitöltésben.
Beágyazott kép hozzáadása
Egy helyi kép beszúrásához töltse be a fájlt, adja hozzá a képgyűjteményhez, majd hozzon létre egy képkockát, amely a visszakapott IPPImage-t használja.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
IPPImage image;
IImage sourceImage = Images.fromFile("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
if (sourceImage != null) sourceImage.dispose();
}
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 320, 180, image);
presentation.save("presentation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az így hozzáadott kép be van ágyazva a prezentációba, így a létrehozott fájl nem függ attól, hogy az eredeti kép fájl elérhető marad-e.
Kép hozzáadása a webről
Ha egy kép HTTP vagy HTTPS protokollon keresztül érhető el, töltse le a bájtokat, adja hozzá a prezentáció képgyűjteményéhez, és használja a visszakapott kép erőforrást ugyanúgy, mint egy helyi kép esetén.
import com.aspose.slides.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
Presentation presentation = new Presentation();
try {
URL imageUrl = URI.create("https://example.com/image.png").toURL();
HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
try (InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) outputStream.write(buffer, 0, bytesRead);
IPPImage image = presentation.getImages().addImage(outputStream.toByteArray());
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 320, 180, image);
}
presentation.save("presentation-from-web.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Hosszú ideig futó alkalmazásokban használja újra az HTTP-klienst vagy egy a programnak megfelelő kapcsolatkezelési stratégiát ahelyett, hogy újra és újra szükségtelen hálózati infrastruktúrát hozna létre. Emellett ellenőrizze a távoli URL-eket, a válaszméreteket és a tartalomtípusokat, ha a forrás nem megbízható.
Képek újrafelhasználása diákon át
Ha ugyanaz a kép több alkalommal is szükséges, adja hozzá a prezentációhoz egyszer, és használja újra a visszakapott [IPPImage] erőforrást további képkockák létrehozásakor. Ez elkerüli a forrásadatok többszöri betöltését, és egyértelművé teszi a megosztott kép erőforrás és felhasználásai közti kapcsolatot.
A sok dián automatikusan megjelenő grafikák esetén, például egy vállalati logó, fontolja meg a képkocka elhelyezését egy slide master vagy elrendezésen, ahelyett, hogy minden diához külön alakzatot adna hozzá.
Kép használata dia háttérként
A háttérkép a dia kitöltéséhez van hozzárendelve; nem képkocka alakzatként kerül hozzáadásra. Ez akkor hasznos, ha a képnek a dia hátterét kell lefednie, és nem szeretnénk a szokásos diaobjektumként manipulálni.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPPImage image;
IImage sourceImage = Images.fromFile("background.jpg");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
if (sourceImage != null) sourceImage.dispose();
}
slide.getBackground().setType(BackgroundType.OwnBackground);
slide.getBackground().getFillFormat().setFillType(FillType.Picture);
slide.getBackground().getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
slide.getBackground().getFillFormat().getPictureFillFormat().getPicture().setImage(image);
presentation.save("background-image.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
További háttérbeállításokért, beleértve a mester és elrendezés háttereket, lásd Presentation Background.
Beágyazott és kapcsolt képek
A beágyazott és a kapcsolt képek különböző hordozhatósági és fájlméret-mérlegelt előnyökkel rendelkeznek:
- Beágyazott kép: a képadat a prezentáción belül tárolódik. A prezentáció önálló, de a fájlméret tartalmazza a kép adatot.
- Kapcsolt kép: a prezentáció egy elérési utat vagy URL-t tárol egy külső képhez. Ez csökkentheti a prezentáció méretét, de a külső erőforrásnak elérhetőnek kell maradnia, amikor a prezentációt megnyitják vagy renderelik.
Egy kapcsolt képet úgy hozhatunk létre, hogy a külső útvonalat vagy URL-t a ISlidesPicture.setLinkPathLong segítségével rendeli hozzá, ahelyett, hogy beágyazná a kép adatokat.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 320, 180, null);
pictureFrame.getPictureFormat().getPicture().setLinkPathLong("https://example.com/image.png");
presentation.save("linked-image.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Csak akkor használjon kapcsolt képeket, ha a telepítési környezet megbízhatóan hozzáfér a külső erőforráshoz. Olyan prezentációk esetén, amelyeknek offline kell működniük vagy rendszerek között mozognak, a beágyazott képek általában biztonságosabbak.
Működés SVG képekkel
Az SVG egy vektorfájl formátum, ezért hasznos lehet ikonok, diagramok és egyéb grafika számára, amelynek méretezésekor nem veszik el a részletek, mint a raszteres képek esetén. Az Aspose.Slides támogatja az SVG-t képernyő erőforrásként és szerkeszthető dia alakzatok forrásaként egyaránt.
SVG hozzáadása képként
Hozzon létre egy SvgImage-t, adja hozzá a képgyűjteményhez, és helyezze a létrejött kép erőforrást egy képkockába.
import com.aspose.slides.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
Presentation presentation = new Presentation();
try {
byte[] imageData = Files.readAllBytes(Paths.get("icon.svg"));
String svgContent = new String(imageData, StandardCharsets.UTF_8);
ISvgImage svgImage = new SvgImage(svgContent);
IPPImage image = presentation.getImages().addImage(svgImage);
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 200, image);
presentation.save("svg-image.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Külső erőforrásokkal rendelkező SVG fájlok
Egy SVG hivatkozhat külső képekre, stíluslapokra vagy betűtípusokra. Ilyen esetekben a SvgImage olyan konstruktorokat biztosít, amelyek elfogadnak egy IExternalResourceResolver és egy alap URI-t. A feloldó képes egy relatív URI-t egy engedélyezett abszolút URI-ra leképezni, és visszaadni egy streamet a kért erőforráshoz.
A feloldó a külső erőforrásokat elérhetővé teszi, amíg az Aspose.Slides feldolgozza az SVG-t, de nem írja át az SVG-t önálló dokumentummá. Ha az SVG-nek hordozhatónak kell maradnia, ágyazzuk be a szükséges erőforrásokat magába az SVG-be, például data: URI-k használatával a kapcsolt képekhez.
Amikor SVG fájlok megbízhatatlan forrásból származnak, korlátozni kell a sémákat, fájl helyeket és host-okat, amelyeket a feloldó elérhet. A hálózati feloldók esetén időkorlátokat, válaszméret korlátokat és tartalomvalidálást is alkalmazni kell.
SVG konvertálása szerkeszthető alakzatokká
Aspose.Slides képes egy SVG-t átalakítani szerkeszthető dia alakzatok csoportjává, hasonlóan a megfelelő PowerPoint parancshoz.

Használja a IShapeCollection.addGroupShape túlterhelést, amely egy ISvgImage objektumot fogad a konvertáláshoz.
import com.aspose.slides.*;
import com.aspose.slides.android.SizeF;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
Presentation presentation = new Presentation();
try {
byte[] imageData = Files.readAllBytes(Paths.get("diagram.svg"));
String svgContent = new String(imageData, StandardCharsets.UTF_8);
ISvgImage svgImage = new SvgImage(svgContent);
SizeF slideSize = presentation.getSlideSize().getSize();
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addGroupShape(svgImage, 0, 0, (float) slideSize.getWidth(), (float) slideSize.getHeight());
presentation.save("editable-svg-shapes.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az SVG-alkalmazás alakzat-konvertálást használja, ha az egyes vektor elemeket PowerPoint alakzatként kell szerkeszteni. Ha az SVG-t csak meg kell jeleníteni, képként tartani egyszerűbb és elkerüli a sok különálló alakzat létrehozását.
Létező kép erőforrás cseréje
Használja a IPPImage.replaceImage metódust, ha egy meglévő kép erőforrást szeretne lecserélni. Ez különösen hasznos megosztott grafikák, például logók esetén.
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
IPPImage imageToReplace = presentation.getImages().get_Item(0);
IImage replacementImage = Images.fromFile("new-logo.png");
try {
imageToReplace.replaceImage(replacementImage);
} finally {
if (replacementImage != null) replacementImage.dispose();
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ha több képkocka, háttér, mester vagy elrendezés használja ugyanazt a kép erőforrást, ennek cseréje frissíti mindegyik felhasználását. Ha csak egy képkockát kell módosítani, akkor rendeljünk hozzá egy másik képet ahhoz a képkockához ahelyett, hogy a megosztott erőforrást cserélnénk.
replaceImage további túlterheléseket is biztosít, amelyek egy bájttömböt vagy egy másik IPPImage objektumot fogadnak.
Gyakorlati képkezelési irányelvek
A prezentáció méretének szabályozása
A nagy raszteres képek miatt a prezentáció feleslegesen nagy lehet. Használjon forrás képeket, amelyek dimenziói megfelelőek a tervezett megjelenítési mérethez, annyi esetben újrahasználjon megosztott kép erőforrásokat, és kerüljük el ugyanazon teljes felbontású grafika többszöri beágyazását.
Raszteres képek esetén, amelyeket már képkockába helyezett, az IPictureFillFormat.compressImage csökkentheti a kép adatot a kiválasztott felbontás és vágási beállítások szerint. Ez képkocka-feldolgozás, nem a képgyűjtemény kezelése, ezért lásd Picture Frame a kapcsolódó formázási műveletekhez.
Válasszon beágyazott és kapcsolt tartalom között
A beágyazás hordozhatóvá teszi a prezentációt, mivel minden szükséges kép adat a fájlban van. A kapcsolás csökkentheti a fájlméretet, de külső függőséget hoz be. Csak akkor használjon linkeket, ha ez a függőség elfogadható és stabil.
Megosztott márka újrahasználata
Ismétlődő logók, vízjelek vagy díszítő grafikák esetén használjon egy kép erőforrást és újrahasználja. Ha a grafika a prezentáció dizájnjához tartozik a dia tartalma helyett, helyezze el egy mesterre vagy elrendezésre, hogy a megfelelő diák örökölhessék.
SVG erőforrások hordozhatóságának megőrzése
Egy önálló SVG könnyebben mozgatható és konzisztensen renderelhető, mint egy olyan SVG, amely külső fájlokra vagy hálózati erőforrásokra támaszkodik. Amikor lehetséges, ágyazza be a szükséges erőforrásokat a SVG importálása előtt. Az SVG-t alakzatokká konvertálja csak akkor, ha az egyes vektor elemeket szerkeszteni kell.
Használja a modern keresztplatformos kép API-t
Új Android via Java kódhoz használja az Aspose.Slides IImage és Images API-kat a régi, a android.graphics.Bitmap-en alapuló nyilvános API helyett. Lásd a Modern API migrációs útmutatót.
WMF és EMF speciális megfontolást igényel. Amikor ezeket a formátumokat egy IImage segítségével adjuk át, az ImageCollection.addImage a metafájl tartalmát raszteres PNG-re konvertálja, mielőtt beilleszti. Ha a metafájl adat megőrzése fontos, használjon áramlatazonos ImageCollection.addImage túlterhelést. Az EMF tartalom generálása táblázatokból vagy más termékekből egy külön integrációs munkafolyamat, amely kívül esik a cikk hatókörén.
GYIK
Mi a különbség a képgyűjtemény és a képkocka között?
A képgyűjtemény újrahasználható kép erőforrásokat tárol. A képkocka egy dián elhelyezett alakzat, amely egy ilyen erőforrást jelenít meg, és képspecifikus formázási lehetőségeket (például vágást és effektusokat) biztosít.
Mi a legjobb módja a logó mindenhol való cseréjének?
Ha a logó már megosztott egy kép erőforrásként, cserélje azt a IPPImage.replaceImage segítségével. A prezentáció-szintű márka esetén a logó elhelyezése egy mesterre vagy elrendezésre szintén csökkentheti a duplikált diatartalmat.
Miért tűnik el egy kapcsolt kép egy másik számítógépen?
Egy kapcsolt kép a külső fájlt vagy URL-től függ. Ha azt a másik számítógépről nem lehet elérni, a kapcsolt kép nem lesz elérhető. Beágyazza a képet, ha a prezentációnak önállónak kell lennie.
Szerkeszthető PowerPoint alakzatként beilleszthető az SVG?
Igen. Konvertálja az SVG-t a IShapeCollection.addGroupShape használatával; az eredményül kapott csoport szerkeszthető dia alakzatokat tartalmaz, nem egy SVG képet.
Hogyan tarthatom kisebbnek a sok képet tartalmazó prezentációkat?
Használjon megosztott kép erőforrásokat, kerülje a fölöslegesen nagy raszteres forrásokat, tömörítse a megfelelő raszteres képeket amikor szükséges, helyezze a ismétlődő márkát mesterekre vagy elrendezésekre, és csak akkor használjon kapcsolt képeket, ha a külső függőség elfogadható.