Работа с изображениями
Работа с изображениями
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.
Общие проблемы
| Issue | Cause | Устранить |
|---|---|---|
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() | String | MIME - это строка типа содержания. |
PictureCollection
| Method | Тип возврата | Description |
|---|---|---|
getCount() | int | Количество изображений на рабочем листе. |
get(index) | Picture | Возвращает изображение на нулевой основе индекса. |
add(...) | int | Встраивает изображение; возвращает его индекс на основе нуля. |
removeAt(index) | void | Удаляет изображение в индексе на нулевой основе. |
detectImageType(data) | ImageType | Определяет формат изображения от неработающих байтов. |
extensionFromData(data) | String | Возвращает расширение файла для данных изображения. |
contentTypeFromExtension(ext) | String | Возвращает тип MIME для расширения файла. |