Возникает проблема при выводе текста на изображении, когда текст написан на "иврите". На иврите пишут с права налево, а координаты текста в ImageTTFText(); определяются по левому углу, и при написании нескольких слов одно под другим, слова выравниваются по левому углу, а нужно по правому. Пожалуйста подскажите что можно сделать? код: Код (Text): $image = "backround.jpg"; $coin = imagecreatefromjpeg($image); $font="david.ttf"; $black = ImageColorAllocate ($coin, 0, 0, 0) ; $text="םולש רשוכו רשוא הברה חמש גח הבוט נהש יביב"; ImageTTFText ($coin, 70, 0, 50, 200, $black, $font ,$text); imagejpeg($coin,"new.jpg"); ImageDestroy ($coin);
http://440hz.ru/trash/flip/ PHP: <? // 2006 (c) 440hz // отражение картинки по вертикали function imageflipvertical(&$img) { $size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($size_x, $size_y); $rc = imagecopyresampled($temp, $img, 0, 0, 0, ($size_y-1), $size_x, $size_y, $size_x, 0-$size_y); if ($rc) { $img = $temp; } else { die("Unable to vertical flip image"); } } // отражение картинки по горизонтали function imagefliphorizontal(&$img) { $size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($size_x, $size_y); $rc = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y); if ($rc) { $img = $temp; } else { die("Unable to horizontal flip image"); } } // дубликат function imageduplicate($img) { $size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($size_x, $size_y); $rc = imagecopyresampled($temp, $img, 0, 0, 0, 0, $size_x, $size_y, $size_x, $size_y); if ($rc) { return $temp; } else { die("Unable to duplicate image"); } } // изменить размеры function imageresize(&$img,$w,$h) { $size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($w, $h); $rc = imagecopyresampled($temp, $img, 0, 0, 0, 0, $w, $h, $size_x, $size_y); if ($rc) { $img = $temp; } else { die("Unable to resize image"); } } // собстенно сами хлопоты // получаем источик $me = 'me.jpg'; $src = imagecreatefromjpeg($me); $mw = imagesx($src); $mh = imagesy($src); // дублируем $dst = imageduplicate($src); // делаем в 2 раза меньше $w = imagesx($dst)/2; $h = imagesy($dst)/2; imageresize($dst,$w,$h); // отражаем imagefliphorizontal($dst); // рисуем $x = 0; $y = ($mh-$h); imagecopyresampled($src, $dst, $x, $y, 0, 0, $w, $h, $w, $h); // выводим imagejpeg($src); ?
ступил. в данном случае нужно делать как сказал vasa_c. руками все высчитывать. Флип тут не поможет. а зашли мне фонт на мыло и пример текста. поковыряюсь на досуге. пригодится.
vasa_c подумал и решил, что то что он сказал тоже фигня ) ИМХО лучше сначала перевернуть строку, а потом уже ее просто вывести.
Я имею ввиду строку сначала перевернуть. "Была строка", а стала — "акортс алыБ" а потом вывести ее. Хотя я иврита не знаю и как шрифты там устроены тоже, так что может это не сработает.
Только вычислять не координаты каждой буковки, а координаты начала строки. Для вычисления длины строки можно использовать функцию http://php.net/imagettfbbox
тогда я не понял чем трудность? вычисляешь длину строки и выводишь с нужным смещением относительно правого края.
спасибо за подсказки! наконецто смастерил вот моё творение Код (Text): function text_convert($image,$text,$color,$font,$font_size,$margin,$x,$y) { $text=@preg_replace("/([\xE0-\xFA])/e","chr(215).chr(ord(\${1})-80)",hebrevc($text)); $s=explode("<br />",$text); for ($i=0;$i<count($s);$i++) { if($i>1) $y=$y+$margin; $size = imagettfbbox($font_size, 0, $font, $s[$i]); $dx = abs($size[2]-$size[0]); ImageTTFText($image, $font_size, 0, $x-$dx, $y, $color, $font, $s[$i]); } } $image = imagecreatefromjpeg("backround.jpg"); $text = "שלום לכולם אחלה בסדר גמור, וסימחה טורה שנה טובה"; $color= ImageColorAllocate ($image, 0, 0, 0) ; $font = "david.ttf"; $font_size = 15; $margin = 20; $x = 400; $y = 15; text_convert($image,$text,$color,$font,$font_size,$margin,$x,$y); imagejpeg($image); ImageDestroy ($image);