36

CodeIgniter1.7を使用して写真共有コミュニティサイトを開発しました。メンバーによってアップロードされた写真は、CodeIgniterImageManipulationクラスを使用するさまざまな形式で自動的にサイズ変更されます。このクラスはフレームワークに組み込まれており、基本的にはGD、GD2、ImageMagick、NETPBMなどの複数の画像操作ライブラリのラッパーです。私のホストでは、GD2しか使用できないので、ここでこの質問をします。

私の問題に移ります。これが私のサイトのサイズ変更された写真の例です。オリジナルは非常に大きく、幅が3000pxを超えていることに注意してください。

http://www.jungledragon.com/image/195/female_impala_close-up.html

次に、同じ画像を見てください。これもサイズが変更されており、Flickrで少し大きくなっています。

http://www.flickr.com/photos/fledder/3763538865/in/set-72157621744113979

劇的な違いがわかりますか?私はその大きなギャップを埋めようとしています。私が最初にしたことは、画像にシャープフィルターを適用することでした。ここで結果を見ることができます:

ここに画像の説明を入力してください

まだ完璧ではありませんが、少なくともFlickr画像のシャープネスレベルに近づいています。残りの問題は、彩度が低下したかのように色が洗い流されることです。これはすでに研ぎフィルターの前に起こっているので、GD2にある必要があります。

この問題は私にとって非常に重要ですが、どこを見ればよいのかわかりません。クロマサブサンプリングについて話している.NETスレッドをいくつか見つけましたが、セットアップでその情報をどう処理するかわかりません。セットアップの制約内で機能するソリューションを探しています。

更新:これにより、元のファイルを自分のサイトとFlickrの両方にアップロードしたのとまったく同じになります。

http://www.jungledragon.com/img/DSC07275.jpg

アップデート2:ショックを受けました。いい意味で。ImageMagickをインストールするのに大変な苦労がありましたが、それに切り替えた後(Code Igniter画像操作クラスで使用するライブラリとして「imagemagick」を設定した問題でした)、テスト画像の結果は次のようになります。

ここに画像の説明を入力してください

ImageMagickのサイズ変更は、意図したとおりに実行されます。色は保存され、シャープネスがあります。はい、ImageMagickのために不要になったため、カスタムシャープニングルーチンを無効にしました。その上、プロセスははるかに高速で、メモリの消費も少なくなります。そして、ここにもう1つの大きな部分があります。それを説明することはできませんが、ユーザー@Alixによって提案された特定のカラープロファイルを使用するようにImageMagickに指示することはまったくありませんでした。これまでの私のテストでは、埋め込みプロファイルの有無にかかわらず、色情報が尊重されているように見えます。出力は、単に入力の小さいバージョンです。ImageMagickは本当に賢いのですか、それとも私は夢を見ていますか?

4

3 に答える 3

25

私はこれをImagickでさらにテストすることができました:

ImagicksRGBテスト

画像の左半分はImagickとsRGB_IEC61966-2-1_no_black_scaling.iccカラープロファイルで処理され、右半分にはカラープロファイルが関連付けられておらず、ImagickまたはGDで処理された場合はまったく同じように表示されます。これが私が使用したコードです:

header('Content-type: image/jpeg');

$image = new Imagick('/path/to/DSC07275.jpg');

if (($srgb = file_get_contents('http://www.color.org/sRGB_IEC61966-2-1_no_black_scaling.icc')) !== false)
{
    $image->profileImage('icc', $srgb);
    $image->setImageColorSpace(Imagick::COLORSPACE_SRGB);
}

$image->thumbnailImage(1024, 0);

echo $image;

color.orgWebサイトで入手可能ないくつかのsRGBプロファイルの比較を次に示します。

sRGB比較

3番目のプロファイルが最も鮮明な結果を生成するように思えますが、それ以外は、どのようにして決定的な選択を行うのかわかりません。


編集:どうやら、ImagickにはバンドルされたsRGBプロファイルが付属しているため、ImageColorConsortiumのWebサイトからダウンロードする必要はありません。次のコードですべてのシナリオを処理できます。

header('Content-type: image/jpeg');

$image = new Imagick('/path/to/DSC07275.jpg');
$version = $image->getVersion();
$profile = 'http://www.color.org/sRGB_IEC61966-2-1_no_black_scaling.icc';

if ((is_array($version) === true) && (array_key_exists('versionString', $version) === true))
{
    $version = preg_replace('~ImageMagick ([^-]*).*~', '$1', $version['versionString']);

    if (is_file(sprintf('/usr/share/ImageMagick-%s/config/sRGB.icm', $version)) === true)
    {
        $profile = sprintf('/usr/share/ImageMagick-%s/config/sRGB.icm', $version);
    }
}

if (($srgb = file_get_contents($profile)) !== false)
{
    $image->profileImage('icc', $srgb);
    $image->setImageColorSpace(Imagick::COLORSPACE_SRGB);
}

$image->thumbnailImage(1024, 0);

echo $image;
于 2011-04-25T03:57:12.873 に答える
6

元の画像にはAdobe RGB (1998)ICCプロファイルが添付されています。プロファイルを知らないGDが画像データを誤って解釈していると思います。これを確認する関連するPHPのバグがあります。

正しいプロファイル、おそらくsRGBで画像を準備する必要があります。それができるアプリケーションがある場合は、それをsRGBに変換して再アップロードしてみてください。

この問題に対する永続的なサーバー側のソリューションが必要な場合は、プロファイルを処理できる画像処理ライブラリが必要になると思います。正直なところ、ImageMagickがこれらのことをどのように処理するかはわかりませんが、少なくともカラープロファイルの基本的な概念には精通しています。

関連:sRGBとAdobeRGBの比較

于 2011-04-24T20:48:24.537 に答える
5

このスレッドに貢献するための情報が少しあります。私は写真家であり、Web開発者ではないので、技術的な知識はあまりありませんが、この問題に取り組んでいるので、この投稿が将来の誰かに役立つことを願っています。

GDを使用してすべての画像をリサンプリングするオンライン写真販売ツールを使用しています。広色域モニターで表示すると、適切なsRGB変換とICCプロファイリングを添付してアップロードした場合でも、画像がファンキーに見えるという問題がありました。

私が問題を見つけたのは、GDが元のファイルからすべてのメタデータとICCプロファイルを削除することです。次に、ブラウザはプロファイルを表示せず、それらを正しく表示していません。標準色域モニターではわずかですが、広色域では非常に明白です。

これに問題がある場合は、Firefoxを使用し、about:configの設定を変更することで、私の理論をテストできます。「gfx.color_management.mode」の値をデフォルトの「2」から「1」に変更します。この設定により、FirefoxはICCプロファイルのない画像をsRGBと見なし、そのように表示します。画像は期待どおりに表示され、Photoshop / Lightroom/etcと同じになります。デフォルトが私を超えているので、なぜすべてのブラウザがこの常識的なアプローチを使用しないのですか。

残念ながら、私のショッピングカートはPHP GDを使用するように設定されているだけなので、現時点では良い結果を得ることができません。GDを更新して、ICCプロファイルを添付したままにするか、エクスポート時に単純なsRGBプロファイルを追加するオプションを用意したいと思います。

詳細はこちら: http ://www.gballard.net/psd/go_live_page_profile/embeddedJPEGprofiles.html#

于 2012-12-10T08:06:17.890 に答える