ฉันกำลังพยายามเขียนสคริปต์ที่สร้างรูปภาพ PNG จากข้อความ ขนาด และแบบอักษรที่ได้รับในอาร์กิวเมนต์ $_GET แต่ฉันไม่สามารถทราบวิธีทำให้ขนาดของรูปภาพพอดีกับข้อความทุกประการ ฉันใช้ imagettfbox อยู่แล้ว:
$widthPx = abs($ttfBox[2] - $ttfBox[0]);
$heightPx = abs($ttfBox[1] - $ttfBox[7]);
ซึ่งอาจทำให้ฉันวัดได้ถูกต้อง แต่เมื่อฉันวาดข้อความ มันออกนอกขอบเขตนิดหน่อย ตัวอย่างเช่น หากฉันพยายามวาด "a" โดยใช้ arial.ttf มันจะอยู่นอกขอบเขตอย่างน้อย 5 พิกเซล มีวิธีวาดข้อความแบบอักษรให้พอดีกับภาพโดยไม่ต้องทดสอบหรือไม่?
$text = $_GET["text"];
$cmToPixel = 15.0;
$sizeCm = floatval($_GET["sizeCm"]);
$sizePx = $cmToPixel * $sizeCm;
$fontFile = "fonts/".pathinfo($_GET["font"])["filename"].".".pathinfo($_GET["font"])["extension"];
if(!file_exists($fontFile)){
die;
}
$ttfBox = imagettfbbox($sizePx, 0, $fontFile, $text);
$widthPx = abs($ttfBox[2] - $ttfBox[0]);
$heightPx = abs($ttfBox[1] - $ttfBox[7]);
$image = ImageCreate($widthPx, $heightPx);
$x = $ttfBox[0] + (imagesx($image)-$ttfBox[4] )/ 2 - 0;
$y = $ttfBox[1] + (imagesy($image) / 2) - ($ttfBox[5] / 2) - 5;
ImageRectangle($image,0,0,imagesx($image),imagesy($image), ImageColorAllocate($image,255,255,255));
imagettftext($image, $sizePx,0,$x,$y, ImageColorAllocate($image, 0, 0, 0), $fontFile, $text);
header("Content-Type: image/png");
ImagePng($image);
ImageDestroy($image);