fbpx

PDFファイルに画像はどのように格納されていますか?

マークは1999年からJavaとPDFに携わっており、NetBeansの大ファンです。カンファレンスでの講演が趣味です。今回は、PDFファイルに表示される画像はどのように格納されているのかを説明します。例えばMicrosoft WordでPNGやJPEGの画像を配置して、PDFファイルに書き出したときどのように画像ファイルは処理されているのでしょうか?
開発者ブログイメージ

著者 Mark Stephens (IDRsolutions)  翻訳/編集 インターワーク

私がPDFファイル形式を学んでいたとき、PDFでは画像が非常に複雑なトピックであることが分かりました。そこで今回は、PDFファイルにおける画像の扱いについて、わかりやすく解説していきたいと思います。改善するための提案や、疑問点があればお知らせください。

ラスター画像とベクター画像

画像にはラスター画像とベクター画像の2種類があります。ラスター画像はピクセルの集まりで、解像度に依存し、拡大するとピクセルが見えます。JPEG、PNG、BMPなどが一般的です。ベクター画像は線や形状を数式で表現し、解像度に依存せず、拡大しても画質が劣化しません。SVGやAIなどが一般的で、どのサイズにもスケーリング可能です。PDFファイルにはこの両方のタイプの画像を含むことができます。

PDFにおけるラスター画像の保存形式

PDFファイルは通常、画像を別のオブジェクト(XObject)として格納し、そのオブジェクトには画像の生のバイナリデータが含まれています。これらはすべて、ページまたはファイルのリソースオブジェクトにリストされ、それぞれに名前があります(Im1など)。PDFの中に埋め込まれた画像を、Tif、Gif、Bmp、Jpeg、Pngと考えるのは間違いです。そうではありません。

PDFに格納されている画像は通常、一般的な画像フォーマット(例えばTif、Jpg、Pngなど)として保存されるわけではなく、ピクセルのバイナリデータや色空間情報など、画像に関するさまざまな情報を含むオブジェクトとして保存されます。これにより、同じ画像が異なるPDF作成ツールによって異なる方法で保存されることがあります。

PDFオブジェクトビューアの例

以下は、AcrobatのPDFオブジェクトビューアに表示された例です。
 

※上記の画像は、表紙のメイン画像の部分、Adobe Acrobatのツールから、プリフライト→オプション→PDFの内部構造→Logical Structureで閲覧出来ます。

生の画像データがページに必要なサイズに調整されることもあれば、そうでないこともあります。その場合は、描画時に拡大または縮小されます。PDF作成ツールによって、PDFファイルの作成方法はまったく異なります。

圧縮とフォーマット

実際のピクセルデータは圧縮することができ、圧縮フォーマットの一つ(DCTDecode)はJPEGで使用されているものと同じです(JPXはJPEG2000と同じです)。このデータを保存した場合、JPEGファイルとして開くことができますが、色空間データを含むように変更する必要があるかもしれません。

画像の描画と操作

画像は、PDFコンテンツストリーム内でDOコマンドと画像名(Im1など)によって描画されます。この画像は複数回使用することができ、拡大縮小、回転、切り抜きなど、DOコマンド実行時に設定された値を取ることができます。目には画像に見えるものでも、複数の画像で構成されていたり、画像ですらなかったりすることがあります!

画像の抽出について

つまり、PDFからこれらのラスター画像を取り出したい場合、すべての生データから画像を組み立てる必要があるのです。また、画像の「生」(より高画質で、まったく同じサイズであることもあります)バージョンと、切り抜き/拡大縮小されたバージョンがあり、どちらも抽出することができます(さらに、クリップを生に拡大縮小して、より高画質な画像を作成することもできます - JPedalでは、これを利用してPDF切り抜き画像抽出を提供しています)。

PDFにおけるベクター画像の保存形式

PDFにおけるベクター画像は、数式や描画命令で形状を定義するパス、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどとして保存されます。これにより、解像度に依存せず、どのサイズにもスケーリング可能な高品質なグラフィックが実現されます。

具体的には、以下のような方法で保存されます:

パス、塗りつぶしやストローク

パス(Path): 線や図形はパスとして保存され、描画命令で定義されます。例えば、moveto(開始点の設定)、lineto(直線の描画)、curveto(曲線の描画)などの命令が使用されます。これらの命令は、PostScript言語に基づいており、ベクター画像の基本要素です。

				
					/Path
100 100 moveto
200 200 lineto
150 250 curveto

				
			

