Autor | Zpráva | ||
---|---|---|---|
Martin R. Profil * |
#1 · Zasláno: 9. 2. 2010, 11:54:23
Jednoduchý skript na vložení textu do obrázku pomocí fce imagettftext. Font Arial.ttf mám ve stejném adresáři jako skript. Na lokále (windows PHP Version 5.3.0) se to chová jak má, ale na webhostingu (Linux PHP Version 5.2.12-pl0-gentoo) se diakritika nezobrazí (pouze standardní čtverečky). Snažil jsem se porovnat phpinfo, gd2 je stejné, vše enabled. Nějaký tip, kterým nastavením nebo chybou skriptu by to mohlo být?
<?php putenv('GDFONTPATH=' . realpath('.')); iconv_set_encoding('internal_encoding', 'utf-8'); class SimpleImage { private $image; private $imageNew; private $image_type; private $font = './Arial.ttf'; function __construct() { } function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if ($this->image_type == IMAGETYPE_JPEG) { $this->image = imagecreatefromjpeg($filename); } elseif ($this->image_type == IMAGETYPE_GIF) { $this->image = imagecreatefromgif($filename); } elseif ($this->image_type == IMAGETYPE_PNG) { $this->image = imagecreatefrompng($filename); } } function save($filename, $image_type=IMAGETYPE_JPEG, $compression=80, $permissions=null) { if ($this->image_type == IMAGETYPE_JPEG) { imagejpeg($this->image, $filename, $compression); } elseif ($this->image_type == IMAGETYPE_GIF) { imagegif($this->imageNew, $filename); } elseif ($this->image_type == IMAGETYPE_PNG) { imagepng($this->imageNew, $filename); } } function getWidth() { return imagesx($this->image); } function getHeight() { return imagesy($this->image); } function vodotiskVpravoDole($string) { $width = 10 * strlen($string) ; $height = 14; //ImageFontHeight($this->font); $im = $this->image; $x = $this->getWidth() - $width - 10; $y = $this->getHeight() - $height - 10; $background_color = imagecolorallocate ($im, 255, 255, 255); //white background $text_color = imagecolorallocate ($im, 0, 0,0);//black text imagettftext($im, '14', '0', $x, $y, $text_color, $this->font, $string); $this->image = $im; } } if (isset($_POST['ulozit'])) { $image = new SimpleImage(); $image->load($_FILES['obrazek']['tmp_name']); $image->vodotiskVpravoDole("příliš žluťoučký kůň"); $image->save('new.jpg'); } ?> <form action="" method="post" enctype="multipart/form-data" name="formular" > <fieldset> <legend>Vyberte fotografii</legend><br /> <input type="file" name="obrazek" value="vloz_obr" /> </fieldset><br /> <input type="hidden" name="ulozit" value="ulozit" /> <input type="submit" name="ulozit" value="ulozit" /> <br /> </form> <?php if (is_file('new.jpg')) { echo "<img src=\"new.jpg\" title=\"test\" alt=\"test\" />"; } ?> |
||
AM_ Profil |
#2 · Zasláno: 9. 2. 2010, 16:33:42
Martin R.:
Nestačí použít iconv_set_encoding (možná to dokonce ani není nutné, důležité je, aby soubory byly v utf-8, jestli se nemýlím. |
||
martinR Profil * |
#3 · Zasláno: 9. 2. 2010, 17:54:48
AM:
iconv_set_encoding jsem zkusil použít, protože už nevím co bych. Soubory jsou v utf-8. Jak říkám, na lokálním serveru se diakrtitika v obrázku zobrazí, na webhostingu ne. Problém bude spíš v konfiguraci serveru... asi teda :( |
||
vynalezce Profil |
#4 · Zasláno: 9. 2. 2010, 18:52:18
zkus prijmout vypisovany text pres GET / POST pokud se zobrazi spravne, kodem to neni
|
||
AM_ Profil |
#5 · Zasláno: 9. 2. 2010, 18:57:10
jediné další co mě napadá je jestli se soubor opravdu jmenuje Arial.ttf s velkým A - to může být ten rozdíl, windows nemá case-sensitive názvy souborů, linux ano.
|
||
martinR Profil * |
#6 · Zasláno: 9. 2. 2010, 23:08:17
vynalezce:
Takže, zkusil jsem zobrazit hlášky přes POST i js a zobrazují korektně. Pro mě testovací hosting webzdarma zobrazuje diakritiku jak potřebuju http://sampion.borec.cz/images.php Na hostingu pipni.cz, taky ok. Jediný a zásadní problém tak pro mě zůstává cesky-hosting.cz http://sampion.borec.cz/kua.jpg ... kde ne a ne rozjet češtinu. Klidně bych se obrátil i na podporu, ale nevím, jaké parametry vlastně potřebuji přenastavit. |
||
Alphard Profil |
#7 · Zasláno: 9. 2. 2010, 23:33:41
Z manuálu:
The text string in UTF-8 encoding. May include decimal numeric character references (of the form: €) to access characters in a font beyond position 127. The hexadecimal format (like ©) is supported. Strings in UTF-8 encoding can be passed directly. Named entities, such as ©, are not supported. Consider using html_entity_decode() to decode these named entities into UTF-8 strings (html_entity_decode() supports this as of PHP 5.0.0). If a character is used in the string which is not supported by the font, a hollow rectangle will replace the character. 1. Zkusil jste zadat řetězec stylem 8364;? 2. Script na http://sampion.borec.cz/kua.jpg je předpokládám zkušební a omezený pouze na výpis textu. Je prokazatelně v utf-8? (Na to jste již odpovídal vynalezci, ale je to zásadní.) |
||
martinR Profil * |
Alphard:
1. Nezkusil.. ale zkusím 2. Vzhledem k tomu, že jsem na pořád začátku mé cesty za PHP nejsem si tak úplně jistý .. v editoru (phpedit) má soubor nastaveno a zobrazuje utf-8 kódování. Nebo jde ještě o něco jiného? Obrázek kua.jpg je část printscreenu z "cekeho webhostingu", kde jedině mi tohle nefunguje (na dvou jiných hostinzích nemam problém). Přídám ještě odkaz na aktuální zdrojový soubor, který je spouštěn v images.php http://sampion.borec.cz/images.txt Moderátor Chamurappi: Neumíš napsat odkaz jako odkaz? Do [pre] patří zdrojové kódy.
|
||
Časová prodleva: 4 měsíce
|
|||
Endeer Profil * |
#9 · Zasláno: 12. 6. 2010, 13:28:17
Tak jsem na to taky narazil, pokusil jsem se porovnat konfiguraci PHP mezi hostingem kde to šlo a kde ne a zřejmě je viníkem --enable-gd-jis-conv, podpora japonštiny u Českého hostingu. Ověřil jsem to na svém počítači na PHP 5.2.13/Slackware 13.
Tož doufám že to někdy někomu pomůže vybrat si hosting předem. |
||
Časová prodleva: 13 let
|
0