Vấn đề là khi sử dụng imagettfbbox
để tính kích thước văn bản, hình chữ nhật quá nhỏ được trả về khi văn bản đầu vào bắt đầu bằng số. Đây là mã của tôi:imagettfbbox tính hình chữ nhật sai khi văn bản bắt đầu bằng số
$fontSize = 150;
$font = "font/courier_new.ttf";
$text = $_GET["text"];
//Determine font dimensions
$bbox = imagettfbbox($fontSize, 0, $font, $text);
$bbox["width"]= abs($bbox[4]-$bbox[0]);
$bbox["height"]= abs($bbox[5]-$bbox[1]);
$im = imagecreatetruecolor($bbox["width"], $bbox["height"]);
echo "<b>Image size:</b>\n";
print_r($bbox);
// This part makes transparent background
imagesavealpha($im, true);
$bg = imagecolorallocatealpha($im, 254, 254, 254,127);
$text_color= imagecolorallocate($im, 0, 0, 0);
imagealphablending($im, false);
imagefilledrectangle($im, 0, 0, imagesx($im), imagesy($im), $bg);
imagealphablending($im, true);
header("X-Img-Size: ".$bbox["width"]."x".$bbox["height"]."");
imagettftext($im, $fontSize, 0, 0, $bbox["height"], $text_color, $font, $text);
// This is output
header("Content-Type: text/html");
ob_start();
imagepng($im);
$image_data = ob_get_contents();
ob_end_clean();
imagedestroy($im);
echo "<img src=\"data:image/png;base64,".base64_encode($image_data)."\" />";
Đây là những kết quả tôi nhận được cho nhập văn bản khác nhau:
Làm cách nào để khắc phục điều đó?
này dường như là một vấn đề được biết đến; xem http://php.net/manual/en/function.imagettfbbox.php, đặc biệt. Câu trả lời của 'peterjwest3' với bản sửa lỗi được đề xuất. Tác giả của hàm phải có một số phím tắt ... Có vẻ như sử dụng ['FT_BBox'] (http://www.freetype.org/freetype2/docs/reference/ft2-basic_types.html#FT_BBox), ngoại trừ điều này * sẽ * "cung cấp cho descender của glyph" một cách chính xác. – usr2564301
@ TomášZato - bạn đã đi đến http://php.net/manual/en/function.imagettfbbox.php và đọc qua các cách giải quyết được đề xuất, đặc biệt. từ "mike at mikeleigh dot com" từ 8 năm trước? Nếu có thì có lý do nào đó giải pháp/giải pháp được đề xuất của anh ấy sẽ không giải quyết được sự cố bạn đang gặp phải không? –
@BobJarvis Tôi không thể thề là tôi đã sử dụng mọi cách giải quyết ở đó, nhưng đoạn mã này đã áp dụng một số mã gợi ý - những phương trình cho chiều rộng và chiều cao đến từ trang đó. Tôi sẽ thử cách giải quyết chính xác mà bạn đã đề cập. –