4

着信 TIFF ファイルを処理する必要がある PHP アプリケーションがあります。私はこの TIFF の色空間を制御することも知識も持たないため、アプリケーションはすべての着信画像を RGB JPEG として保存する必要があります。

問題は、着信 TIFF ファイルが CMYK、RGB、sRGB でラップされたある種の YCbCrなどであり、保存する前に何らかの形で RGB JPEG に変換する必要があることです。

任意のバイナリ TIFF データを取得して適切な RGB JPEG バイナリ データに変換できる IMagick 拡張機能を使用する、PHP で何らかの変換関数が必要です。TIFF 画像内のさまざまな色空間を正しく処理する必要があります。出力形式 (RGB JPEG) は、どの入力ファイルでも同じままです。

次の明らかな解決策は、一部の CMYK TIFF を正しく変換します。一部の CMYK TIFF は色が反転し、YCbCr RGB TIFF は赤いオーバーレイによって完全に破損します。

$converter = new IMagick();
$converter->setResourceLimit(6, 1);
$converter->readImageBlob($data);

if ($converter->getImageColorspace() != IMagick::COLORSPACE_RGB
    && $converter->getImageColorspace() != IMagick::COLORSPACE_GRAY
) {
    $icc_rgb = file_get_contents('sRGB_v4_ICC_preference.icc');
    $converter->profileImage('icc', $icc_rgb);
    $converter->setImageColorspace(IMagick::COLORSPACE_RGB);
}

$converter->setImageFormat('jpeg');
$converter->setImageCompression(Imagick::COMPRESSION_JPEG);
$converter->setImageCompressionQuality(60);

$converter->resizeImage(1000, 1000, IMagick::FILTER_LANCZOS, 1, true);
$converter->stripImage();

$result = $converter->getImagesBlob();

このソリューションはそこから取得されます: http://blog.rodneyrehm.de/archives/4-CMYK-Images-And-Browsers-And-ImageMagick.html明らかに、すべての色空間で機能するとは限りません。それらを確実に検出します。ご覧のとおり、ホームページからダウンロードした sRGB_v4 ICC カラー プロファイルも使用しています。

Google は、赤いオーバーレイの問題 (変換の失敗の 1 つにすぎません) に対する特定の解決策を 1 つ見つけましたが、それはコンソール用であり、YCbCr 画像を扱うことが事前にわかっている場合に限られます。

convert some.tif -set colorspace YCbCr -colorspace RGB some.jpg

passthru-ingconvertと pass を使用して、必要なすべての魔法のスイッチを変換することはできますが、ソース イメージの色空間を事前に検出し、それ以外の場合は PHP アプリケーションで before every を呼び出す必要があると思いますidentify | grepconvert

4

1 に答える 1

1

私はこの同じ問題を経験しました。これはimagick フォーラムでも取り上げられ、修正は ImageMagick 6.8.0-4 にプッシュされました。

したがって、アップグレードするとこの問題は解決するはずです。ImageMagick 6.8.1-9 にアップグレードしましたが、それ以来、この問題に遭遇していません。

于 2013-01-07T12:40:59.590 に答える