ホームページ  >  記事  >  バックエンド開発  >  画像を使用すると色が正しくありません。JPEG をデコードして PDF に書き込むにはデコードしますか?

画像を使用すると色が正しくありません。JPEG をデコードして PDF に書き込むにはデコードしますか?

PHPz
PHPz転載
2024-02-08 22:40:121060ブラウズ

使用 image.Decode 解码 JPEG 并写入 PDF 时颜色不正确?

php エディタ Zimo は、image.Decode を使用して JPEG をデコードし、PDF に書き込むときに問題が発生しました。つまり、色が正しくありませんでした。この問題は、色空間の不一致が原因で発生する可能性があります。 JPEG 画像をデコードするときは、画像のカラー スペースが PDF のカラー スペースと一致していることを確認する必要があります。一致しないと、色が不正確になります。この問題を解決するには、image.DecodeConfig 関数を使用して JPEG 画像のカラー モードを取得し、それを PDF のカラー スペースと一致させて一貫性を確保します。さらに、他の画像処理ライブラリを使用したり、画像の色空間を調整してこの問題を解決することもできます。

質問内容

image.decode()メソッドを使用して画像ファイル(png、jpg、gif、bmp形式)をデコードしてpdfを作成して取得しようとしています。 画像.画像。次に、ピクセル データを pdf ストリームに書き込み、その後圧縮します。私が抱えている問題は、jpegをデコードすると、結果のpdfの色が正しくないことです。他のすべての画像形式は期待どおりに機能します。問題のスクリーンショットを添付しました。

スクリーンショット: https://i.stack.imgur.com/e3hc8.png

この問題の原因を知っている人はいますか? image.decode() を使用するときに JPEG を別の方法で処理する必要がある特定の方法はありますか?この問題を解決する方法についてのご提案をいただければ幸いです。

###編集:###

コード:

リーリー リーリー

jpeg.decode

を直接使用すると、PDF 内の画像は同じように見えます。 生成された PDF 内の画像が元の PNG とまったく同じように見えるようにしたいのですが、多少の劣化はあるかもしれません。

元の png: https://i.stack.imgur.com/rnkgq.png

変換されたjpg: https://i.stack.imgur.com/yj69y.jpg

w3c の最初のテスト jpeg https://www.w3.org/markup/test/xhtml-print/20050519/tests/a_2_1-bf-01.htm

など、他の jpeg にも同じ問題があります。

Solution

color.rgba() アルファが事前に乗算されたカラー コンポーネントの範囲 0..0xffff を返します。

byte(r)

のような値を byte に変換すると、その下位 8 ビットが保持され、元の値と比較すると単なるランダムであるように見えます。 8 ビットのカラー コンポーネントが必要です。byte に変換せず、上位 8 ビットを使用します。これは、8 で右シフト (または 256 で除算) することを意味します。 リーリー png と gif では機能するが、jpeg では機能しない理由の説明:

png および gif 画像のデコードでは、コンポーネントの保存に 8 ビット値を使用する

color.rgba

カラー モデルを使用する場合があります。ただし、その rgba.rgba() メソッドは、元の 8 ビット値をコピーすることで、これらの値を 16 ビット値に変換します。 リーリー 的图像模型>これは、下位 8 ビットを取得すると、上位 8 ビットを取得した場合と同じ元の値が得られることを意味します。 jpeg 画像のデコードでは、color.ycbcr

カラー タイプが使用される場合がありますが、この「実装動作」は再現されません。 これに依存しないでください。 16 ビット コンポーネントのうち 8 ビット コンポーネントが必要な場合は、必ず上位の 8 ビットを使用してください。

以上が画像を使用すると色が正しくありません。JPEG をデコードして PDF に書き込むにはデコードしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。