Werken met Afbeeldingen
Werken met Afbeeldingen
Aspose.Cells FOSS voor Java stelt je in staat om afbeeldingen rechtstreeks in werkbladcellen in te sluiten en bestaande afbeeldingen op te halen of te verwijderen. Afbeeldingen worden beheerd via de PictureCollection die door elk Worksheet wordt blootgesteld, en elk Picture object biedt toegang tot de afbeeldingsgegevens, de ankerpositie, het gedetecteerde afbeeldingsformaat en het MIME-inhoudstype.
Overzicht
Elk werkblad maakt zijn afbeeldingen beschikbaar via Worksheet.getPictures(), die een PictureCollection retourneert. Je kunt afbeeldingen toevoegen vanuit een byte-array, een InputStream, of een bestandspad. De collectie biedt hulpfuncties voor het detecteren van het afbeeldingsformaat vanuit ruwe bytes, het bepalen van de bestandsextensie op basis van afbeeldingsgegevens, en het koppelen van extensie aan MIME-inhoudstype.
Toegang tot Afbeeldingen op een Werkblad
Haal de PictureCollection op via Worksheet.getPictures(). Gebruik PictureCollection.getCount() om te bepalen hoeveel afbeeldingen aanwezig zijn. Individuele afbeeldingen zijn toegankelijk via een nul-gebaseerde index met PictureCollection.get(index).
Een Afbeelding Toevoegen
Drie overloads van PictureCollection.add() zijn beschikbaar, elk retourneert de nul-gebaseerde index van de zojuist toegevoegde afbeelding:
add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData)van een byte-arrayadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)van een InputStreamadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName)van een bestandspad
// 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);Afbeeldingseigenschappen lezen
Zodra je een Picture referentie hebt, lees je de ankerpositie, ruwe afbeeldingsgegevens, gedetecteerd afbeeldingstype en MIME-contenttype:
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());
}Afbeeldingstype detecteren uit ruwe bytes
Gebruik PictureCollection.detectImageType(data) om de ImageType enum-waarde van een byte-array te bepalen zonder deze eerst in te sluiten.
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);Een afbeelding verwijderen
Gebruik PictureCollection.removeAt(index) om een afbeelding te verwijderen op basis van zijn nulgebaseerde index:
ws.getPictures().removeAt(0);Tips en best practices
- Gebruik de
add(..., imageData)-overload wanneer je de bytes al in het geheugen hebt; gebruik de stream-overload om te voorkomen dat grote bestanden volledig worden geladen. - Roep
PictureCollection.detectImageType(data)aan om het afbeeldingsformaat te valideren voordat je het insluit. - Anker-rijen en -kolommen zijn nulgebaseerde indexen.
Picture.getName()retourneert een interne identifier, niet de originele bestandsnaam.- Afbeeldingen worden behouden bij een XLSX round-trip.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
getCount() geeft 0 terug na toevoegen | Stream werd gesloten voordat toevoegen voltooid was | Zorg ervoor dat de InputStream open en leesbaar is |
ImageType.UNKNOWN geretourneerd | Niet-ondersteunde of corrupte afbeeldingsgegevens | Controleer of het bestand een geldige PNG, JPEG, GIF, BMP of TIFF is |
| Afbeeldingspositie lijkt onjuist | Rij/kolomindexen zijn onjuist | Gebruik nulgebaseerde indexen voor alle ankerparameters |
FAQ
Welke afbeeldingsformaten worden ondersteund voor insluiten?
De ImageType enum omvat PNG, JPEG, GIF, BMP, TIFF en EMF. Andere formaten kunnen worden ingesloten als binaire data, maar hebben een ImageType van UNKNOWN.
Hoe krijg ik de bestandsextensie van een ingesloten afbeelding?
Roep PictureCollection.extensionFromData(picture.getData()) aan met de ruwe bytes van de afbeelding.
Kan ik bestaande afbeeldingsgegevens vervangen?
Ja. Haal de Picture op via get(index) en roep setData(bytes) aan.
Hoe vind ik een afbeelding op naam?
Itereer over alle afbeeldingen met getCount() en get(index) en vergelijk Picture.getName().
Worden afbeeldingen behouden bij het opslaan naar andere formaten?
Het behoud van afbeeldingen hangt af van het doelformaat. XLSX round-trip wordt volledig ondersteund.
API Reference Samenvatting
Picture
| Methode | Retourtype | Beschrijving |
|---|---|---|
getName() | String | Interne naam van de afbeelding. |
setName(name) | void | Stelt de interne naam in. |
getUpperLeftRow() | int | Rij genummerd vanaf nul van het linkerbovenste anker. |
setUpperLeftRow(row) | void | Stelt de bovenste linkse ankerrij in. |
getUpperLeftColumn() | int | Nulgebaseerde kolom van het anker linksboven. |
setUpperLeftColumn(col) | void | Stelt de bovenste linkse ankerkolom in. |
getLowerRightRow() | int | Nulgebaseerde rij van het anker rechtsonder. |
setLowerRightRow(row) | void | Stelt de rechtsonderste ankerrij in. |
getLowerRightColumn() | int | Nulgebaseerde kolom van het rechteronderste anker. |
setLowerRightColumn(col) | void | Stelt de rechtsonder-ankerkolom in. |
getImageType() | ImageType | Gedetecteerde afbeeldingsformaat enumwaarde. |
getData() | byte[] | Ruwe afbeeldingsbytes. |
setData(data) | void | Vervangt de ruwe afbeeldingsbytes. |
getContentType() | String | MIME-contenttype-tekenreeks. |
PictureCollection
| Methode | Retourtype | Beschrijving |
|---|---|---|
getCount() | int | Aantal afbeeldingen op het werkblad. |
get(index) | Picture | Retourneert de afbeelding op de nulgebaseerde index. |
add(...) | int | Voegt een afbeelding in; retourneert de nulgebaseerde index ervan. |
removeAt(index) | void | Verwijdert de afbeelding op de nulgebaseerde index. |
detectImageType(data) | ImageType | Detecteert het afbeeldingsformaat uit ruwe bytes. |
extensionFromData(data) | String | Retourneert de bestandsextensie voor de afbeeldingsgegevens. |
contentTypeFromExtension(ext) | String | Retourneert het MIME-type voor een bestandsextensie. |