0

既存のpngから単純な画像を生成し、それにテキストを追加しています。しかし、品質は非常に悪く、結果はギザギザです。こちらを参照してください。結果は超高品質である必要はなく、実際よりも少しだけ優れています。これはかなり貧弱なので、何か間違ったことをしているに違いありません。どんな提案も素晴らしいでしょう。

どうもありがとうございました、

トッド

    // customizable variables
    $common_font_file = 'fonts/giddyup.ttf';
    $latin_font_file = 'fonts/comic-sans-ms.ttf';
    $font_color       = '#000000' ;
    $image_file       = 'images/oval_template_large.png';
    $mime_type          = 'image/png' ;
    $extension          = '.png' ;
    $s_end_buffer_size  = 4096 ;

    $common_name = html_entity_decode($_POST["Cname"]);
    $latin_name = html_entity_decode($_POST["Lname"]);
    $common_left_indent = html_entity_decode($_POST["cleftIndent"]);
    $latin_left_indent = html_entity_decode($_POST["lleftIndent"]);
    $common_top_indent = html_entity_decode($_POST["ctopIndent"]);
    $latin_top_indent = html_entity_decode($_POST["ltopIndent"]);
    $common_font_size = html_entity_decode($_POST["cFontSize"])* 72 / 96;
    $latin_font_size = html_entity_decode($_POST["lFontSize"])* 72 / 96;

    $font_rgb = hex_to_rgb($font_color) ;

    // create and measure the common text
    $common_box = @ImageTTFBBox($common_font_size,0,$common_font_file,$common_name) ;
    $common_text_width = abs($common_box[2]-$common_box[0]);
    $common_text_height = abs($common_box[5]-$common_box[3]);

    // create and measure the latin text
    $latin_box = @ImageTTFBBox($latin_font_size,0,$latin_font_file,$latin_name) ;
    $latin_text_width = abs($latin_box[2]-$latin_box[0]);
    $latin_text_height = abs($latin_box[5]-$latin_box[3]);

    $image =  imagecreatefrompng($image_file);

    if(!$image || (!$common_box && !$latin_box))
    {
        fatal_error('Error: The server could not create this image.') ;
    }

    // allocate colors and measure final text position
    $font_color = ImageColorAllocate($image,$font_rgb['red'],$font_rgb['green'],$font_rgb['blue']);
    $image_width = imagesx($image);


    $put_common_text_x = $common_left_indent;
    $put_common_text_y = $common_top_indent + $common_text_height;

    $put_latin_text_x = $latin_left_indent;
    $put_latin_text_y = $latin_text_height + $latin_top_indent ;


    // Write the text
    imagettftext($image, $common_font_size, 0, $put_common_text_x, $put_common_text_y, $font_color, $common_font_file, $common_name);
    // Write the text
    imagettftext($image, $latin_font_size, 0, $put_latin_text_x, $put_latin_text_y, $font_color, $latin_font_file, $latin_name);


    header('Content-type: ' . $mime_type) ;
    ImagePNG($image) ;

    ImageDestroy($image) ;
    exit ;
4

2 に答える 2

2

GD のテキスト関数は、描画しているテキストにアンチエイリアスを適用しません。これを回避する最も簡単な方法は、最終製品よりも少なくとも 2 倍または 4 倍大きい画像を生成し、後でサイズ変更を行うことです。これにより、サイズ変更の副作用として少し滑らかになります。

于 2012-05-26T13:10:38.247 に答える
0

おそらく、元の「楕円形」の画像を増やして、.ttf をレンダリングし、出力時に小さいバージョンをレンダリングする必要があります。

于 2012-05-26T13:14:48.893 に答える