3

写真フィルター用のInstagraphPHPライブラリ(GitHubNetTuts )を見つけました。しかし、私の箱では、NetTutsで表示されるのと同じ画像が出力されないことがわかりました。私は写真フィルターやImageMagickの魔法についてこれ以上の知識がないので、ImageMagickの魔術師の皆さんの助けが必要です:-)

問題をローカライズしましたがcolortone、それ以外の場合はフィルターが適切に機能するため、機能内にある必要があります。Toasterは1つのカラートーン変換のみを実行するため、ショーケースとして取り上げましょう。

カラートーンPHP関数(bashエスケープ)によって生成されたコード:

convert test.jpg \( -clone 0 -fill '#330000' -colorize 100% \) \( -clone 0 -colorspace gray -negate \) -compose blend -define compose:args=100,0 -composite test.jpg

フィルタを完了するためのコマンドの残りのシーケンス(これらは大丈夫です):

convert test.jpg -modulate 150,80,100 -gamma 1.2 -contrast -contrast test.jpg
convert test.jpg \( -size 960.0x960.0 radial-gradient:none-LavenderBlush3 -gravity center -crop 640x640+0+0 +repage \) -compose multiply -flatten test.jpg
convert test.jpg \( -size 960.0x960.0 radial-gradient:#ff9966-none -gravity center -crop 640x640+0+0 +repage \) -compose multiply -flatten test.jpg

それでは、トースターフィルターの期待される結果を見てみましょう。

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

ただし、私のスクリプトは次のように生成します。

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

かなり暗いですが、理由はわかりません。このような動作を説明するには、おそらく2つのオプションしかありません。

  1. ライブラリの作成者のライブラリにバグがあります。(私はそうは思いませんが、それでも可能です...)
  2. 私のImageMagickは作者のものとは異なるため、異なる結果を生成します。(それはどのように起こりますか?)

私のImageMagickが異なる結果を生成する理由の手がかりはありますか?初期設定でしょうか?私のImageMagickは純粋に標準のUbuntuパッケージからインストールされています。

$ convert --version
Version: ImageMagick 6.7.7-10 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP

ImageMagickの最新のアップストリームバージョンをコンパイルしましたが、同じ間違った出力が生成されました。

$ convert --version
Version: ImageMagick 6.8.3-9 2013-03-15 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: bzlib djvu mpeg fontconfig freetype jbig jng jp2 jpeg lcms lqr lzma openexr png ps tiff x xml zlib
4

1 に答える 1

3

解決策:

convert -set colorspace RGB test.jpg \( -clone 0 -fill '#330000' -colorize 100% \) \( -clone 0 -colorspace gray -negate \) -compose blend -define compose:args=100,0 -composite test.jpg

英語:-set colorspace RGB画像を強制的にリニア RGB 色空間にするために追加します。


ImageMagick フォーラムの関係者と、Instagraph の作成者であるDejan Marjanovicに感謝します。この問題は、ImageMagickがバージョン 6.7.7-8 で動作を変更し、デフォルトで画像を sRGB として扱い始めたために発生しました。

Dejan は、当時アップストリームであったバージョン 6.7.5 で Instagraph を開発およびテストしました。フィルターは、R​​GB をデフォルトの色空間として想定して記述されます (以前の ImageMagick のデフォルトの動作)。ImageMagick 6.7.7-10 と 6.8.3-9 で同じコードを試したので、異なる出力が得られました。

-set colorspace RGBが追加された場合、画像はリニア RGB に変換され、フィルターは設計どおりに適切に機能します。別の解決策 (おそらくより良い) は、カラートーン サブプロシージャを微調整して sRGB 色空間でも機能するようにすることですが、それは私の現在の知識の範囲をはるかに超えているため、これでかなり問題ありません。

于 2013-03-15T11:04:39.267 に答える