Képek kezelésének optimalizálása prezentációkban JavaScript használatával
Bevezetés
Az Aspose.Slides for Node.js via Java többféle módot kínál a képekkel való munkához, és mindegyik más célra szolgál. Egy képet tárolhat a prezentációban, megjelenítheti képkockában, használhatja dia háttérként, linkelhet egy külső képre, lecserélhet egy közös képernyök forrást, vagy SVG tartalmat alakíthat át szerkeszthető alakzatokká.
Ez a cikk a képernyök forrásaira és azok prezentáción belüli használatára összpontosít. A vágás, átlátszóság, hatások, nyújtás és egyéb formázások, amelyeket egyedi képkockákra alkalmaznak, a Képkocka oldalon találhatók.
Értse meg a képmodellt
A következő API‑koncepciók szorosan kapcsolódnak, de nem cserélhetők fel:
- A prezentáció képgyűjteménye tárolja a prezentáció által használt képernyök forrásait. Az ImageCollection.addImage használatával hozzáadhat képadatokat és egy PPImage forrást kaphat.
- A képkocka egy alakzat, amely egy képet jelenít meg dia, elrendezés vagy mesteroldalon. Az ShapeCollection.addPictureFrame használatával egy képernyök forrást helyezhet el egy dián.
- A dia háttér egy 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 PPImage.replaceImage lecserél egy képernyök forrást. Ha több prezentációelem használja azt a forrást, mindegyik az új verziót használja.
- Az SVG alakzatokká konvertálása szerkeszthető diaalakzatokat hoz létre. A konvertálás után a tartalom már nem egyetlen képkocka forrásként van kezelve.
Egy tipikus munkafolyamat tehát: adja hozzá a képadatokat a képgyűjteményhez, kapjon egy PPImage objektumot, majd használja azt egy vagy több képkockában vagy kitöltésben.
Beágyazott kép hozzáadása
Egy helyi képet a beszúráshoz töltse be a fájlt, adja hozzá a képgyűjteményhez, és hozzon létre egy képkockát, amely a visszaadott PPImage forrást használja.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
let image;
const sourceImage = aspose.slides.Images.fromFile("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
if (sourceImage != null) {
sourceImage.dispose();
}
}
const slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 320, 180, image);
presentation.save("presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ezzel a módon hozzáadott kép beágyazott a prezentációba, ezért a keletkezett fájl nem függ az eredeti képfájl elérhetőségétől.
Kép hozzáadása a webről
Ha egy kép HTTP vagy HTTPS útján érhető el, töltse le a bájtjait, adja hozzá a prezentáció képgyűjteményéhez, és használja a visszakapott képernyök forrást ugyanúgy, mint egy helyi képnél.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const http = require("http");
const https = require("https");
const java = require("java");
function downloadBytes(url) {
return new Promise((resolve, reject) => {
const client = url.startsWith("https:") ? https : http;
client.get(url, (response) => {
if (response.statusCode < 200 || response.statusCode >= 300) {
response.resume();
reject(new Error(`HTTP ${response.statusCode}`));
return;
}
const chunks = [];
response.on("data", (chunk) => chunks.push(chunk));
response.on("end", () => resolve(Buffer.concat(chunks)));
}).on("error", reject);
});
}
(async () => {
const imageData = await downloadBytes("https://example.com/image.png");
const javaBytes = java.newArray("byte", Array.from(imageData));
const presentation = new aspose.slides.Presentation();
try {
const image = presentation.getImages().addImage(javaBytes);
const slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 320, 180, image);
presentation.save("presentation-from-web.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
})();
Hosszú futású alkalmazásokban ismételje fel a megfelelő HTTP kliens vagy kapcsolatkezelési stratégia használatát ahelyett, hogy folyamatosan felesleges 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 újrahasználata diákon át
Ha ugyanaz a kép többször szükséges, adja hozzá egyszer a prezentációhoz, és használja a visszakapott PPImage objektumot 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épernyök forrás és felhasználásai közti kapcsolatot.
Azok a grafikai elemek, amelyeknek automatikusan meg kell jelenniük sok dián, például egy vállalati logó, helyezze a képkockát egy dia mesteroldalra vagy elrendezésre ahelyett, hogy minden diára külön alakzatot adna.
Kép használata dia háttérként
A háttérkép a dia kitöltéséhez van rendelve; nem kerül képkocka alakzatként hozzáadásra. Ez akkor hasznos, ha a képnek a dia hátterét kell lefednie, és nem szabad normál diaobjektumként manipulálni.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
let image;
const sourceImage = aspose.slides.Images.fromFile("background.jpg");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
if (sourceImage != null) {
sourceImage.dispose();
}
}
const backgroundType = java.newByte(aspose.slides.BackgroundType.OwnBackground);
slide.getBackground().setType(backgroundType);
const fillType = java.newByte(aspose.slides.FillType.Picture);
slide.getBackground().getFillFormat().setFillType(fillType);
slide.getBackground().getFillFormat().getPictureFillFormat().setPictureFillMode(aspose.slides.PictureFillMode.Stretch);
slide.getBackground().getFillFormat().getPictureFillFormat().getPicture().setImage(image);
presentation.save("background-image.pptx", aspose.slides.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 a Prezentáció háttér szekciót.
Beágyazott és linkelt képek
A beágyazott és a linkelt képek különböző hordozhatósági és fájlméretbeli kompromisszumokkal rendelkeznek:
- Beágyazott kép: a képadatok a prezentációban vannak tárolva. A prezentáció önálló, de a fájlméret tartalmazza a képadatokat.
- Linkelt 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 a prezentáció megnyitásakor vagy renderelésekor.
Egy linkelt képet úgy hozhatunk létre, hogy a külső elérési utat vagy URL-t a Picture.setLinkPathLong segítségével rendeljük hozzá ahelyett, hogy a képadatokat beágyaznánk.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 320, 180, null);
pictureFrame.getPictureFormat().getPicture().setLinkPathLong("https://example.com/image.png");
presentation.save("linked-image.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Linkelt képeket csak akkor használjon, ha a telepítési környezet megbízhatóan hozzáfér a külső erőforráshoz. Azoknál a prezentációknál, amelyeknek offline kell működniük vagy rendszerek között kell mozgatniuk, a beágyazott képek általában biztonságosabbak.
Működés SVG képekkel
Az SVG egy vektoros formátum, ezért hasznos lehet ikonok, diagramok és egyéb grafikai elemek esetén, amelyeknek a raszteres képekhez képest részletek elvesztése nélkül kell skálázódniuk. Az Aspose.Slides az SVG-t mind képernyök forrásként, mind szerkeszthető diaalakzatok forrásaként támogatja.
SVG hozzáadása képként
Hozzon létre egy SvgImage objektumot, adja hozzá a képgyűjteményhez, és helyezze el a keletkezett képernyök forrást egy képkockában.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation();
try {
const svgContent = fs.readFileSync("icon.svg", "utf8");
const svgImage = new aspose.slides.SvgImage(svgContent);
const image = presentation.getImages().addImage(svgImage);
const slide = presentation.getSlides().get_Item(0);
slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 200, 200, image);
presentation.save("svg-image.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
SVG fájlok külső erőforrásokkal
Az SVG külső képeket, stíluslapokat vagy betűkészleteket hivatkozhat. Ilyen esetekre a SvgImage konstruktoraival olyan ExternalResourceResolver és alap-URI adható meg, amely a relatív URI-t engedélyezett abszolút URI‑vá alakítja, és a kért erőforráshoz egy adatfolyamot ad vissza.
A resolver külső erőforrásokat elérhetővé teszi, amíg az Aspose.Slides feldolgozza az SVG-t, de nem alakítja át az SVG-t önálló dokumentummá. Ha az SVG‑nek hordozhatónak kell maradnia, ágyazza be a szükséges erőforrásokat közvetlenül az SVG‑be, például data: URI‑k használatával a linkelt képekhez.
Ha az SVG fájlok nem megbízható forrásból származnak, korlátozza a sémákat, fájlhelyeket és hostokat, amelyeket a resolver elérhet. A hálózati resolvereknek szintén időkorlátokat, válaszméret‑limitet és tartalomvalidálást kell alkalmazniuk.
SVG konvertálása szerkeszthető alakzatokká
Az Aspose.Slides képes egy SVG‑t szerkeszthető diaalakzatok csoportjává konvertálni, hasonlóan a megfelelő PowerPoint parancshoz.

Használja a ShapeCollection.addGroupShape túlterhelést, amely SVG képet fogad el a konvertálás végrehajtásához.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation();
try {
const svgContent = fs.readFileSync("diagram.svg", "utf8");
const svgImage = new aspose.slides.SvgImage(svgContent);
const slideSize = presentation.getSlideSize().getSize();
const slide = presentation.getSlides().get_Item(0);
slide.getShapes().addGroupShape(svgImage, 0, 0, slideSize.getWidth(), slideSize.getHeight());
presentation.save("editable-svg-shapes.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Használja az SVG‑alakzat konvertálást, ha az egyedi vektor elemeket PowerPoint alakzatokként kell szerkeszteni. Ha az SVG‑t csak megjeleníteni kell, a képként tartása egyszerűbb és elkerüli sok különálló alakzat létrehozását.
Meglévő képernyök forrás cseréje
Használja a PPImage.replaceImage metódust, ha meglévő képernyök forrást szeretne cserélni. Különösen hasznos megosztott grafikai elemek, például logók esetén.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const imageToReplace = presentation.getImages().get_Item(0);
const replacementImage = aspose.slides.Images.fromFile("new-logo.png");
try {
imageToReplace.replaceImage(replacementImage);
} finally {
if (replacementImage != null) {
replacementImage.dispose();
}
}
presentation.save("output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ha több képkocka, háttér, mester vagy elrendezés használja ugyanazt a képernyök forrást, a forrás cseréje frissíti az összes használatot. Ha csak egy képkockát kell módosítani, akkor adjunk másik képet ahhoz a kerethez ahelyett, hogy a megosztott forrást cserélnénk.
A PPImage.replaceImage további túlterheléseket is kínál, amelyek bájt tömböt vagy egy másik PPImage objektumot fogadnak.
Gyakorlati képkezelési útmutató
A prezentáció méretének szabályozása
Nagy raszteres képek túl nagy méretű prezentációt eredményezhetnek. Használjon forrásképeket a kívánt megjelenítési mérethez megfelelő mérettel, ahol lehetséges újrahasználja a megosztott képernyök forrásokat, és kerülje ugyanazon teljes felbontású grafika többszöri beágyazását.
Raszteres képek esetén, amelyeket már képkockákba helyezett, a PictureFillFormat.compressImage a kiválasztott felbontás és vágási beállítások szerint csökkentheti a képadatokat. Ez képkocka‑feldolgozás, nem képgyűjtemény‑kezelés, ezért a kapcsolódó formázási műveletekhez lásd a Képkocka oldalt.
Választás beágyazott és linkelt tartalom között
A beágyazás hordozhatóvá teszi a prezentációt, mivel minden szükséges képadat a fájllal együtt utazik. A linkelés csökkentheti a fájlméretet, de külső függőséget vezet be. A linkeket csak akkor használja, 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ő grafikai elemek esetén használjon egy képernyök forrást és újrahasználja azt. Ha a grafika a prezentáció tervezéséhez tartozik a dia tartalma helyett, helyezze el egy mesteroldalon vagy elrendezésen, hogy a megfelelő diák örökölhessék.
**SVG erőforrások hordozhatóságának megőrzése
Az önálló SVG könnyebben mozgatható és következetesen renderelhető, mint egy külső fájlokra vagy hálózati erőforrásokra támaszkodó SVG. Ha lehetséges, ágyazza be a szükséges erőforrásokat az SVG importálása előtt. Az SVG‑t alakzatokká csak akkor konvertálja, ha az egyedi vektor elemeket szerkeszteni kell.
**A modern, többplatformos kép API használata
Új Node.js via Java kód esetén használja az Aspose.Slides IImage és Images API‑ját a java.awt.image.BufferedImage alapú örökölt nyilvános API helyett. A migrációs útmutatáshoz lásd a Modern API oldalt.
A WMF és EMF speciális figyelmet igényel. Ha ezeket a formátumokat egy IImage‑on keresztül továbbítják, az ImageCollection.addImage a metafájlt raszteres PNG ábrázolássá konvertálja beszúrás előtt. Ha fontos a metafájl adatainak megőrzése, használjon adatfolyam‑alapú ImageCollection.addImage túlterhelést. Az EMF tartalom generálása táblázatokból vagy más termékekből külön integrációs munkafolyamat, és nem része ennek a cikknek.
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épernyök forrásait tárolja. A képkocka egy dia alakzat, amely ezeket a forrásokat jeleníti meg, és képkocka‑specifikus formázást biztosít, mint például vágás és hatások.
Mi a legjobb módja annak, hogy mindenhol lecseréljük ugyanazt a logót?
Ha a logó már egy képernyök forrásként meg van osztva, cserélje ki azt a forrást a PPImage.replaceImage segítségével. A prezentáció‑wide márka esetén a logó elhelyezése egy mesteroldalon vagy elrendezésen szintén csökkentheti a duplikált dia tartalmat.
Miért tűnik el egy linkelt kép egy másik számítógépen?
A linkelt kép a külső fájlt vagy URL‑től függ. Ha a másik számítógépről nem érhető el ez az erőforrás, a linkelt kép nem lesz elérhető. Ágyazzon be egy képet, ha a prezentációnak önállónak kell lennie.
Lehet egy beszúrt SVG‑t PowerPoint alakzatokként szerkeszteni?
Igen. Konvertálja az SVG‑t a ShapeCollection.addGroupShape segítségével; a keletkezett csoport szerkeszthető diaalakzatokat tartalmaz, nem egyetlen SVG képet.
Hogyan tarthatom kisebb méretűnek a sok képet tartalmazó prezentációkat?
Használja újra a megosztott képernyök forrásait, kerülje a szükségtelenül nagy raszteres forrásokat, tömörítse a megfelelő raszteres képeket amikor szükséges, tartsa a ismétlődő márkázást mestereken vagy elrendezéseken, és csak akkor használjon linkelt képeket, ha a külső függőség elfogadható.