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-array
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) van een InputStream
  • add(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

ProbleemOorzaakOplossing
getCount() geeft 0 terug na toevoegenStream werd gesloten voordat toevoegen voltooid wasZorg ervoor dat de InputStream open en leesbaar is
ImageType.UNKNOWN geretourneerdNiet-ondersteunde of corrupte afbeeldingsgegevensControleer of het bestand een geldige PNG, JPEG, GIF, BMP of TIFF is
Afbeeldingspositie lijkt onjuistRij/kolomindexen zijn onjuistGebruik 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

MethodeRetourtypeBeschrijving
getName()StringInterne naam van de afbeelding.
setName(name)voidStelt de interne naam in.
getUpperLeftRow()intRij genummerd vanaf nul van het linkerbovenste anker.
setUpperLeftRow(row)voidStelt de bovenste linkse ankerrij in.
getUpperLeftColumn()intNulgebaseerde kolom van het anker linksboven.
setUpperLeftColumn(col)voidStelt de bovenste linkse ankerkolom in.
getLowerRightRow()intNulgebaseerde rij van het anker rechtsonder.
setLowerRightRow(row)voidStelt de rechtsonderste ankerrij in.
getLowerRightColumn()intNulgebaseerde kolom van het rechteronderste anker.
setLowerRightColumn(col)voidStelt de rechtsonder-ankerkolom in.
getImageType()ImageTypeGedetecteerde afbeeldingsformaat enumwaarde.
getData()byte[]Ruwe afbeeldingsbytes.
setData(data)voidVervangt de ruwe afbeeldingsbytes.
getContentType()StringMIME-contenttype-tekenreeks.

PictureCollection

MethodeRetourtypeBeschrijving
getCount()intAantal afbeeldingen op het werkblad.
get(index)PictureRetourneert de afbeelding op de nulgebaseerde index.
add(...)intVoegt een afbeelding in; retourneert de nulgebaseerde index ervan.
removeAt(index)voidVerwijdert de afbeelding op de nulgebaseerde index.
detectImageType(data)ImageTypeDetecteert het afbeeldingsformaat uit ruwe bytes.
extensionFromData(data)StringRetourneert de bestandsextensie voor de afbeeldingsgegevens.
contentTypeFromExtension(ext)StringRetourneert het MIME-type voor een bestandsextensie.

Zie ook

 Nederlands