1.写真をモノクロに:できた
2.コントラストを上げる:未だ
3.不要な線と影をツブす:未だ
4.白黒を白赤に変える:未だ
2と3の意図するところは写真の細かい線を消してイラストっぽく仕上げたいということです。
欲しいイメージ的にはhttp://www.gac.jp/article/index.php?stats=question&category=5&id=13793&command=msg
これに近いです。
いいアイディアありましたらよろしくお願いします。
PHP5限定になりますが、imagefilter関数を使えばそこそこのことは出来ると思います。
sample.jpgをそれっぽく変更する簡単なソースを書いてみました。
(あまりイラストっぽくならないのですが、雰囲気は近づくと思います。)
今回はinputとoutputのファイルを全て変え、それぞれの段階での画像を後で確認できるようにしております。
(実際にはoutputは1つにしてしまって問題ありません。)
元の画像の明るさなども大きく影響しますので、引数として与える値は適宜変更してください。
<?php // 輝度変更 (明るくします) $im = imagecreatefromjpeg('sample.jpg'); if ($im && imagefilter($im, IMG_FILTER_BRIGHTNESS,50)) { print "輝度変更完了<br />"; imagepng($im, '01_sample_brightened.png'); } else { print '輝度変更失敗<br />'; } imagedestroy($im); // ぼかし処理 (不要?) $im = imagecreatefrompng('01_sample_brightened.png'); if ($im && imagefilter($im, IMG_FILTER_SELECTIVE_BLUR)) { print "ぼかし処理完了<br />"; imagepng($im, '02_sample_blur.png'); } else { print "ぼかし処理失敗<br />"; } imagedestroy($im); // コントラスト変更 (ハイコントラストにします) $im = imagecreatefrompng('02_sample_blur.png'); if ($im && imagefilter($im, IMG_FILTER_CONTRAST,-200)) { print "コントラスト変更完了<br />"; imagepng($im, '03_sample_high_contrast.png'); } else { print "コントラスト変更失敗<br />"; } imagedestroy($im); // グレースケール変更 (グレースケールに変換します) $im = imagecreatefrompng('03_sample_high_contrast.png'); if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) { print "グレースケール変換完了<br />"; imagepng($im, '04_sample_grayscale.png'); } else { print "グレースケール変換失敗<br />"; } imagedestroy($im); // 色変更 (赤くします) $im = imagecreatefrompng('04_sample_grayscale.png'); if ($im && imagefilter($im, IMG_FILTER_COLORIZE,255,0,0)) { print '赤変換完了<br />'; imagepng($im, '05_sample_red.png'); } else { print "赤変換失敗<br />"; } imagedestroy($im); ?>
尚、上記のソースでは1つ目の変換が失敗しても後続の処理が行われてしまいます。
(ソースの見易さを重視し、if文などを省略いたしました。)
if文をネストし、1回目の変換が成功したら次の処理、その変換が成功したら次の処理…とすれば良いと思います。
もっと良い方法があるような気がしますが、少しでも参考になれば幸いです。
PHP5限定になりますが、imagefilter関数を使えばそこそこのことは出来ると思います。
sample.jpgをそれっぽく変更する簡単なソースを書いてみました。
(あまりイラストっぽくならないのですが、雰囲気は近づくと思います。)
今回はinputとoutputのファイルを全て変え、それぞれの段階での画像を後で確認できるようにしております。
(実際にはoutputは1つにしてしまって問題ありません。)
元の画像の明るさなども大きく影響しますので、引数として与える値は適宜変更してください。
<?php // 輝度変更 (明るくします) $im = imagecreatefromjpeg('sample.jpg'); if ($im && imagefilter($im, IMG_FILTER_BRIGHTNESS,50)) { print "輝度変更完了<br />"; imagepng($im, '01_sample_brightened.png'); } else { print '輝度変更失敗<br />'; } imagedestroy($im); // ぼかし処理 (不要?) $im = imagecreatefrompng('01_sample_brightened.png'); if ($im && imagefilter($im, IMG_FILTER_SELECTIVE_BLUR)) { print "ぼかし処理完了<br />"; imagepng($im, '02_sample_blur.png'); } else { print "ぼかし処理失敗<br />"; } imagedestroy($im); // コントラスト変更 (ハイコントラストにします) $im = imagecreatefrompng('02_sample_blur.png'); if ($im && imagefilter($im, IMG_FILTER_CONTRAST,-200)) { print "コントラスト変更完了<br />"; imagepng($im, '03_sample_high_contrast.png'); } else { print "コントラスト変更失敗<br />"; } imagedestroy($im); // グレースケール変更 (グレースケールに変換します) $im = imagecreatefrompng('03_sample_high_contrast.png'); if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) { print "グレースケール変換完了<br />"; imagepng($im, '04_sample_grayscale.png'); } else { print "グレースケール変換失敗<br />"; } imagedestroy($im); // 色変更 (赤くします) $im = imagecreatefrompng('04_sample_grayscale.png'); if ($im && imagefilter($im, IMG_FILTER_COLORIZE,255,0,0)) { print '赤変換完了<br />'; imagepng($im, '05_sample_red.png'); } else { print "赤変換失敗<br />"; } imagedestroy($im); ?>
尚、上記のソースでは1つ目の変換が失敗しても後続の処理が行われてしまいます。
(ソースの見易さを重視し、if文などを省略いたしました。)
if文をネストし、1回目の変換が成功したら次の処理、その変換が成功したら次の処理…とすれば良いと思います。
もっと良い方法があるような気がしますが、少しでも参考になれば幸いです。
これはすごい!ありがとうございます。
というかPHP4で同じようなことができるクラスのようなものがあったりしますかね?
PHP5だと今使ってるレンタルサーバじゃ無理なのでmacminiをサーバーにしてやるかなあ。。
PHP5のGDなら、imagefilter() を使って、簡単にできそうです。
※使ったことはないので、保証の限りではないのですが・・・
http://cherry.makizou.com/phpdoc/function.imagefilter.html
1→IMG_FILTER_GRAYSCALE: 画像をグレースケールに変換します。
2→IMG_FILTER_CONTRAST: 画像のコントラストを 変更します。コントラストのレベルを arg1 で設定します。
3→IMG_FILTER_MEAN_REMOVAL: 平均を除去し、 「スケッチ風の」効果を得ます。
4→IMG_FILTER_COLORIZE: IMG_FILTER_GRAYSCALE と似ていますが、 色を指定することが可能です。 arg1、arg2 および arg3 を使用して red、blue、 green の値を指定します。 各値の範囲は 0 から 255 までです。
※1を実行せずに、まず4をred(arg1)のみでフィルターすれば良いように思えます。
ありがとうございます。PHP4で同様の効果を得られるクラスのようなものがあったり、、しませんかね?
これはすごい!ありがとうございます。
というかPHP4で同じようなことができるクラスのようなものがあったりしますかね?
PHP5だと今使ってるレンタルサーバじゃ無理なのでmacminiをサーバーにしてやるかなあ。。