Práce s obrázky

Práce s obrázky

Aspose.Cells FOSS pro Java vám umožňuje vkládat obrázky přímo do buněk listu a načítat nebo odstraňovat existující obrázky. Obrázky jsou spravovány prostřednictvím PictureCollection, který je vystaven každým Worksheet, a každý objekt Picture poskytuje přístup k datům obrázku, jeho kotevní pozici, detekovanému typu obrázku a typu MIME.


Přehled

Každý list zpřístupňuje své obrázky prostřednictvím Worksheet.getPictures(), který vrací PictureCollection. Obrázky můžete přidat z pole bajtů, InputStream nebo cestou k souboru. Kolekce poskytuje pomocné metody pro detekci typu obrázku z raw bajtů, určení přípony souboru z dat obrázku a mapování přípony na MIME typ obsahu.


Přístup k obrázkům na listu

Získejte PictureCollection pomocí Worksheet.getPictures(). Použijte PictureCollection.getCount() k určení počtu existujících obrázků. Jednotlivé obrázky jsou přístupné pomocí nulového indexu prostřednictvím PictureCollection.get(index).


Přidání obrázku

Jsou k dispozici tři přetížení PictureCollection.add(), každé vrací nulový index nově přidaného obrázku:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) z pole bajtů
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) z InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) z cesty k souboru
// Embed an image from bytes into cells A1:C5
byte[] imgData = Files.readAllBytes(Paths.get("logo.png"));
int idx = ws.getPictures().add(0, 0, 4, 2, imgData);

Čtení vlastností obrázku

Jakmile máte referenci na Picture, přečtěte její kotevní pozici, surová data obrázku, detekovaný typ obrázku a MIME typ obsahu:

PictureCollection pics = ws.getPictures();
for (int i = 0; i < pics.getCount(); i++) {
    Picture p = pics.get(i);
    System.out.printf("Name=%s type=%s anchor=[%d,%d]-[%d,%d]%n",
        p.getName(), p.getImageType(),
        p.getUpperLeftRow(), p.getUpperLeftColumn(),
        p.getLowerRightRow(), p.getLowerRightColumn());
}

Detekce typu obrázku ze surových bajtů

Použijte PictureCollection.detectImageType(data) k určení hodnoty výčtu ImageType pole bajtů, aniž byste jej nejprve vložili.

PictureCollection pics = ws.getPictures();
byte[] data = Files.readAllBytes(Paths.get("chart.png"));
ImageType type = pics.detectImageType(data);
String ext  = pics.extensionFromData(data);
String mime = pics.contentTypeFromExtension(ext);
System.out.printf("type=%s ext=%s mime=%s%n", type, ext, mime);

Odstranění obrázku

Použijte PictureCollection.removeAt(index) k odstranění obrázku podle nulového indexu:

ws.getPictures().removeAt(0);

Tipy a osvědčené postupy

  • Použijte přetížení add(..., imageData), pokud již máte bajty v paměti; použijte přetížení streamu, abyste se vyhnuli úplnému načítání velkých souborů.
  • Zavolejte PictureCollection.detectImageType(data) pro ověření formátu obrázku před vložením.
  • Ukotvené řádky a sloupce jsou indexy počítané od nuly.
  • Picture.getName() vrací interní identifikátor, nikoli původní název souboru.
  • Obrázky jsou při průchodu XLSX zachovány.

Časté problémy

ProblémPříčinaOprava
getCount() vrací 0 po přidáníStream byl uzavřen před dokončením operace addUjistěte se, že InputStream je otevřený a čitelný
ImageType.UNKNOWN vrátilNepodporovaná nebo poškozená data obrázkuOvěřte, že soubor je platný PNG, JPEG, GIF, BMP nebo TIFF
Pozice obrázku vypadá špatněIndexy řádku/sloupce jsou nesprávnéPoužívejte nulové indexy pro všechny parametry kotvy

FAQ

Které formáty obrázků jsou podporovány pro vložení?

Výčet ImageType zahrnuje PNG, JPEG, GIF, BMP, TIFF a EMF. Ostatní formáty mohou být vloženy jako binární data, ale mají ImageType UNKNOWN.

Jak získám příponu souboru vloženého obrázku?

Zavolejte PictureCollection.extensionFromData(picture.getData()) s nezpracovanými bajty obrázku.

Mohu nahradit existující data obrázku?

Ano. Získejte Picture pomocí get(index) a zavolejte setData(bytes).

Jak najdu obrázek podle názvu?

Iterujte přes všechny obrázky s getCount() a get(index) a porovnejte Picture.getName().

Zůstávají obrázky zachovány při ukládání do jiných formátů?

Zachování obrázků závisí na cílovém formátu. XLSX round-trip je plně podporován.


API Reference Shrnutí

Picture

MetodaTyp vráceníPopis:
getName()StringInterní název obrázku.
setName(name)voidNastaví interní název.
getUpperLeftRow()intŘádek (počítáno od nuly) levého horního ukotvení.
setUpperLeftRow(row)voidNastaví řádek levého horního kotvy.
getUpperLeftColumn()intSloupec, počítaný od nuly, levého horního ukotvení.
setUpperLeftColumn(col)voidNastaví levý horní ukotvovací sloupec.
getLowerRightRow()intŘádek pravého dolního kotvícího bodu číslovaný od nuly.
setLowerRightRow(row)voidNastaví řádek kotvy vpravo dole.
getLowerRightColumn()intSloupec pravého dolního kotvícího bodu číslovaný od nuly.
setLowerRightColumn(col)voidNastaví pravý dolní kotvící sloupec.
getImageType()ImageTypeDetekovaná hodnota výčtu formátu obrázku.
getData()byte[]Syrové bajty obrázku.
setData(data)voidNahrazuje syrové bajty obrázku.
getContentType()StringŘetězec typu MIME.

PictureCollection

MetodaTyp vráceníPopis:
getCount()intPočet obrázků na pracovním listu.
get(index)PictureVrací obrázek na indexu počítaném od nuly.
add(...)intVloží obrázek; vrátí jeho index začínající nulou.
removeAt(index)voidOdstraní obrázek na indexu začínajícím od nuly.
detectImageType(data)ImageTypeDetekuje formát obrázku z raw bajtů.
extensionFromData(data)StringVrátí příponu souboru pro data obrázku.
contentTypeFromExtension(ext)StringVrací typ MIME pro příponu souboru.

Viz také:

 Čeština