Arbeta med bilder

Arbeta med bilder

Aspose.Cells FOSS for Java allows you to embed images directly into Arbetsfiler celler och återhämta eller ta bort befintliga bilder. Hanteras genom den PictureCollection Uttryckt av varje Worksheet,och Varje Picture objekt ger tillgång till bilddata, dess anchor position, dess upptäckta bildstyp och dess MIME-innehållstype.


Översikt

Varje arbetsblad visar sina bilder genom Worksheet.getPictures(), som återvänder till A PictureCollection.Du kan lägga till bilder från en byte Array, en InputStream, eller en filvägen. samlingen ger hjälpare metoder för att upptäcka bildstyp från rå byter, lösa filen förlängning från bilddata och kartläggning till MIME-innehållstyp.


Tillgång till bilder på ett arbetsblad

återställer den PictureCollection via Worksheet.getPictures().Användning PictureCollection.getCount() Det är viktigt att bestämma hur många bilder som finns. Individuella bilder är tillgängliga genom nollbaserad index via PictureCollection.get(index).


Lägg till en bild

Tre överbelastningar av PictureCollection.add() tillgängliga, var och en av dem returnerar nollbaserad index av den nyligen tillagda bilden:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) från en byte array
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) Från en InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) Från en filvägen
// 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);

Läs bild egenskaper

När du håller en Picture referens, läs dess anchor position, råbilddata, detekterade bildstyp och MIME-innehållstypen:

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());
}

Upptäck typ av bild från Raw Bytes

Användning PictureCollection.detectImageType(data) För att bestämma den ImageType Enumvärdet av en byte array utan att först infoga den.

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);

Ta bort en bild

Användning PictureCollection.removeAt(index) att ta bort en bild genom sin Nollbaserad index:

ws.getPictures().removeAt(0);

Tips och bästa praxis

  • Använd den add(..., imageData) överbelastning när du redan har byterna i minnet; använd ström överbelastning för att undvika att ladda stora filer helt.
  • Call PictureCollection.detectImageType(data) för att validera bilden Format innan införandet.
  • Anchor rader och kolumner är nollbaserade index.
  • Picture.getName() returnerar en intern identifierare, inte det ursprungliga filnamnet.
  • Bilderna är lagrade på XLSX rundtur.

Vanliga frågor

IssueCauseFixar
getCount() returnerar 0 efter att ha lagt tillStream stängdes innan tillägget är klarSe till att InputStream är öppet och läsbart
ImageType.UNKNOWN återvändeOsupportade eller korrupta bilddataKontrollera att filen är en giltig PNG, JPEG, GIF, BMP eller TIFF.
Bildpositionen ser fel utRå/kolumnindex är felaktigtAnvänd nollbaserade index för alla anchorparametrar

FAQ

Vilka bildformat stöds för inbyggd?

Den ImageType enum täcker PNG, JPEG, GIF, BMP, TIFF och EMF. Andra format kan ingå som binära data men har en ImageType av UNKNOWN.

Hur får jag filändelsen av ett inbyggd bild?

Call PictureCollection.extensionFromData(picture.getData()) Med den Bilder av rå bytes.

Kan jag ersätta befintliga bilddata?

Ja, återställ den Picture via get(index) och ringer setData(bytes).

Hur hittar jag en bild efter namn?

Släpp över alla bilder med getCount() och get(index) och jämför Picture.getName().

Är bilderna bevarade när de sparas till andra format?

Bild bevarande beror på mållformat. XLSX rundtur är fullt stöds.


API Referens sammanfattning

Picture

MethodTillbaka typBeskrivning
getName()StringInternt namn på bilden.
setName(name)voidAnge det interna namnet.
getUpperLeftRow()intNollbaserad rad av den övre vänstra anchor.
setUpperLeftRow(row)voidStäll in den övre vänstra anchor raden.
getUpperLeftColumn()intNollbaserad kolumn av den övre vänstra anchor.
setUpperLeftColumn(col)voidStäll in den övre vänstra anchor kolumnen.
getLowerRightRow()intNollbaserad rad av den nedre högerankaren.
setLowerRightRow(row)voidStäll in den nedre höger anchor raden.
getLowerRightColumn()intNollbaserad kolumn av den nedre högerankaren.
setLowerRightColumn(col)voidStäll in den nedre höger ankörstkolumn.
getImageType()ImageTypeDetekterad bildformat enum värde.
getData()byte[]Röd bild bytes.
setData(data)voidErsätter den råbild byten.
getContentType()StringMIME innehållstyp sträng.

PictureCollection

MethodTillbaka typBeskrivning
getCount()intAntal bilder på arbetsbladen.
get(index)PictureÅterställ bilden till nollbaserad index.
add(...)intInbjuder en bild; returnerar sin nollbaserade index.
removeAt(index)voidTa bort bilden på nollbaserad index.
detectImageType(data)ImageTypeDetekterar bildformat från rå byter.
extensionFromData(data)StringReturnerar filändelsen för bilddata.
contentTypeFromExtension(ext)StringReturnerar MIME-typen för en filutvidgning.

Se även

 Svenska