Portál AbcLinuxu, 14. května 2025 00:45

Dotaz: PHP - zmenšování obrázků

FrostyX avatar 31.3.2010 14:03 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
PHP - zmenšování obrázků
Přečteno: 1053×
Odpovědět | Admin
Příloha:

Ahoj, stáhl jsem si takovou funcki pro zmenšování obrázků, aby se na server neuploadoval obrázek o velikosti třeba 1MB. Fungovala jen pro jpg, tak se ji snažím rozšířit ještě pro png a gif. Celou funkci jsem dal do přílohy.

Mám takový problém, že nefunguje zmenšování png obrázku. Skončí to chybovou hláškou:

Warning: imagecreatefrompng() [function.imagecreatefrompng]: 'img/thumb/dad.png' is not a valid PNG file in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 49

Warning: imagecopyresampled() expects parameter 2 to be resource, boolean given in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 56

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor -- stream error in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 59

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 59

Nebo občas jen tímto:

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor -- stream error in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 59

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in C:\Program Files\EasyPHP5.3.0\www\upload_obrazku\zmenseni_obrazku.php on line 59

Obrázky ve formátu gif a jpg normálně fungují - nejde jen ten png. Nevíte nekdo co s tím ?

FrostyX.cz | 1984 was not supposed to be an instruction manual.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.3.2010 14:06 chrono
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Odpovědět | | Sbalit | Link | Blokovat | Admin
A aj si zisťoval, či tie obrázky sú naozaj png (a nie len majú takú príponu) a nie sú poškodené?
FrostyX avatar 31.3.2010 14:20 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Bohužel po ruce nemám linux, ale normálně jsem zkoušel v malování vytvořit nový soubor, uložil ho jako png a zkusil zmenšit. Vyhodilo mi to tu kratší hlášku (tu druhou).
FrostyX.cz | 1984 was not supposed to be an instruction manual.
31.3.2010 14:23 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Není možný, že s tím soubrem ještě někde jinde něco děláš? Jako např. že ho v PHP zapisuješ a ve fopen zapomeneš nastavit binární flag...
FrostyX avatar 31.3.2010 14:33 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Mno ten obrázek nahrávám do složky, a potom v ní zmenšuju. Ale v tom uploadovacím scriptu by chyba být neměla, když jpg a gif jde ne ? ... Chyba bude někde v tom zmenšení ne ?
FrostyX.cz | 1984 was not supposed to be an instruction manual.
31.3.2010 14:57 chrono
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tie chyby pri funkcii imagepng spôsobuje to, že ako parameter pre kvalitu tam máš číslo 100 (pri png tam môže byť maximálne 9).

Tú chybu pri imagecreatefrompng (nasledujúce s ňou súvisia) ale spôsobuje pravdepodobne to, že to nie je png obrázok, alebo to, že je poškodený. Čiže ideálne by najskôr bolo zistiť si o tom obrázku nejaké informácie a až potom ho ďalej spracovávať (a nespoliehať sa na to, že prípona je správna). Ak sa nemýlim, tak v php sa na také účely používa funkcia getimagesize.
FrostyX avatar 31.3.2010 15:29 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Ano, díky moc. Chyba byla v té kvalite. Všechno vyřešila následující úprava:
if($format=='png')
{
   $fce = 'image'.$format;
   $fce($image_p, $copypath, 9);
   unset($fce);
}
else
{
   $fce = 'image'.$format;
   $fce($image_p, $copypath, 100);
   unset($fce);
}
FrostyX.cz | 1984 was not supposed to be an instruction manual.
finc avatar 31.3.2010 16:44 finc | skóre: 8 | blog: Finc | Kolín
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků

Nechci byt stoural, ale neslo by to napsat alespon nejak takto?

 
$fce = 'image'.$format; 
$fce($image_p, $copypath, ($format == 'png' ? 9 : 100)); 
unset($fce); 

Kdo Vam dal pravo ty lidi urazet? A kdo ti dal pravo cumet z okna, ty kr.vo!
FrostyX avatar 31.3.2010 19:26 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - zmenšování obrázků
Mno to je podstatně lepší, než má varianta. Díky
FrostyX.cz | 1984 was not supposed to be an instruction manual.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.