Trabajar con las imágenes

Trabajar con las imágenes

Aspose.Cells FOSS for Java allows you to embed images directly into celdas de la hoja de trabajo y recuperar o eliminar las imágenes existentes. Gestionado a través de la PictureCollection Expuesto por cada uno de los Worksheet,y, Cada uno Picture El objeto proporciona acceso a los datos de la imagen, su anchor posición, su tipo de imagen detectada y su contenido MIME.


Visión general

Cada obra muestra sus imágenes a través de Worksheet.getPictures(), que regresa a PictureCollection.Puedes añadir fotos de un byte. Array, una InputStream, o un camino de archivo. la colección proporciona ayuda métodos para detectar el tipo de imagen desde los bajos crudos, resolviendo el archivo extension de datos de imagen, y la extensión de mapas al tipo de contenido MIME.


Acceso a imágenes en una hoja de trabajo

Recuperar el PictureCollection por vía Worksheet.getPictures().Uso de PictureCollection.getCount() Para determinar cuántas imágenes están presentes. Las imágenes individuales son accesibles por índice basado en cero a través de PictureCollection.get(index).


Añadiendo una imagen

Tres supercargas de PictureCollection.add() Disponible, cada uno de los devolver el índice basado en cero de la imagen recientemente añadida:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) de un bait array
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) de un InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) Desde un archivo de ruta
// 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);

Propiedades de la lectura de imágenes

Una vez que te mantenga una Picture La referencia, lea su posición de anchor, datos de imagen cruda, tipo de imágenes detectado y tipo del contenido MIME:

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

Detectar el tipo de imagen desde los bits crudos

Uso PictureCollection.detectImageType(data) Para determinar el ImageType El valor enum de un array de byte sin incorporarlo primero.

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

Remover una imagen

Uso PictureCollection.removeAt(index) para eliminar una imagen por su Indice basado en cero:

ws.getPictures().removeAt(0);

Consejos y mejores prácticas

  • Utilice el add(..., imageData) sobrecarga cuando ya tienes los bajos en la memoria; use el sobrecargo de flujo para evitar cargar grandes archivos completamente.
  • llamadas PictureCollection.detectImageType(data) Para validar la imagen Formato antes de la embalaje.
  • Las líneas y columnas de anchor son índices basados en cero.
  • Picture.getName() devolver un identificador interno, no el nombre original.
  • Las imágenes se conservan en el XLSX round-trip.

Problemas comunes

ProblemasCausasFixado
getCount() Retorno 0 después de añadirEl flujo se cerró antes de que se completara la adiciónAsegúrese de que el InputStream sea abierto y leible.
ImageType.UNKNOWN devolverDatos de imagen no apoyados o corruptosVerificar el archivo es un PNG, JPEG, GIF, BMP o TIFF válido.
La imagen parece equivocadaLos índices de rodilla/columna son incorrectosUtilice índices basados en cero para todos los parámetros de anchor

FAQ

¿Qué formatos de imagen se apoyan para la incorporación?

El ImageType Enum cubre PNG, JPEG, GIF, BMP, TIFF y EMF. Otros Los formatos pueden ser incorporados como datos binarios, pero tienen un ImageType de UNKNOWN.

¿Cómo puedo obtener la extensión de archivo de una imagen envuelta?

llamadas PictureCollection.extensionFromData(picture.getData()) Con el Imagen de los bajetas.

¿Puedo reemplazar un dato de imagen existente?

Sí, retire el Picture por vía get(index) y llamar setData(bytes).

¿Cómo puedo encontrar una imagen por nombre?

Toma en todas las fotos con getCount() y get(index) y comparar Picture.getName().

¿Se conservan las imágenes cuando se salve a otros formatos?

La conservación de la imagen depende del formato objetivo. el xlsx round-trip está totalmente soportado.


Sumación de referencia API

imagen

MetodologíaTipo de regresoDescripción
getName()StringNombre interior de la imagen.
setName(name)void- El nombre interno.
getUpperLeftRow()intLa línea de base cero del ancho superior izquierdo.
setUpperLeftRow(row)voidEncuentra la línea de anchor superior izquierda.
getUpperLeftColumn()intColumna de base cero del ancho superior izquierdo.
setUpperLeftColumn(col)voidColumna de ancho superior izquierda.
getLowerRightRow()intLa línea de base cero del ancho inferior derecho.
setLowerRightRow(row)voidEncuentra la línea de anchor derecha.
getLowerRightColumn()intColumna de base cero del ancho inferior derecho.
setLowerRightColumn(col)voidColoca la columna de anchor a la derecha inferior.
getImageType()ImageTypeEl formato de imagen enum es un valor.
getData()byte[]Bytes de imagen cruda.
setData(data)voidSubstituye los bajos de imagen cruda.
getContentType()StringTipo de contenido MIME.

PictureCollection

MetodologíaTipo de regresoDescripción
getCount()intNúmero de imágenes en la hoja de trabajo.
get(index)PictureDevolve la imagen al índice de base cero.
add(...)intIncluye una imagen; devolve su índice basado en cero.
removeAt(index)voidElimina la imagen en el índice basado en cero.
detectImageType(data)ImageTypeDetecta el formato de imagen a partir de bajos crudos.
extensionFromData(data)StringRetorna la extensión de archivo para los datos de imagen.
contentTypeFromExtension(ext)StringRetorna el tipo MIME para una extensión de archivo.

Ver también

 Español