塗りつぶしとストローク: パスの内部を塗りつぶすための色やパターン、境界線を描くためのストロークプロパティも保存されます。これには色の指定(RGBやCMYK)、グラデーション、パターンなどが含まれます。

				
					/ColorSpace /DeviceRGB
/Color [1.0 0.0 0.0] % 赤色
/Pattern /ShadingType2 % グラデーション

				
			

テキスト

テキストオブジェクト: テキストは別のオブジェクトとして保存され、フォント、サイズ、位置、スタイルなどの情報が含まれます。PDF内のテキストはベクター形式で描画されるため、拡大しても画質が劣化しません。

				
					BT % テキストオブジェクトの開始
/F1 12 Tf % フォントとサイズの設定
100 100 Td % 位置の設定
(Hello, World!) Tj % テキストの描画
ET % テキストオブジェクトの終了

				
			

これらの要素により、PDFは解像度に依存しない高品質なグラフィックを提供します。線や図とテキストは異なるオブジェクトとして保存され、PDFビューアやエディタではそれぞれを独立して操作できます。例えば、テキストを選択してコピーしたり、パスの色を変更したりすることが可能です。

画像の抽出について

PDFからベクター画像を抽出するには、描画命令や数式に基づいたデータを再構成する必要があります。ベクター画像は、パス、描画命令、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどの形で保存されています。Adobe IllustratorPixelmator Proなどのツールを使用してPDFファイルを開き、抽出したい画像部分(図や表など)を視覚的に選択することで、高品質なベクター画像を抽出・編集・保存することが可能です。

より詳しく知りたい方は、ぜひ「PDFってこうなってる? 実践でPDFの内部構造を学ぼう」の記事をご覧下さい。特に、ベクター画像については「PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう」で解説しています。

JavaアプリでのPDFラスタライズが必要になったとき、JPedalの高機能なPDFビューアが効率のよい開発にきっとお役に立つことと思います。

JavaScript環境でのPDFラスタライズなら、PDF→HTML5/SVG変換でドキュメント表示するBuildVuをご検討ください。

JPedal、BuildVuともに無料で試用していただけます。ビューア機能や表示スピード、UIなどを、まずはご自身で実際にお試しのうえ、ぜひ導入をご検討ください。

    Facebook
    Twitter
    Email
    公式ブログロゴ

    製品に関する記事や開発者のブログ

    Javaのバージョンと機能 − Java 9から23まで

    IDRSolutionsのプログラマーで、社内のJavaテストを担当しているKieran氏は余暇はガジェットとコードいじりを楽しんでいます。
    今回、開発者向けブログ記事で、Javaのバージョンとその機能について詳しく解説しています。IDRSolutionsが現在サポートしているJava 8から、今後サポートを検討しているJava 9から23まで、各バージョンで追加された新機能を紹介します。

    PDFが引き起こす、ウェブサイトにおける5つの深刻な課題

    PDFの悩みを一気に解決!BuildVu(ビルドビュー)が実現する、次世代のドキュメント戦略とは?
    レイアウトを保ったまま、検索性やモバイル対応を実現。社内の膨大な情報資産を、誰もがアクセスしやすいHTMLに自動変換。BuildVuで、ビジネスに眠れる情報の力を呼び覚ましましょう!

    PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 7:色を操るグラフィックスステート

    今回は、画面に色を付けてみましょう。その過程で、グラフィックスステート(グラフィックス状態)について説明します。PDFファイルには、グラフィックスステートというデータ構造が関連付けられています。このデータ構造には、グラフィックスの描画方法を記述する情報が格納されます。現在の色や使用可能な色などの値がグラフィックスステートに保存されます。また、現在のクリップ、変換行列、線に対して行える面白い操作、ユーザー空間(PDFの座標系)からデバイス空間(モニター)へのグラフィックスの描画方法を変更するその他の命令など、様々な要素が含まれます。

    PDFファイルを扱うシステム開発・ウェブ開発に役立つ

    開発者向けPDF入門ガイド

    開発者向けPDF入門ガイド

    PDFの基礎から応用まで開発者のための入門ガイド2024年版

    PDF の仕様や活用方法など、開発者に必要な情報がコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDF のポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。技術的な側面に興味がある開発者だけでなく、ビジネスでPDFを有効活用したい方にもおすすめの一冊です。

    MENU
    PAGE TOP
    ロボット
    PDFソフトウェアの開発に役立つ情報をメールでお届けします