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 を公開します。ImageInfo に対して Decode() を呼び出すと生のサンプルバイトを取得でき、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() で各画像の全ピクセルデータを事前にデコードする必要は、寸法やカラースペースだけが必要な場合は不要です。
  • 信頼できるファイル拡張子が判別できないストリームやバッファからソースバイトが来る場合は、AddImageOptions に明示的な format を渡してください。
  • 多数の画像が含まれる文書を縮小するには、各画像を手動でデコードして再追加する代わりに Document.Optimize({ images: { dpi, quality } }) を使用してください。
  • Page.AddImage() の矩形は配置サイズを直接設定します — ターゲット矩形を元画像のアスペクト比に合わせてスケールすれば、伸びるのを防げます。

一般的な問題

問題原因修正策
画像が伸びすぎたり潰れたりしているAddImage() に渡されたターゲット rect が、ソース画像のアスペクト比と一致しません矩形の幅/高さを、ソース画像自身の寸法から計算します
Page.AddImage() が間違った形式を配置します画像バイトの形式を確実に判別できませんでしたAddImageOptions で明示的な format を渡してください
画像を追加した後、文書が予想以上に大きくなっています画像はフル解像度と高品質で埋め込まれましたダウンサンプルと再エンコードを行うには、Document.Optimize({ images: { dpi, quality } }) を呼び出してください

FAQ

ページに画像を配置するにはどうすればよいですか?

Call page.AddImage(imageBytes, rect)、rect はページ空間のポイントで表された [x0, y0, x1, y1] 四角形です。

ページ上に既にある画像をデコードせずに一覧表示するにはどうすればよいですか?

Read page.Images — ImageInfo[] で、各画像に対してピクセルデータをデコードせずに Width、Height、ColorSpace、Filter を公開します。

画像を圧縮して文書のファイルサイズを削減できますか?

はい — Document.Optimize({ images: { dpi, quality } }) を呼び出します。この関数は、文書全体の最適化パスの一部として埋め込み画像をダウンサンプリングし、再エンコードします。

画像を埋め込むことと、ページを画像としてレンダリングすることはどう違いますか?

Page.AddImage() ラスタ画像バイトを既存のページに配置します。 Page.ToImage() (参照 Conversion)は逆の操作を行い、ページ全体を PNG バイトにレンダリングします。


API Reference の概要

クラス/メソッド説明
Page.AddImage()ページ上の矩形に画像バイトを配置する
AddImageOptionsAddImage() のオプション: opacity, format, tag, layer
Page.Imagesページ上にすでにあるすべての画像を、メタデータのみの ImageInfo[] として
ImageInfo.Decode() / Replace() / Remove()ピクセルデータを読み取り、新しいバイトに置き換えるか、画像を削除します
Document.Optimize()文書全体のファイルサイズを削減し、必要に応じて images: { dpi, quality } を使用して画像をダウンサンプリングします

参照

 日本語