Images
Images
Эта страница охватывает размещение растровых изображений на странице, просмотр уже встроенных в документ изображений и уменьшение их размера. Для рендеринга в изображение, см. page к изображению, см. Conversion.
Встраивание изображения
Page.AddImage() помещает байты изображений JPEG, PNG, BMP или TIFF в пиксельно-точный прямоугольник на странице.
// Source is 1280x1014; scaled to 60% of the page width, aspect preserved.
const srcW = 1280;
const srcH = 1014;
const imgW = pageWidth(page) * 0.6;
const imgH = (imgW * srcH) / srcW;
const x = (pageWidth(page) - imgW) / 2;
const y = (pageHeight(page) - imgH) / 2;
page.AddImage(imageBytes, [x, y, x + imgW, y + imgH]);AddImageOptions принимает opacity, явный format, когда его нельзя определить из байтов, tag (это StructElement, к которому прикрепляется изображение в документе с тегами) и layer для необязательного содержимого.
Просмотр встроенных изображений
Page.Images перечисляет каждое изображение, уже находящееся на странице, как ImageInfo[], без декодирования каких-либо пиксельных данных—каждая запись раскрывает Width, Height, Bits, ColorSpace и Filter. Вызовите Decode() на ImageInfo, чтобы получить его необработанные образцы байтов, Replace() для замены новыми данными изображения на месте, или Remove() для удаления его со страницы.
for (const img of page.Images) {
console.log(img.Width, img.Height, img.ColorSpace, img.Filter);
}Оптимизация изображений
Document.Optimize() уменьшает размер файла во всём документе; передайте параметр images (OptimizeImageOptions, с полями dpi и quality), чтобы также выполнить понижение дискретизации и перекодирование встроенных изображений в рамках того же прохода.
const report = doc.Optimize({ images: { dpi: 150, quality: 80 } });Советы и лучшие практики
Page.Imagesчитает только метаданные — декодирование полного пиксельного набора каждого изображения с помощьюDecode()заранее не требуется, если нужны лишь размеры или цветовое пространство.- Передайте явный
formatвAddImageOptions, когда исходные байты поступают из потока или буфера без надёжного расширения файла для определения. - Используйте
Document.Optimize({ images: { dpi, quality } }), чтобы уменьшить документ с множеством изображений, вместо того чтобы вручную декодировать и добавлять каждое из них. - Прямоугольник
Page.AddImage()задаёт размещаемый размер напрямую — масштабируйте целевой прямоугольник в соответствии с соотношением сторон исходного изображения, чтобы избежать его растягивания.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Изображение выглядит растянутым или сжатым | Целевой rect, переданный в AddImage(), не соответствует соотношению сторон исходного изображения | Вычислите ширину/высоту прямоугольника, исходя из собственных размеров исходного изображения |
Page.AddImage() задаёт неправильный формат | Формат байтов изображения не удалось надёжно определить | Передайте явный format в AddImageOptions |
| Документ стал значительно больше ожидаемого после добавления изображений | Изображения были встроены в полном разрешении и качестве | Вызовите Document.Optimize({ images: { dpi, quality } }) для понижения разрешения и повторного кодирования |
FAQ
Как разместить изображение на странице?
Вызовите page.AddImage(imageBytes, rect), где rect — это [x0, y0, x1, y1] прямоугольник в точках пространства страницы.
Как вывести список изображений, уже находящихся на странице, без их декодирования?
Прочитайте page.Images — ImageInfo[], раскрывающий Width, Height, ColorSpace и Filter для каждого изображения без декодирования данных пикселей.
Могу ли я уменьшить размер файла документа, сжимая его изображения?
Да — вызовите Document.Optimize({ images: { dpi, quality } }), который уменьшает разрешение и повторно кодирует встроенные изображения в рамках глобального прохода оптимизации документа.
Чем встраивание изображения отличается от рендеринга страницы в изображение?
Page.AddImage() размещает байты растрового изображения на существующей странице. Page.ToImage() (см Conversion) делает обратное — рендерит всю страницу в PNG-байты.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
Page.AddImage() | Поместить байты изображения в прямоугольник на странице |
AddImageOptions | Опции для AddImage(): opacity, format, tag, layer |
Page.Images | Каждое изображение, уже находящееся на странице, только как метаданные ImageInfo[] |
ImageInfo.Decode() / Replace() / Remove() | Прочитать данные пикселей, заменить новыми байтами или удалить изображение |
Document.Optimize() | Уменьшить размер файла по всему документу, при необходимости понижая разрешение изображений с помощью images: { dpi, quality } |