PDFをWordPressにアップロードしたら、自動生成されたサムネイルが真っ黒。何度やっても結果は同じ。「カラーモードが原因かも」と思ってRGBで保存し直しても変わらない――。
先日、自作プラグイン「Rapls PDF Image Creator」を使っていて、まさにこの現象に遭遇しました。原因を突き止めるまでにかなり時間を費やしたので、同じ問題で困っている方の参考になればと思い、調査過程から解決策まで詳しく記録しておきます。
問題の発生状況
まず、今回の問題が発生した状況を整理します。
使用していたプラグイン
Rapls PDF Image Creatorは、私が開発したWordPressプラグインです。PDFファイルをメディアライブラリにアップロードすると、自動的に1ページ目のサムネイル画像を生成します。生成された画像はアイキャッチとして使ったり、記事内に挿入したりできます。
内部的にはImageMagick(Imagick PHP拡張)を使用しており、多くの共用レンタルサーバーで動作します。これまで様々なPDFで問題なく動いていました。
問題が起きたPDF
問題が発生したのは、Adobe Illustratorで作成したイベントチラシのPDFでした。A4サイズで、写真やイラスト、テキストが配置された一般的なチラシです。
このPDFをアップロードしたところ、生成されたサムネイルが完全な真っ黒。ファイルサイズはあるので画像自体は生成されているのですが、中身が真っ黒なのです。
一方、別のPDF(Webページをcairoライブラリで出力したもの)は正常にサムネイルが生成されていました。この時点で、サーバー環境やプラグインの問題ではなく、PDF自体に原因があると考えました。
最初に疑った原因:CMYKカラーモード
PDFの画像変換で真っ黒になる原因として、真っ先に思い浮かぶのが「CMYKカラーモード」です。
RGBとCMYKの違い
コンピュータの画面表示と印刷では、色の表現方法が根本的に異なります。
RGB(加法混色)は、赤(Red)・緑(Green)・青(Blue)の光の三原色を混ぜ合わせて色を表現します。モニターやスマートフォンの画面は、この方式で色を表示しています。3色すべてを最大にすると白になります。
CMYK(減法混色)は、シアン(Cyan)・マゼンタ(Magenta)・イエロー(Yellow)・ブラック(Key/Black)の4色のインクを重ねて色を表現します。印刷物はこの方式で色を再現しています。インクを重ねるほど暗くなり、4色すべてを重ねると(理論上は)黒になります。
なぜCMYKだと問題が起きるのか
ImageMagickをはじめとする多くの画像処理ライブラリは、デフォルトでRGBカラースペースを想定しています。CMYKのデータをそのまま処理すると、色の解釈が正しく行われず、色がおかしくなったり、最悪の場合は真っ黒になったりします。
これは、CMYKの各チャンネル値をそのままRGBとして解釈してしまうことが原因です。CMYKでは「インクの量」を表しているのに対し、RGBでは「光の強さ」を表しているため、変換なしでは正しい色になりません。
RGBに変換して再保存…しかし解決せず
「原因はCMYKだろう」と当たりをつけて、IllustratorでドキュメントのカラーモードをRGBに変更しました。
具体的には、「ファイル」→「ドキュメントのカラーモード」→「RGBカラー」を選択して、PDFとして保存し直しました。
これで解決するはずでした。
しかし、結果は同じ。相変わらず真っ黒なサムネイルが生成されます。
「RGBにしたのになぜ?」という疑問を抱えながら、もう少し深く調査することにしました。
PDFの内部構造を調査
表面的な設定変更では解決しなかったため、PDFファイルの内部構造を直接調べることにしました。
pdfinfo コマンドで基本情報を確認
Linuxのpdfinfoコマンドを使うと、PDFファイルのメタデータを確認できます。
正常に変換できたPDFの情報:
Producer: cairo 1.17.6 PDF version: 1.7
真っ黒になるPDFの情報:
Creator: Adobe Illustrator 28.6 (Windows) Producer: Adobe PDF library 17.00 PDF version: 1.3 PDF subtype: PDF/X-1:2001
ここで重要な違いが見つかりました。「PDF subtype: PDF/X-1:2001」という記述です。
PDF/X-1:2001とは何か
PDF/X-1:2001は、印刷業界で使われる国際規格(ISO 15930-1)です。正式名称は「Electronic document file format for prepress digital data exchange」、つまり「印刷前工程のデジタルデータ交換用電子文書形式」です。
この規格は、印刷所に入稿するPDFが「印刷に必要な要件を満たしている」ことを保証するためのものです。具体的には以下のような特徴があります。
- フォントがすべて埋め込まれていること
- カラースペースが明確に定義されていること
- 透明効果が分割統合されていること
- CMYKまたはグレースケール、特色のみ使用可能(RGBは使用不可)
最後の項目が決定的でした。PDF/X-1規格では、RGBカラーは使用できないのです。
カラースペースの実態を確認
PDFファイル内部のカラースペース定義を確認してみました。
[/Indexed/DeviceCMYK 122 34 0 R] [/Indexed/DeviceCMYK 122 35 0 R] [/DeviceN[/Magenta/Yellow]/DeviceCMYK 38 0 R 39 0 R] [/Indexed/DeviceRGB 199 120 0 R] [/Indexed/DeviceRGB 110 122 0 R]
予想通り、CMYKとRGBが混在していました。
Illustrator上でドキュメントを「RGBモード」に変更しても、PDF/X-1形式で保存すると、この規格の要件を満たすために内部的にCMYKが使われたり、複雑なカラー変換が行われたりします。結果として、CMYKとRGBが混在した、ImageMagickが正しく処理できないPDFになっていたのです。
原因の確定:PDF/X-1:2001形式が真犯人
調査の結果、原因が確定しました。
Adobe IllustratorでPDFを保存する際、「PDF/X-1:2001」形式を選択していたことが原因でした。
この形式は印刷入稿用の規格であり、以下の理由でImageMagickによる画像変換に失敗します。
- CMYKカラースペースの強制:PDF/X-1規格ではRGBが使えないため、ドキュメントがRGBモードでも内部的にCMYKに変換される
- 複雑なカラー定義:DeviceN(特色)やIndexed Color(インデックスカラー)など、複雑なカラースペースが混在する
- ICCプロファイルの扱い:印刷用のカラープロファイルが埋め込まれ、単純なRGB変換ができない
ImageMagickはこれらの複雑なカラー構造を正しく解釈できず、結果として真っ黒な画像を出力していたのです。
解決策
原因がわかれば、解決策は明確です。
解決策1:IllustratorのPDF保存設定を変更する(推奨)
最も確実な解決策は、Illustratorの保存設定を変更することです。
手順:
- Illustratorでファイルを開く
- 「ファイル」→「別名で保存」を選択
- ファイル形式で「Adobe PDF (pdf)」を選択して「保存」
- 「Adobe PDFを保存」ダイアログが表示される
- 以下の設定を確認・変更する:
- Adobe PDFプリセット:「[最小ファイルサイズ]」または「[高品質印刷]」を選択
- 準拠する規格:「なし」を選択(これが最重要)
- 「PDFを保存」をクリック
「準拠する規格」の欄で「PDF/X-1a:2001」「PDF/X-3:2002」「PDF/X-4:2008」などが選ばれていると、印刷用の制約が適用されます。Web用途やWordPressで使用するPDFであれば、「なし」で問題ありません。
解決策2:プリセットを使い分ける
Illustratorには用途に応じたPDFプリセットが用意されています。
- [最小ファイルサイズ]:Web表示やメール添付向け。ファイルサイズを優先し、RGBカラーで出力される
- [高品質印刷]:高品質な印刷物向け。PDF/X規格は適用されない
- [PDF/X-1a:2001]:印刷入稿用。CMYK必須
- [PDF/X-4:2008]:印刷入稿用(透明効果対応)。CMYK必須
WordPressで使うPDFなら「最小ファイルサイズ」プリセットを選ぶのが手軽です。このプリセットを選ぶと、自動的に「準拠する規格:なし」になります。
解決策3:直接画像として書き出す
サムネイル用の画像が欲しいだけであれば、そもそもPDFを経由する必要はありません。
Illustratorから直接PNG/JPGとして書き出せば、カラーモードの問題を完全に回避できます。
手順:
- 「ファイル」→「書き出し」→「Web用に保存(従来)」を選択
- 形式(PNG-24、JPEG など)を選択
- 「保存」をクリック
または、「ファイル」→「書き出し」→「書き出し形式」からPNGやJPGを選ぶこともできます。
解決策4:他の変換ツールを使う(開発者向け)
もしサーバー側で対処する必要がある場合、ImageMagick以外の変換ツールを使う方法もあります。
pdftoppm(Poppler)を使う方法:
Popplerライブラリに含まれるpdftoppmコマンドは、CMYKからRGBへの変換を自動で行ってくれます。
pdftoppm -png -r 150 input.pdf output
このコマンドは、PDF/X-1形式のPDFでも正しくRGB画像に変換できました。
ただし、WordPressプラグインとしてこの方法を採用するには、サーバーにPopplerがインストールされている必要があり、汎用性の面で課題があります。
なぜこの問題が起きやすいのか
今回の問題は、多くのデザイナーやWeb制作者が遭遇しやすい落とし穴です。その理由を考えてみます。
Illustratorの主な用途は印刷物
Adobe Illustratorは、元々印刷物のデザインに特化したソフトウェアです。ロゴ、チラシ、ポスター、パッケージなど、印刷を前提としたデザインに広く使われています。
そのため、PDFの保存設定もデフォルトで印刷入稿を意識したものになりがちです。特に、過去に印刷用データを作成したことがある場合、その設定が「最後に使用した設定」として残っていることがあります。
PDF/X規格の存在を知らない
カラーモード(RGB/CMYK)については多くの人が知っていますが、PDF/X規格の存在はあまり知られていません。
「RGBにしたから大丈夫」と思っても、保存形式がPDF/Xになっていれば、内部的にはCMYKが使われます。この点が見落とされやすいのです。
見た目では判別できない
PDF/X形式で保存されたPDFも、Adobe AcrobatやPreviewアプリでは普通に表示できます。見た目上は何も問題がないため、ImageMagickで変換するまで問題に気づきません。
問題のあるPDFかどうかを確認する方法
手元のPDFが問題のある形式かどうかを確認する方法をいくつか紹介します。
Adobe Acrobatで確認する
Adobe Acrobat(有料版)を使っている場合、以下の手順で確認できます。
- PDFファイルを開く
- 「ファイル」→「プロパティ」を選択
- 「概要」タブの「詳細情報」セクションを確認
- 「PDF/X」という表記があれば、PDF/X形式で保存されている
macOSのプレビューで確認する
macOSの場合、プレビューアプリで簡易的に確認できます。
- PDFファイルをプレビューで開く
- 「ツール」→「インスペクタを表示」を選択
- 「一般情報」パネルで「PDFバージョン」や「作成者」を確認
ただし、PDF/X規格の詳細情報は表示されないことがあります。
コマンドラインで確認する(確実)
LinuxやmacOSでは、pdfinfoコマンドを使うのが最も確実です。
pdfinfo ファイル名.pdf | grep -i "subtype\|PDF version"
出力例:
PDF version: 1.3 PDF subtype: PDF/X-1:2001
「PDF subtype」の行に「PDF/X」という表記があれば、それが原因の可能性が高いです。
予防策:Web用PDFを作成する際のチェックリスト
今後同じ問題を防ぐために、Web用PDFを作成する際のチェックリストをまとめました。
Illustratorの場合
- ☐ ドキュメントのカラーモードがRGBになっているか確認
- ☐ PDF保存時、「準拠する規格」が「なし」になっているか確認
- ☐ プリセットは「最小ファイルサイズ」または「高品質印刷」を選択
その他のアプリケーションの場合
- ☐ 印刷用プリセット(PDF/X、Press Quality など)を避ける
- ☐ Web用または画面表示用のプリセットを選択
- ☐ カラースペースがRGBになっているか確認
補足:PDF/X規格の種類
参考までに、PDF/X規格にはいくつかのバージョンがあります。
- PDF/X-1a:2001:最も制約が厳しい。CMYKとグレースケールのみ。透明効果不可
- PDF/X-1a:2003:PDF/X-1a:2001のマイナーアップデート
- PDF/X-3:2002:ICCベースのカラーマネジメントに対応。Lab色空間も使用可能
- PDF/X-4:2008:透明効果やレイヤーに対応。現在の主流
- PDF/X-5:2008:外部参照に対応
いずれの規格も印刷入稿を目的としており、Web用途には適していません。
まとめ
Rapls PDF Image Creator(およびImageMagickを使用するツール全般)でPDFが真っ黒になる場合、以下を確認してください。
チェックポイント:
- PDF/X形式で保存されていないか確認する
- IllustratorのPDF保存ダイアログで「準拠する規格」が「PDF/X-1a:2001」などになっていたら「なし」に変更
- pdfinfo コマンドで「PDF subtype」を確認
- RGBモードに変更しただけでは不十分
- ドキュメントをRGBモードにしても、PDF/X形式で保存するとCMYKが使われる
- 保存形式(規格)の設定が重要
- Web用途なら「規格:なし」で保存
- 印刷入稿以外の用途では、通常のPDF形式で十分
- 「最小ファイルサイズ」プリセットを使うのが手軽
今回の経験で、「RGBで保存したはずなのに」という思い込みが原因究明を遅らせたことを痛感しました。PDFの内部構造は見た目以上に複雑で、保存形式によって挙動が大きく変わります。
特にIllustratorは印刷用途がメインのソフトウェアなので、Web用のPDFを作成する際は保存設定に注意が必要です。同じ問題で困っている方の参考になれば幸いです。


コメント