Avatar billede hoppe11 Nybegynder
30. marts 2008 - 19:28 Der er 6 kommentarer og
1 løsning

GD lib fejl ved PNG

jeg har et script her

<?
header('content-type: image/jpeg');

$quality = 50;

$src_img = imagecreatefrompng(stripslashes($_GET['image']));

$src_width = imagesx($src_img);
$src_height = imagesy($src_img);

$scale = $src_height / $_GET['height'];
$dst_width = $src_width / $scale;
$dst_height = $src_height / $scale;

if($_GET['width'] < $dst_width)
{
    $scale = $dst_width / $_GET['width'];
    $dst_width = $dst_width / $scale;
    $dst_height = $dst_height / $scale;
}

$dst_img = imagecreatetruecolor($dst_width, $dst_height);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height);

imagejpeg($dst_img, '', $quality);
imagedestroy($dst_img);
?>

hvis jeg ændrer følgende får jeg fejl:

header('content-type: image/jpeg');
til
header('content-type: image/png');

og

imagejpeg($dst_img, '', $quality);
til
imagepng($dst_img, '', $quality);

fejlen ligger åbenbart i linjen med imagepng() ??
Avatar billede pidgeot Nybegynder
30. marts 2008 - 19:41 #1
Der er ingen "$quality" når det gælder PNG - det er kun JPG der har den parameter, grundet at formatet ikke er tabsfrit.
Avatar billede yHec Novice
30. marts 2008 - 21:09 #2
Det er nu ikke helt rigtigt, pidgeot, imagepng tager faktisk en quality-parameter, men hvor den ligger mellem 0 og 100 for jpg, ligger den mellem 0 og 9 for png.

Så lav en linje der hedder $quality_jpg=50; og en der hedder $quality_png=5;

Så burde det virke.

/y
Avatar billede hoppe11 Nybegynder
30. marts 2008 - 21:30 #3
y > det var da noget underligt noget med forskellige intervaller ved parametrene :-/

men smid et svar og tak for hjælpen
Avatar billede pidgeot Nybegynder
30. marts 2008 - 21:53 #4
Fair nok - jeg kan se den er tilføjet efter jeg sidst arbejdede med billeder i PHP, så det kunne forklare hvorfor jeg mente den ikke var der *-)

Hoppe: Det er to vidt forskellige algoritmer, og derfor kan de ikke sammenlignes på den måde.

For at det ikke skal være løgn, så er øst for JPG's quality, det der svarer til vest for PNG's - 0 i JPG er meget kraftig komprimering, mens 0 i PNG resulterer i ingen komprimering (tilsvarende er 100 mindst mulig komprimering for JPG, mens 9 er maksimal komprimering for PNG).

I og med at PNG altid er tabsfri, kan du overveje at bruge 9 til PNG for at spare lidt på filstørrelsen.
Avatar billede yHec Novice
30. marts 2008 - 22:46 #5
Svar
Avatar billede hoppe11 Nybegynder
30. marts 2008 - 23:58 #6
pidgeot >

hvis png ikke er tabsfri, hvad er ideen så i at have en komprimering? :)
Avatar billede pidgeot Nybegynder
31. marts 2008 - 00:32 #7
Jeg går ud fra at du mente hvad ideen er når den nu den ER tabsfri...

Grunden er såmænd ganske enkel: Når vi har med internetbrug at gøre, vil det normalt være på sin plads at bruge så lidt båndbredde som muligt - derfor er vi typisk interesserede i at få komprimeret så meget som muligt, og ved at angive 9 som komprimeringsgrad, opnår vi netop det (ganske vist på bekostning af lidt flere systemressourcer, men det kan man normalt bedre leve med).

I andre situationer - eks. spil - er det måske mere relevant at få noget der kræver færre ressourcer at afkode, og så leve med at billedet kræver lidt mere diskplads - så ville en komprimeringsgrad på 3 eller 4 måske passe godt, alt efter behov.

Det er faktisk lidt det samme med diverse pakkeprogrammer - de kan også komprimere mere eller mindre kraftigt, mod så at tage mere eller mindre tid - og faktisk benyttes komprimeringsalgoritmen til PNG også til diveres pakkeformater, såsom ZIP *-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester