我正在从现有的png生成一个简单的图像并向其添加文本。但质量很差,结果很糟糕,见here。结果不一定是超高质量,只是比它更好一点。我一定做错了,因为这很糟糕。任何建议都会很棒。
非常感谢,
托德
// 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 ;
答案 0 :(得分:2)
GD的文字功能不会对他们正在绘制的文字进行抗锯齿处理。最简单的方法是将图像生成至少比最终产品大2倍或4倍,然后再调整大小,这样可以在调整大小时产生一些影响。
答案 1 :(得分:0)
也许您需要增加原始的'椭圆'图像,在此图像上渲染.ttf并在输出上渲染较小的版本。