Работа с изображениями

Работа с изображениями

Aspose.Cells FOSS for Java allows you to embed images directly into Клетки рабочего листа и извлечь или удалить существующие фотографии. управляемой через PictureCollection выявленные каждым из них. Worksheet, и каждый Picture объект предоставляет доступ к данным изображения, его якорь положение, тип обнаруженного изображения и тип содержания MIME.


Обзор

Каждый лист показывает свои изображения через Worksheet.getPictures(), который возвращает a PictureCollection.Можно добавить изображения с байта . массив, и InputStream, или путь файла. Коллекция предоставляет помощника для методы обнаружения типа изображения на основе необработанных байтов, разрешение файла; расширение из данных образа и расширение для картографирования в тип содержимого MIME.


Доступ к изображениям на рабочем листе

Возвращение . PictureCollection через: Worksheet.getPictures().Используйте . PictureCollection.getCount() чтобы определить, сколько фотографий присутствует. Индивидуальные изображения доступны по нулевому индексу через PictureCollection.get(index).


Добавление изображения

Три перегрузки. PictureCollection.add() доступны, каждый из которых возвращение индекса на основе нуля для недавно добавленной картинки:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) из байтового массива
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) из InputStream (входный поток)
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) из пути файла
// 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);

Читать свойства изображения

Как только вы держите … Picture ссылка, прочтите положение якоря;, Схема, используемая для определения типа изображения:

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

Определение типа изображения от неработающих байтов

Использование: PictureCollection.detectImageType(data) для определения: ImageType enum значение байтового массива без встраивания его сначала.

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

Удаление изображения

Использование: PictureCollection.removeAt(index) удалить изображение по его индекс на нулевой основе:

ws.getPictures().removeAt(0);

Советы и лучшие практики

  • Используйте add(..., imageData) перегрузка, когда у вас уже есть байты. в памяти; используйте потоковую перегрузку, чтобы избежать загружения больших файлов полностью.
  • Call PictureCollection.detectImageType(data) для проверки изображения. форматировать перед встраиванием.
  • Анкерные строки и столбцы являются индексами на основе нуля.
  • Picture.getName() возвращает внутренний идентификатор, а не оригинальное имя файла.
  • Фотографии сохранены на XLSX.

Общие проблемы

IssueCauseУстранить
getCount() возвращает 0 после сложения.Поток был закрыт до завершения добавления.Убедитесь, что InputStream открыт и читаем.
ImageType.UNKNOWN возвращенныйНеподдерживаемые или поврежденные данные изображенияПроверьте, что файл является действительным PNG, JPEG, GIF, BMP или TIFF.
Положение картинки выглядит неправильно .Индексы строк/столбцов неверны.Использовать индексы на основе нуля для всех параметров якорного знака.

FAQ

Какие формы изображений поддерживаются для встраивания?

В связи с этим ImageType enum охватывает PNG, JPEG, GIF, BMP, TIFF и EMF. Другие формат может встраивать как бинарные данные, но имеет ImageType из: UNKNOWN.

Как я могу получить расширение файла встроенной фотографии?

Call PictureCollection.extensionFromData(picture.getData()) с приложениями к изображение - это неработающие байты.

Могу ли я заменить существующие данные изображения?

Да, возьми. Picture через: get(index) и позвони . setData(bytes).

Как я могу найти фотографию по имени?

Итерация над всеми картинками с getCount() и в том числе: get(index) и сравнивать . Picture.getName().

Сохраняются ли фотографии при сохранении в других форматах?

Сохранение изображения зависит от целевого формата. XLSX-поездка полностью поддерживается.


Справочное резюме API

Picture

MethodТип возвратаDescription
getName()StringВнутреннее название картинки.
setName(name)voidУстанавливает внутреннее имя.
getUpperLeftRow()intНижний ряд верхнего левого якоря.
setUpperLeftRow(row)voidУстанавливает верхний левый якорный ряд.
getUpperLeftColumn()intКолонна с нулевой основанием верхнего левого якоря.
setUpperLeftColumn(col)voidУстанавливает верхнюю левую колонну якоря.
getLowerRightRow()intНижняя правая якорь на нулевой строке.
setLowerRightRow(row)voidУстанавливает нижний правый якорный ряд.
getLowerRightColumn()intКолонна с нулевой основанием в правом нижнем углу якоря.
setLowerRightColumn(col)voidУстанавливает нижнюю правую колонну якоря.
getImageType()ImageTypeЗначение enum формата изображения обнаружено.
getData()byte[]Необработанные байты изображения.
setData(data)voidЗаменяет на необработанные байты изображения.
getContentType()StringMIME - это строка типа содержания.

PictureCollection

MethodТип возвратаDescription
getCount()intКоличество изображений на рабочем листе.
get(index)PictureВозвращает изображение на нулевой основе индекса.
add(...)intВстраивает изображение; возвращает его индекс на основе нуля.
removeAt(index)voidУдаляет изображение в индексе на нулевой основе.
detectImageType(data)ImageTypeОпределяет формат изображения от неработающих байтов.
extensionFromData(data)StringВозвращает расширение файла для данных изображения.
contentTypeFromExtension(ext)StringВозвращает тип MIME для расширения файла.

См. также:

 Русский