Автор Тема: imagecreate: с динамичен размер на кирилица  (Прочетена 2153 пъти)

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
До скоро не съм ползвал тези възможности на PHP, но в момента ще ми бъдат много полезни. Разбира се търсих готови решения в нета, трябваше ми да може да се генерира картинка с динамичен размер според дължината на текста, намерих подобно нещо но не мога да го накарам излиза текста на български (с други по изчистени скриптове успях да се преборя но не можах да сложа динамичния размер).

Имам следния скрипт:

Код
GeSHi (PHP):
  1. $string = "някакъв текст";
  2.  
  3. $font = 2;
  4. $width = ImageFontWidth($font)* strlen($string);
  5. $height = ImageFontHeight($font);
  6. $im = ImageCreate($width,$height);
  7.  
  8. $x=imagesx($im)-$width ;
  9. $y=imagesy($im)-$height;
  10. $background_color = imagecolorallocate ($im, 242, 242, 242); //white background
  11. $text_color = imagecolorallocate ($im, 0, 0,0);//black text
  12. $trans_color = $background_color;//transparent colour
  13. imagecolortransparent($im, $trans_color);
  14. imagestring ($im, $font, $x, $y, $string, $text_color);
  15.  
  16. header("Content-type: image/gif");
  17. imagegif($im);
  18. ImageDestroy($im);
  19.  

опитах се да направя следното нещо:

Код
GeSHi (PHP):
  1. $string = "някакъв текст";
  2. $string = iconv('cp1251','UTF-8',$string);
  3.  

като разбира се променях енкодинга и на самия файл,
пробвах да го излъжа и със

Код
GeSHi (PHP):
  1. $string = $_GET['string']
за да не взема енкодинга от файла (уж) а да идва директно, не помага.

след малко ровичкане в нета, на http://web-tourist.net/ намерих следната функцика:
Код
GeSHi (PHP):
  1. function cp1251_utf8( $sInput ) // функция за кирилицата иначе ще излизат маймунки
  2. {
  3.  $sOutput = "";
  4.  
  5.  for ( $i = 0; $i < strlen( $sInput ); $i++ )
  6.  {
  7.      $iAscii = ord( $sInput[$i] );
  8.  
  9.      if ( $iAscii >= 192 && $iAscii <= 255 )
  10.          $sOutput .=  "&#38;#".( 1040 + ( $iAscii - 192 ) ).";";
  11.      else if ( $iAscii == 168 )
  12.          $sOutput .= "&#38;#".( 1025 ).";";
  13.      else if ( $iAscii == 184 )
  14.          $sOutput .= "&#38;#".( 1105 ).";";
  15.      else
  16.          $sOutput .= $sInput[$i];
  17.  }
  18.  return $sOutput;
  19. }
  20.  
  21. $string = $_GET['ime'];
  22. $string = trim(cp1251_utf8($string));
  23.  

но и тя не ми помогна, тествах я със изчистен скрип и работи, но при мен излизаха само аски символите

Някакви идеи :)?

Или може би алтернативен скрипт?
« Последна редакция: Aug 09, 2009, 10:40 от RedIce »
Активен

tyuio

  • Гост
Re: imagecreate: с динамичен размер на кирилица
« Отговор #1 -: Aug 09, 2009, 12:20 »
не всяко пхп ползва iconv!
http://mytech.bg/scripts/5/PHP/6/Други/273/Конвертиране+от+CP1251+в+UTF+8
някой са идентични на твоите функции ама...
Друго за мен по важно , защо просто с редактора в който пишеш не конвертираш всички CP1251 файлове в UTF8 ми трябва да го прави рнр?
все пак провери в твоето рнр дали има съпорт на  iconv.
правиш си файла:
Код:
<?php
phpinfo();

?>

и го отваряш в браузер и турсиш дали има някакво изобщо iconv.
Активен

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #2 -: Aug 09, 2009, 15:34 »
Моля ти се, не съм чак толкова зле...

