Autor | Zpráva | ||
---|---|---|---|
Pepicewk Profil * |
#1 · Zasláno: 30. 4. 2013, 12:32:12 · Upravil/a: Moderátor (editace znemožněna) 1. 5. 2013, 11:12:53
Dobrý den,
mám problém s vlastní knihovnou pro práci s obrázky. Když chci uložit obrázek na disk, vše funguje. Pokud ale chci obrázek zobrazit v prohlížeči, obrázek se nezobrazí... Nevíte někdo co by to mohlo způsobovat? class Canvas { protected $canvas = null; protected $width, $height = 0; protected $created = false; protected $textFont = null; protected $textSize = 12; private $qualityPng = 0; private $qualityJpg = 75; /** * Create graphic canvas, class constructor * @param int $width canvas width * @param int $height canvas height */ public function __construct($width, $height) { $c = @imagecreatetruecolor($width, $height); if(!$c) {$this->created = false;} else { $this->canvas = $c; $this->created = true; $this->width = $width; $this->height = $height; $this->color = $this->color(0, 0, 0); } } /** * Destroy graphic canvas, free alocated memory */ public function __destruct() { imagedestroy($this->canvas); } /** * Return image string resource * @return String image resource */ public final function getCanvas() { return $this->canvas; } /** * Get image width * @return int image width */ public final function getWidth() { return $this->width; } /** * Get image height * @param int image height */ public final function getHeight() { return $this->height; } /** * Output image to browser * @param String $type image type (png|jpg|gif) * @param bool $header send header to the browser */ public function createImage($type, $header = false) { if((bool)$header) $this->sendHeader($type); switch(strtolower($type)) { case 'png': imagepng($this->canvas); break; case 'jpeg': case 'jpg': imagejpeg($this->canvas); break; case 'gif': imagegif($this->canvas); break; } } /** * Save image to server * @param String $path URL path to the image for save image * @return bool true if was saved */ public function saveImage($path) { $type = explode('.', $path); $type = end($type); switch(strtolower($type)) { case 'png': {return (bool)imagepng($this->canvas, $path, $this->qualityPng); break;} case 'jpeg': case 'jpg': {return (bool)imagejpeg($this->canvas, $path, $this->qualityJpg); break;} case 'gif': {return (bool)imagegif($this->canvas, $path); break;} } } |
||
peta Profil |
Ptas se na zobrazovani, ale takovy kod tam nikde neni.
Obrazek se ulozi, ale, kdyz si ho zkopirujes pres ftp a na tvem pocitaci se zobrazi? Treba nema priponu nebo tak neco, ne? Z toho kodu se neda poznat, co do class vstupuje, treba path. Chybi tez cela cast, ktera ovlada prevod nejakeho demo obrazku treba ulozenou na disku. Myslim tim, ze tam neni kod, ktery spousti saveImage. Neni tam ani link na soubor ulozeny z toho scriptu, aby jsme se mohli podivat, jaka data to ulozilo. Ve far-manageru pres F4 (edit file). |
||
Tori Profil |
Pepicewk:
Chybí metoda sendHeader (volaná na ř.71, ale možná jste ji vynechal jen tady). Posíláte správné hlavičky do prohlížeče? „Pokud ale chci obrázek zobrazit v prohlížeči, obrázek se nezobrazí“ Zobrazí se něco jiného? Chybové hlášky by se měly někam logovat - kontroloval jste, jestli tam někde není popis nějaké chyby? Jaká je návratová hodnota imagepng a příbuzných funkcí volaných v createImage? |
||
Pepicewk Profil * |
#4 · Zasláno: 30. 4. 2013, 14:25:27 · Upravil/a: Pepicewk
Metoda sendHeader je obsažena, třída obsahuje mnoho metod. Metoda pouze pošle hlavičku.
Při ukládání a stažení z FTP vše funguje. JDe pouze o vstup do prohlížeče. Funkce imagepng vrací správný řetězec... V případě Firefoxu se oběví chybová hláška, že obrázek nelze zobrazit, že je poškozen. U ostatních prohlížečů se zobrazí náhrada za obrázek (taková ta známá ikona) |
||
Camo Profil |
#5 · Zasláno: 30. 4. 2013, 15:45:54
Pepicewk:
Prečo sem nedáš kód tej metódy? Keď som si doplnil metódu sendHeader(a zakometoval volanie color() v konštruktore) tak mi to fungovalo. |
||
Pepicewk Profil * |
#6 · Zasláno: 30. 4. 2013, 22:40:08
public function sendHeader($type) { switch(strtolower($type)) { case 'png': header('Content-Type: image/png'); break; case 'jpeg': case 'jpg': header('Content-Type: image/jpg'); break; case 'gif': header('Content-Type: image/gif'); break; } } |
||
Camo Profil |
Pepicewk:
Myslím, že image/jpeg by malo byť.
EDIT: Ale funguje mi aj ten tvoj kód. Jediné čo tam mením je že zakomentujem metódu color(), lebo ju tu nemáme. Tak ukáž ešte tú. Aj keď ak to ukladá mala by byť v poriadku. Asi by si mal dať celý ten kód. |
||
Pepicewk Profil * |
#8 · Zasláno: 1. 5. 2013, 09:12:47
Díky, opravím na image/jpeg
kód metody color je: public function color($red, $green, $blue) { $this->color = imagecolorallocate($this->canvas, $red, $green, $blue); } |
||
Camo Profil |
Pepicewk:
Neviem ako PHP reaguje na to, že máš v tej triede aj premennú color aj metódu color(). A navzájom to priraďuješ. Takže chyba je možno tam. Ešte je otázne ako potom používaš tú farbu. Nemohol by si dať niekam na internet celý ten script(cez highlight_file("tentosubor.php");)? |
||
Tori Profil |
#10 · Zasláno: 1. 5. 2013, 11:07:27
např. http://pastebin.com/
|
||
Kcko Profil |
Pepicewk:
Kód by měl fungovat, ukaž to komplet i s voláním, jestli si tam nevoláš nějaký jiný výstup, který by to mohl narušovat public function color($red, $green, $blue) { $this->color = imagecolorallocate($this->canvas, $red, $green, $blue); } Tohle je blbost, mělo by to být pouze 1) return imagecolorallocate($this->canvas, $red, $green, $blue);
2) nebo to tak nech ale volání je potom pouze $this->color(0, 0, 0); // mšl by to být setter, setColor->()
A ještě cosi, plátno budeš mít vždy černé, při použití imagecreatetruecolor bys jej musel vyplnit pomocí imagefill
Camo: „Neviem ako PHP reaguje na to, že máš v tej triede aj premennú color aj metódu color(). A navzájom to priraďuješ.“ Rozlišuj pojmy jako je členská proměnná a členská funkce (metoda), pokud o tom nic nevíš, tak si to nejdřív nastuduj, nez začneš mystifikovat. |
||
peta Profil |
Zkus radek s hlavickou zakomentovat a nech si to cele zobrazit jako hatmatilku na obrazovku nebo to uloz do souboru. Pokud obrazek stazeny na ftp funguje, pak je obrazek ok. Pokud ten obrazek jednoduchym php kodem s tou hlavickou zobrazis, pak je to ok.
Predpokladam tedy, ze problem neni v obrazku, ale ostatnim kodu. Jedno echo navic nebo chybova hlaska, a obrazek se nezobrazi. Druhe, co mne napada, ze tam mas html kod a predpokladas ,ze kdyz zmenis header, ze ti to samo k html kodu prida html kod obrazku. Hlavicka ale dela neco jineho. Co treba link na ten obrazek? Ne, ze bych ti neveril, ze je obrazek ok, ale lepsi je si to zkontrolovat sam. background-images - php soubor |
||
Pepicewk Profil * |
#13 · Zasláno: 2. 5. 2013, 17:11:56 · Upravil/a: Pepicewk
zde je celý kód: http://pastebin.com/TfBDqtsq
nevím, najednou to začalo fungovat, nic jsem nezměnil - nevím tedy přoč to funguje :-( napadá mě leda tak něco se serverem, restartovával jsem PC |
||
peta Profil |
#14 · Zasláno: 3. 5. 2013, 09:21:56
Mozna kesovani. Obrazky se obvykle kesuji (server i tvuj pc).
|
||
Časová prodleva: 11 let
|
0