3

ユーザーが投稿したphpサイトから少し調整した次の関数を使用しています。

function createImgText ($string=NULL, $fontsize=0, $marginX=0, $imgH=0, $fontfile=NULL, $imgColorHex=NULL, $txtColorHex=NULL){
    if($string != ""){
    //header("Content-type: image/png");    
    //
    $spacing = 0;

    $line = array("linespacing" => $spacing);

    if (file_exists($fontfile)) $box = @imageftbbox($fontsize,0,$fontfile,$string,$line) or die('Box command error');
    else die("ERROR - font");

    $tw=$box[4]-$box[0]; //image width
    $marginY = $imgH - (($imgH - $fontsize) / 2);
    $imgWidth = $tw + (2*$marginX);
    $im = ImageCreate($imgWidth, $imgH);
    $int = hexdec($imgColorHex);
    $arr = array("red" => 0xFF & ($int >> 0x10),
           "green" => 0xFF & ($int >> 0x8),
           "blue" => 0xFF & $int);
    $black = ImageColorAllocate($im, $arr["red"], $arr["green"], $arr["blue"]);
    $int = hexdec($txtColorHex);
    $arr = array("red" => 0xFF & ($int >> 0x10),
           "green" => 0xFF & ($int >> 0x8),
           "blue" => 0xFF & $int);
    $white = ImageColorAllocate($im, $arr["red"], $arr["green"], $arr["blue"]);
    ImageFtText($im, $fontsize, 0, $marginX, $marginY, $white, $fontfile, $string, array());
    ImagePng($im);
    ImageDestroy($im);
}else{
    echo "ERROR - no string";
}
}

index.phpで以下を使用しています

  error_reporting(-1); 
  ini_set('display_errors', true);

画像を出力するページ。

エラーは発生していません。:(ただし、ヘッダー部分のコメントを解除すると、Firefoxは「画像にエラーが含まれているため表示されません」と表示します。

画像のphpファイル:

<?php
 error_reporting(-1); 
ini_set('display_errors', true);
$code = $sys->core->generateRandomString($sys->settings['captchal']);
echo 'Debug: Using string: ' . $code . ' font: fonts/' . $sys->settings['captchaf'] . '<br>';


$sys->core->createImgText($code, 9, 10, 18, 'fonts/' . $sys->settings['captchaf'], "000000", "FFFFFF");
?> 

それは言う:

Debug: Using string: nrcujP font: fonts/airstream.ttf
�PNG  IHDR0�H@�PLTE������������???___uV#�pIDAT�c` �E�D�x���*�s�bP     �@fR�SVV``�F�0t4UTu6uuh3rl@�+4h3k6 �),6F�!�P�LHPTD8� �c�p�,�8�( �8�Q+|�Q��IEND�B`� 

私はページを持っています

 <?php echo phpinfo(); ?> 

GDが有効になっていて、TTFサポートを含むすべてのアドオンが有効になっていることを示しています。誰かが以前に同様の問題を抱えたことはありますか?他のことを試しましたが、2番目のImageColorAllocateで失敗するようです。私が検索したとき、私はグーグルでそれについての言及を見ません。呼び出されたときに画像をレンダリングしてから、ファイルスペースを占有するのではなく、それ自体を破棄することを想定しています。


NXTの助けを借りて問題を解決しました。以前は空白がありました

 <?php 

私が見落としていたこと。

4

2 に答える 2

1

少し変更を加えてコードを使用しましたが、完全に機能します。

私の変更は次のとおりです。

  • フォント名を私が持っていた他の.ttfに置き換える
  • キャプチャテキストをハードコーディングしました
  • デバッグテキストの行を削除しました(画像を破壊するため、そこに表示することはできません)
  • 関数呼び出しを調整しました
  • header()行のコメントを外しました

それでも問題が解決しない場合は、画像の内容のみを出力し、使用可能なテキストエディタでスクリプトURLを直接開いて、ソースコードを確認してください。また、出力に先頭と末尾のスペースがないことを確認してください。

function createImgText($string=NULL, $fontsize=0, $marginX=0, $imgH=0, $fontfile=NULL, $imgColorHex=NULL, $txtColorHex=NULL){
    if($string != ""){
    header("Content-type: image/png");    

    $spacing = 0;

    $line = array("linespacing" => $spacing);

    if (file_exists($fontfile)) $box = @imageftbbox($fontsize,0,$fontfile,$string,$line) or die('Box command error');
    else die("ERROR - font");

    $tw=$box[4]-$box[0]; //image width
    $marginY = $imgH - (($imgH - $fontsize) / 2);
    $imgWidth = $tw + (2*$marginX);
    $im = ImageCreate($imgWidth, $imgH);
    $int = hexdec($imgColorHex);
    $arr = array("red" => 0xFF & ($int >> 0x10),
       "green" => 0xFF & ($int >> 0x8),
       "blue" => 0xFF & $int);
    $black = ImageColorAllocate($im, $arr["red"], $arr["green"], $arr["blue"]);
    $int = hexdec($txtColorHex);
    $arr = array("red" => 0xFF & ($int >> 0x10),
       "green" => 0xFF & ($int >> 0x8),
       "blue" => 0xFF & $int);
    $white = ImageColorAllocate($im, $arr["red"], $arr["green"], $arr["blue"]);
    ImageFtText($im, $fontsize, 0, $marginX, $marginY, $white, $fontfile, $string, array());
    ImagePng($im);
    ImageDestroy($im);
}else{
    echo "ERROR - no string";
}
}


error_reporting(-1); 
ini_set('display_errors', true);
$code = 'abcdef';

createImgText($code, 9, 10, 18, 'MyFont.ttf', "000000", "FFFFFF");
于 2013-03-14T20:18:19.783 に答える
1
imagepng($im,"new.png",0);
imagedestroy($im);

これを試してみて ください.... -showing-the/13621103#13621103- >このリンクはあなたの質問に一致します。

于 2013-03-14T19:30:27.230 に答える