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 arrayadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)Från en InputStreamadd(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
| Issue | Cause | Fixar |
|---|---|---|
getCount() returnerar 0 efter att ha lagt till | Stream stängdes innan tillägget är klar | Se till att InputStream är öppet och läsbart |
ImageType.UNKNOWN återvände | Osupportade eller korrupta bilddata | Kontrollera att filen är en giltig PNG, JPEG, GIF, BMP eller TIFF. |
| Bildpositionen ser fel ut | Rå/kolumnindex är felaktigt | Anvä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
| Method | Tillbaka typ | Beskrivning |
|---|---|---|
getName() | String | Internt namn på bilden. |
setName(name) | void | Ange det interna namnet. |
getUpperLeftRow() | int | Nollbaserad rad av den övre vänstra anchor. |
setUpperLeftRow(row) | void | Ställ in den övre vänstra anchor raden. |
getUpperLeftColumn() | int | Nollbaserad kolumn av den övre vänstra anchor. |
setUpperLeftColumn(col) | void | Ställ in den övre vänstra anchor kolumnen. |
getLowerRightRow() | int | Nollbaserad rad av den nedre högerankaren. |
setLowerRightRow(row) | void | Ställ in den nedre höger anchor raden. |
getLowerRightColumn() | int | Nollbaserad kolumn av den nedre högerankaren. |
setLowerRightColumn(col) | void | Ställ in den nedre höger ankörstkolumn. |
getImageType() | ImageType | Detekterad bildformat enum värde. |
getData() | byte[] | Röd bild bytes. |
setData(data) | void | Ersätter den råbild byten. |
getContentType() | String | MIME innehållstyp sträng. |
PictureCollection
| Method | Tillbaka typ | Beskrivning |
|---|---|---|
getCount() | int | Antal bilder på arbetsbladen. |
get(index) | Picture | Återställ bilden till nollbaserad index. |
add(...) | int | Inbjuder en bild; returnerar sin nollbaserade index. |
removeAt(index) | void | Ta bort bilden på nollbaserad index. |
detectImageType(data) | ImageType | Detekterar bildformat från rå byter. |
extensionFromData(data) | String | Returnerar filändelsen för bilddata. |
contentTypeFromExtension(ext) | String | Returnerar MIME-typen för en filutvidgning. |