Jump to content
php.lv forumi

imagettftext(), imagettfbox() problēmas


Kaklz

Recommended Posts

Tātad situācija sekojoša. Mums ir lapa, kurai dizaina nolūkos virsrakstiņus automātiski ģenerējam ar PHP GD libu. Izmantojam funkciju imagettftext.

 

Viss būtu skaisti un jauki, taču ir pāris problēmas.

 

*) Cilvēkiem ir tieksme ierakstīt garus dokumentu nosaukumus, līdz ar ko arī bildītes iznāk pārāk garas un lien ārā no dizaina.

 

Teorētiski varētu ņemt un taisīt kaut kādu maģisku word-wrap iespēju. Nebūt jau nemaz tik sarežģīti, ņemam imagettfbox, apskatāmies, cik sanāk izmērs vajadzīgajam tekstam un tad attiecīgi uzģenerējam korektu bildīti ar tekstu.

 

Taču ir viena neliela problēma, kas mani tracina.

 

Paņemam ar imagettfbox funkciju izmērus, uzveidojam bildīti, ieliekam tekstu, saglabājam un skatamies bildīti. Bildītei viss ir ok, tikai vienīgā nelaime, ka imagettfbox izmērus ir aprēķinājis par lielu - augstumā viss ir kārtībā, bet platumā sanāk savi 0 - 75px par daudz atkarībā no teksta garuma.

 

Varbūt kādam ir kādas idejas, kas viņam varētu nepatikt?

 

Funkcija apmeeram shitaada:

function first_page_title($id, $text){
 $text = iconv('ISO-8859-13', 'UTF-8', $text);
 $arr = imagettfbbox ( 16, 0, FONTS_DIR . 'georgiai.ttf', $text);
 $arr = fixbbox($arr);
 $im = imagecreate($arr['width'], $arr['height']);
 $orange = imagecolorallocate($im, 245, 131, 47);
 $white = imagecolorallocate($im, 255, 255, 255);
 imagefill($im, 0, 0, $white);
 imagettftext($im, 16, 0, 3, $arr['height'] - 8, $orange, FONTS_DIR . 'georgiai.ttf', $text);
 imagepng($im, TITLES_DIR . $id . '.png');
 imagedestroy($im);
}

function fixbbox($bbox){
   $xcorr=0-$bbox[6]; //northwest X
   $ycorr=0-$bbox[7]; //northwest Y
   $tmp_bbox['left']=$bbox[6]+$xcorr;
   $tmp_bbox['top']=$bbox[7]+$ycorr;
   $tmp_bbox['width']=$bbox[2]+$xcorr;
   $tmp_bbox['height']=$bbox[3]+$ycorr;
   return $tmp_bbox;
}

Link to comment
Share on other sites

nez, kaut kas pašam bija sajucis, tagad viss iet. Tā kā ja nu vajag kādam, tad teorētiski augstāk minētais piemērs ir ejošs. (protams, attiecīgi nodefinējot fontu direktoriju un citas lietas, kas tur vajadzīgas :))

Link to comment
Share on other sites

×
×
  • Create New...