2

Imagemagick を使用して画像をチルトシフトするコマンド ラインで実行できるコマンドがあります。

convert \( myimage.jpg -gamma 0.75 -modulate 100,130 -contrast \) \( +clone -sparse-color Barycentric "0,0 black 0,%h white" -function polynomial 4,-4,1 -level 0,50 % \) -compose blur -set option:compose:args 5 -composite myimage.jpg

PHP の imagemagick ライブラリを使用して、このコマンドの効果を再現できるようにしたいと考えています。コマンドの最初の部分は簡単に再現できますが、sparse-color とその後の引数を理解するのに苦労しています。これまでのところ、私は持っています:

$image = new imagick("myimage.jpg") 
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);

ありがとう!

4

3 に答える 3

2

Vijay の幸運を祈ります - exec() を使い続けることをお勧めします

とにかく試してみたところ、私のコードは以下のとおりです。$new->functionImage ( FUNCTION_POLYNOMIAL, $functionImagearray ); の行で、私が行ったいくつかの変更とエラーで断念したことがわかります。

// Did not like the %h
// $sparseColorarray = array( 0, 0, black, 0, %h, white );
$sparseColorarray = array( 0, 0, black, 0, 20, white );
$functionImagearray = array( 4, -4, 1 );
$image = new imagick("output3.jpg");
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);
//$new = $image->clone(); 
$new = clone $image; 
$new->sparseColorImage( Imagick::SPARSECOLORMETHOD_BARYCENTRIC, $sparseColorarray );
$new->functionImage ( Imagick::FUNCTION_POLYNOMIAL, $functionImagearray );
// Did not like the %
// $new->levelImage( 0, 50% );
$new->levelImage( 0, 50 );
// Can not find any options for this blur
$image->setImageCompose ( BLUR );
$image->setOption( args, 5);
$image->compositeImage( $new, COMPOSITE_BLEND, 0, 0 );
$image->writeImage( "tilt.jpg" );
$image->destroy();

ドキュメントを読んでサンプルコードに従うと、これが私が思いついたものです。$image->setImageCompose ( BLUR ); のオプションも見つかりませんでした。

あなたがそれを機能させることができるかどうかを見るのは興味深いでしょう。

Imagick のバージョンが functionImage に対して古すぎることがわかりました

$new->functionImage 行を変更

于 2012-06-19T20:17:53.057 に答える
1

私は ImageMagick の経験が豊富ではありませんが、こちらのドキュメントにあるスパースカラー Barycentric に相当する関数があると思います。

次のようになります。

$image -> sparseColorImage(int SPARSECOLORMETHOD_BARYCENTRIC (integer), 
                           array $arguments [, int $channel = CHANNEL_DEFAULT ])

FUNCTION_POLYNOMIAL およびその他のメソッド定数/チャンネル定数は、今後の参考のためにここで見つけることができます!

ガウスぼかしは、以下を追加することで処理されます。

$image -> gaussianBlurImage ( float $radius , 
                              float $sigma [, int $channel = CHANNEL_ALL ] )

もちろん、これらはすべて非常に一般的なものですが、必要なルック アンド フィールを得るためにいじることができます。

お役に立てれば!

石工

于 2012-06-19T20:05:59.187 に答える
0

私はあなたがここにある例を参照していると仮定しています:

http://www.imagemagick.org/Usage/photos/

そうは言っても、私はPHPImagickでまったく同じことを達成しようとしてきました。LinuxでPHPImagick3.0.1とImageMagick6.7.4-42012-01-09Q16を使用しています。

ぼかし合成モードは文書化されていないようです。magick/composite.hオンラインのImageMagickソースを調べて見つけました88

このコードはあなたが探しているものを達成します:

$im = new Imagick();
$im->readImageBlob(file_get_contents($src));
$qr = $im->getQuantumRange();
$qr = $qr['quantumRangeLong'];
$im->sigmoidalContrastImage(true, 10, $qr / 2, Imagick::CHANNEL_ALL);
$blurmap = new Imagick();
$blurmap->setOption('compose:args', '5');
$blurmap->newPseudoImage($im->getImageWidth(), $im->getImageHeight(), 'gradient:black-white');
$blurmap->functionImage(Imagick::FUNCTION_POLYNOMIAL, array(4.5, -4.5, 1));
$blurmap->levelImage(0, 1, $qr / 2);
$im->compositeImage($blurmap, 57, 0, 0);
$blurmap->destroy();

さらにぼかしが必要な場合は、または何かに変更compose:argsしてください。10私が理解したことの1つは、ワンド自体に何かを作成/ロードする前に、オプションを設定する必要があるということでした。

コマンドラインのように関数を動作させることはできませんでしたが、SparseColorImage()他の誰かがそれを理解すれば、その部分に貢献できると確信しています。上記は私のニーズには十分です。

編集:生成された画像をさらに調べると、ぼかしマップの黒い部分でさえぼやけていることに気づきました。いくつか検索したところ、これはImageMagickで導入されたバグに起因しているようです。バージョン6.7.8-12012-07-05Q16に切り替えましたが、ブラーマップが機能しているように見えます。ぼかし合成で不要なぼかしに気付いた場合は、ImageMagickをアップグレードすることをお勧めします。

于 2012-07-05T17:09:46.957 に答える