そういえばあれはどうやって作るんだろうっておもって
作ってみました。
意外と簡単だった。
こんなかんじ。
日本語を出すにはフォントいれとかないとだめだというのに
ちょっとはまったくらいかな。
PHPで画像いじるの意外と面白いかもw
一応ソースはこんなかんじ。
header("Content-type: image/png");
//設定
$string = 'きゃぷちゃテストね';
$width = 250;
$height = 100;
$fontSize = 20;
$distortion = true;
//フォントのパス設定
putenv('GDFONTPATH='.realpath('.'));
$font = 'fontname';
//元画像を使わないから1から作成
$img = imagecreatetruecolor($width,$height);
//captchaで使う色を設定
$black = imagecolorallocate($img,22,22,22);
$darkGray = imagecolorallocate($img,55,55,55);
$gray = imagecolorallocate($img,200,200,200);
$white = imagecolorallocate($img,255,255,255);
//画像を背景色でfill
imagefill($img,0,0,$white);
//センタリング処理用
$wd = (imagesx($img) - $fontSize * 0.35 * strlen($string)) / 2;
$ht = $height / 2 + $fontSize * 0.35;
//各文字を表示
for ($i=0;$i < mb_strlen($string);$i++) {
$putString = mb_substr($string,$i,1,'UTF-8');
imagettftext($img,$fontSize + rand(-5,5),rand(-5,5),$wd + $fontSize * $i,$ht + rand(-10,10),$darkGray,$font,$putString);
}
//ディストーション処理
if ($distortion) {
imagesetthickness($img,1);
//ラインディストーション
$i = 0;
while ($i<25) {
$randWidth1 = rand(0,$width);
$randHeight1 = rand(0,$height);
$randWidth2 = rand(0,$width);
$randHeight2 = rand(0,$height);
imageline($img,$randWidth1,$randHeight1,$randWidth2,$randHeight2,$gray);
$i++;
}
//ドットディストーション
$i = 0;
while ($i<200) {
$randWidth = rand(0,$width);
$randHeight = rand(0,$height);
imagesetpixel($img,$randWidth,$randHeight,$black);
$i++;
}
//ガウス処理
$gaus = array(array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0));
imageconvolution($img,$gaus,16,0);
}
//枠ぶち描画
imagesetthickness($img,5);
$rectangle = array(0,0,0,$height,$width,$height,$width,0);
imagepolygon($img,$rectangle,4,$black);
imagesetthickness($img,1);
$rectangle = array(0,0,0,$height,$width,$height,$width,0);
imagepolygon($img,$rectangle,4,$white);
//最終画像出力
imagepng($img);
imagedestroy($img)