Authentication




Cancel OK
B!コメントする  2013-04-03 15:58:00 by old

画像をズラしてcaptchaっぽいことをしてみる

この際なので色々とGDを触ってみようと思って画像をぼかしてみようと思った。
そこで上から左右にランダムなドット数でズラしていけばそれっぽくなるんじゃないかと思って作ってみた。


$filename = "foo.jpg";
$level = "3";

// 画像情報を取得
$imginfo = getimagesize($filename);

// 出力先
$dst
im = imagecreatetruecolor($imginfo['0'], $imginfo['1']);
// 白で塗りつぶす
$white = imagecolorallocate($dstim, 0xFF, 0xFF, 0xFF);
imagefill($dst
im, 0, 0, $white);

$image = imagecreatefromjpeg($filename);

// ズラす
//$imagep = ImageRotate($image, $angle, $margincolor);
for( $i = 0; $i < $img
info['1']; $i++ )
{
// 揺らぎ生成
$lag = rand(-$level, 0);
if( ($i % 2) == "0" )
{
$lag = rand(0, $level);
}
// 生成
imagecopy($dstim, $image, -3, $i+$level, $lag, $i+$level, $imginfo['0']-$level, $imginfo['1']);
}
header("Content-Type: image/jpeg");
imagejpeg($dst
im, null, 100);


こんな感じ。
これを使うと画像はこんな感じになる。



意外と悪くない。
しかし、欠点も大いにあって上からドット単位でズラしていくのでとっても重い…。
2000 x 2000とかのサイズになると普通にタイムアウトしてしまうくらいに…。

そこであれこれ見てたらやっぱりあるんですね…。普通にimagefilterという関数がありました。
この関数を使えばボカしたりモザイクかけたりやりたい放題みたいです。

ちなみにモザイクかけたらこんな感じです。



こっちの方が早いしきれいだから、こんなノロマなものは捨ててフィルター使おう…


PHP  

  • コメント
  • コメントはまだありません