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 arrayadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)de un InputStreamadd(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
| Problemas | Causas | Fixado |
|---|---|---|
getCount() Retorno 0 después de añadir | El flujo se cerró antes de que se completara la adición | Asegúrese de que el InputStream sea abierto y leible. |
ImageType.UNKNOWN devolver | Datos de imagen no apoyados o corruptos | Verificar el archivo es un PNG, JPEG, GIF, BMP o TIFF válido. |
| La imagen parece equivocada | Los índices de rodilla/columna son incorrectos | Utilice í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ía | Tipo de regreso | Descripción |
|---|---|---|
getName() | String | Nombre interior de la imagen. |
setName(name) | void | - El nombre interno. |
getUpperLeftRow() | int | La línea de base cero del ancho superior izquierdo. |
setUpperLeftRow(row) | void | Encuentra la línea de anchor superior izquierda. |
getUpperLeftColumn() | int | Columna de base cero del ancho superior izquierdo. |
setUpperLeftColumn(col) | void | Columna de ancho superior izquierda. |
getLowerRightRow() | int | La línea de base cero del ancho inferior derecho. |
setLowerRightRow(row) | void | Encuentra la línea de anchor derecha. |
getLowerRightColumn() | int | Columna de base cero del ancho inferior derecho. |
setLowerRightColumn(col) | void | Coloca la columna de anchor a la derecha inferior. |
getImageType() | ImageType | El formato de imagen enum es un valor. |
getData() | byte[] | Bytes de imagen cruda. |
setData(data) | void | Substituye los bajos de imagen cruda. |
getContentType() | String | Tipo de contenido MIME. |
PictureCollection
| Metodología | Tipo de regreso | Descripción |
|---|---|---|
getCount() | int | Número de imágenes en la hoja de trabajo. |
get(index) | Picture | Devolve la imagen al índice de base cero. |
add(...) | int | Incluye una imagen; devolve su índice basado en cero. |
removeAt(index) | void | Elimina la imagen en el índice basado en cero. |
detectImageType(data) | ImageType | Detecta el formato de imagen a partir de bajos crudos. |
extensionFromData(data) | String | Retorna la extensión de archivo para los datos de imagen. |
contentTypeFromExtension(ext) | String | Retorna el tipo MIME para una extensión de archivo. |