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 InputStreamadd(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ém | Příčina | Oprava |
|---|---|---|
getCount() vrací 0 po přidání | Stream byl uzavřen před dokončením operace add | Ujistěte se, že InputStream je otevřený a čitelný |
ImageType.UNKNOWN vrátil | Nepodporovaná nebo poškozená data obrázku | Ověř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
| Metoda | Typ vrácení | Popis: |
|---|---|---|
getName() | String | Interní název obrázku. |
setName(name) | void | Nastaví interní název. |
getUpperLeftRow() | int | Řádek (počítáno od nuly) levého horního ukotvení. |
setUpperLeftRow(row) | void | Nastaví řádek levého horního kotvy. |
getUpperLeftColumn() | int | Sloupec, počítaný od nuly, levého horního ukotvení. |
setUpperLeftColumn(col) | void | Nastaví levý horní ukotvovací sloupec. |
getLowerRightRow() | int | Řádek pravého dolního kotvícího bodu číslovaný od nuly. |
setLowerRightRow(row) | void | Nastaví řádek kotvy vpravo dole. |
getLowerRightColumn() | int | Sloupec pravého dolního kotvícího bodu číslovaný od nuly. |
setLowerRightColumn(col) | void | Nastaví pravý dolní kotvící sloupec. |
getImageType() | ImageType | Detekovaná hodnota výčtu formátu obrázku. |
getData() | byte[] | Syrové bajty obrázku. |
setData(data) | void | Nahrazuje syrové bajty obrázku. |
getContentType() | String | Řetězec typu MIME. |
PictureCollection
| Metoda | Typ vrácení | Popis: |
|---|---|---|
getCount() | int | Počet obrázků na pracovním listu. |
get(index) | Picture | Vrací obrázek na indexu počítaném od nuly. |
add(...) | int | Vloží obrázek; vrátí jeho index začínající nulou. |
removeAt(index) | void | Odstraní obrázek na indexu začínajícím od nuly. |
detectImageType(data) | ImageType | Detekuje formát obrázku z raw bajtů. |
extensionFromData(data) | String | Vrátí příponu souboru pro data obrázku. |
contentTypeFromExtension(ext) | String | Vrací typ MIME pro příponu souboru. |