Нали вече казах че въпросните функции работят, но скриптовете там нямат динамичен размер на картинката, не съм чак толкова на вътре за да си направя сам, и ползвам този, но тук вече спира да работи...

Ползвам само UTF8

Все пак:
PHP Version 5.2.9
Apache/2.2.11

iconv:
iconv support  enabled 
iconv implementation  "libiconv" 
iconv library version  1.11

Въпросните функциики от сайта който ми прати не ми помогнаха...
« Последна редакция: Aug 09, 2009, 15:45 от RedIce »
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #3 -: Aug 09, 2009, 17:10 »
Файлът на първия скрипт UTF-8 ли е?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #4 -: Aug 09, 2009, 18:34 »
всичко ми е UTF8

идеята ми  е принципно да взимам инфото от MySQL, и там отново всичко ми е в UTF8.

И принципно от любопитсво... има ли значение какъв е енкодинга на файла ако се ползва $_GET
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #5 -: Aug 09, 2009, 19:10 »
Извинявай, не съм видял, че си опитал с GET.
Кодирането в такъв случай няма значение.

Ползвай  imagettftext, imagettfbbox
« Последна редакция: Aug 09, 2009, 19:12 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #6 -: Aug 10, 2009, 14:13 »
imagettftext свърши работа... всичко е ок :)
Даже минах на imagecreatetruecolor.
Kирилица вече работи но сега имам друг проблем....

Това е текущият код:

Код
GeSHi (PHP):
  1. $string = "някакъв текст";
  2. $string = iconv('cp1251','UTF-8',$string);
  3.  
  4.  
  5. $fontsize = 10;
  6. $font = 'arial.ttf';
  7.  
  8. $width = (ImageFontWidth($fontsize)* strlen($string)); //*тук идва проблема
  9. $height = ImageFontHeight($fontsize);  
  10. $im = imagecreatetruecolor($width,$height);
  11.  
  12. $x=imagesx($im)-$width ;
  13. //$y=imagesy($im)-$height; // Не го ползвам докато намеря решение
  14. $y=$fontsize; //това за момента върши работа
  15.  
  16.  
  17. $black = imagecolorallocate ($im, 0, 0, 0);
  18. $white = imagecolorallocate ($im, 255, 255, 255);
  19. imagefilledrectangle($im,0,0,399,99,$white);
  20. imagettftext($im, $fontsize, 0, $x, $y, $text_color, $font, $string );
  21.  
  22. header ("Content-type: image/png");
  23. imagepng ($im);
  24. imagedestroy($im);


Немога да определя правилната ширина (Width)
Принципно скрипта я изчислява по този начин
$width = (ImageFontWidth($fontsize)* strlen($string))

Но всеки шрифт има различна ширина и това не ми върши работа, опитах се да разделя резултата на нещо си, но няма как величината не може да бъде винаги еднаква.
Пробвах с imageloadfont() за да мога да определя ширината на шрифта, но функцията май не подържа TTF. Всички примери са с .gdf (а и все пак го пробвах, дава грешка)

Някакви идеи или алтернативи?
« Последна редакция: Aug 10, 2009, 14:54 от RedIce »
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #7 -: Aug 14, 2009, 16:02 »
Немога да определя правилната ширина (Width)
Принципно скрипта я изчислява по този начин
$width = (ImageFontWidth($fontsize)* strlen($string))

Но всеки шрифт има различна ширина и това не ми върши работа, опитах се да разделя резултата на нещо си, но няма как величината не може да бъде винаги еднаква.
Пробвах с imageloadfont() за да мога да определя ширината на шрифта, но функцията май не подържа TTF. Всички примери са с .gdf (а и все пак го пробвах, дава грешка)

Някакви идеи или алтернативи?

Мдам ;)
...
Ползвай  imagettftext, imagettfbbox

http://bg2.php.net/imagettfbbox

Цитат
Description
array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )

This function calculates and returns the bounding box in pixels for a TrueType text.

 :P
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Re: imagecreate: с динамичен размер на кирилица
« Отговор #8 -: Aug 16, 2009, 06:48 »
мерси, ще го пробвам утре :)
Активен