0

を使用して画像を作成するスクリプトを作成しましたimagecreatetruecolour()。次に、関数を使用して画像に文字を追加しimagettftext()ます。他のいくつかの変更が行われ、最後に白い背景が削除され、PNG ファイルとして保存されます。全体が for ループに入るため、250 個の画像が作成されます。

私が直面している問題は、時々 (250 のうち 10-15 程度) 画像を作成した後に何もしないように見えるため、出力が白い正方形または黒い正方形 (正しいサイズ) になることです。

sleep()それらを作成しようとしているのが速すぎるかどうかを確認するために追加しようとしましたが、問題は解決しません。何が原因なのか誰にも分かりますか?PHPのメモリ制限は128MBなので、それが問題だとは思いません(また、ランダムな場所で発生し、最初の画像でさえ発生する場合があります)。

これは以前に投稿されたことがないことは確かですが、公平を期すために、何を探しているのか見当がつかなかったので、間違った場所を探していた可能性があります.


//編集

悲しいことに、スクリプト全体をここに追加することは許可されていませんが (会社のポリシーで何とか)、一部をアップロードすることはできます。さらに調査した後、文字を選択しないように絞り込みました(いくつかの変数をcsvに出力しましたが、この列は機能していない他の変数では空白でした)

したがって、その部分を処理するコードは次のとおりです。

$exp_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRUSTUBWXYZ';
$letterArray = str_split($exp_str);
$randLetter = rand(0,55);
$text = $letterArray[$randLetter];

そして、すべての画像をまとめる部分:

imagettftext($im, $sizeRand, $angleRand, $posX, $posY, $black, $font, $text);
$filename = 'images/'.$counter.'.png';

エラーログも空です。

ありがとう。コードを投稿した直後にエラーを見つけました。どこから 55 を取得したかはわかりませんが、はい、それは正しい順序です - というか文字ですが、いくつかはランダムな場所で動かなくなっています。-

4

1 に答える 1

0

これがあなたのコードが失敗した理由です

count($letterArray);戻るだろう 52

今、あなたは取得しようとしています

$randLetter = rand(0,55);

したがって、ランダムに無効な文字が生成され、コードが失敗します

使用する

    $randLetter = rand(0,count($letterArray) - 1);

サンプル作業コード

$exp_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRUSTUBWXYZ';
$letterArray = str_split($exp_str);
$randLetter = mt_rand(0,count($letterArray) - 1);
$text = $letterArray[$randLetter];
$font = 'C:\Apache\xampp\htdocs\lab\stockoverflow\verdana.ttf' ;
$im = imagecreate(500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 500, 500, $white);
imagettftext($im, 70, 0, 0, 100, $black, $font, $text);
imagepng($im);
imagedestroy($im);
于 2012-04-29T23:56:24.900 に答える