19. juni 2006 - 00:42
Der er
45 kommentarer
imagecopy() kvalitet
Jeg bruger følgende kode til at tage en lille stump af et billede, som jeg bruger som en slags "ikon" på min hjemmeside: <? $url = $_GET[url]; $imagetype = exif_imagetype($url); if($imagetype == "3") { $sti = imageCreateFromPng("$url"); $billede_klippet = imagecreatetruecolor(120, 110); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopy($billede_klippet, $sti, 0, 0, 120, 110, 295, 295); touch($billede_klippet); header("Content-type: image/png"); ImageJPEG($billede_klippet); ImageDestroy($billede_klippet); } elseif($imagetype == "2") { $sti = imageCreateFromJpeg("$url"); $billede_klippet = imagecreatetruecolor(120, 110); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopy($billede_klippet, $sti, 0, 0, 120, 110, 295, 295); touch($billede_klippet); header("Content-type: image/jpeg"); ImageJPEG($billede_klippet); ImageDestroy($billede_klippet); } elseif($imagetype == "1") { $sti = imageCreateFromGif("$url"); $billede_klippet = imagecreatetruecolor(120, 110); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopy($billede_klippet, $sti, 0, 0, 120, 110, 295, 295); touch($billede_klippet); header("Content-type: image/gif"); ImageJPEG($billede_klippet); ImageDestroy($billede_klippet); } else { echo $imagetype; } ?> Jeg er bare utilfreds med kvaliteten af de billeder den "spytter ud"! Hvordan kan jeg gøre den bedre?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
touch($billede_klippet); kan du med garanti slette fra dem alle, den gør absolut intet i dit script... Og prøv imagecopyresampled istedet for imagecopy, og til sidst lave en cache af de billeder, det der tager meget CPU at lave.
ImageJPEG($billede_klippet, 100); 100 er bedste kvali, 0 dårligste
Og som efter default er ca 75, vil jeg væde min gamle hat man ikke kan se nogen forskel på det ene eller det andet (med mindre man kigger på fil størrelsen)
Plus det var generalt og ikke kun til JPEG der efterlyses...
showsource - Hvis jeg tilføjer det, vises billedet ikke :/ iss - Hermed gjort.. Det er sammenstykket af en kode jeg fandt på php.net :/
Altså jeg fjernede touch.. Resten sidder jeg og prøver :)
Foruden iss's ændringer, så prøv at bruge ini_set('error_reporting', E_ALL); i toppen af den fil hvor billedet laves. For at få vist ALLE fejlmeddelser. Og, det er vist rigigt, det er kun et spm. om filstr. i den sidste ende. Ikke "kigge kvalitet"
Det gør jeg så. Jeg forsøger lige lidt med imagecopyresampled i stedet for imagecopy, poster tilbage om lidt.
Nu bruger jeg denne kode:
<?
ini_set('error_reporting', E_ALL);
$url = $_REQUEST[url];
$imagetype = exif_imagetype($url);
if($imagetype == "3") {
$sti = imageCreateFromPng("$url");
$billede_klippet = imagecreatetruecolor(120, 110);
$bredde = imagesx($sti);
$hoejde = imagesy($sti);
imagecopy($billede_klippet, $sti, 0, 0, 120, 110, 295, 295);
header("Content-type: image/png");
ImageJPEG($billede_klippet);
ImageDestroy($billede_klippet);
} elseif($imagetype == "2") {
$sti = imageCreateFromJpeg("$url");
$billede_klippet = imagecreatetruecolor(120, 110);
$bredde = imagesx($sti);
$hoejde = imagesy($sti);
imagecopyresampled($billede_klippet, $sti, 0, 0, 120, 110, 295, 295, 295, 295);
header("Content-type: image/jpeg");
ImageJPEG($billede_klippet);
ImageDestroy($billede_klippet);
} elseif($imagetype == "1") {
$sti = imageCreateFromGif("$url");
$billede_klippet = imagecreatetruecolor(120, 110);
$bredde = imagesx($sti);
$hoejde = imagesy($sti);
imagecopy($billede_klippet, $sti, 0, 0, 120, 110, 295, 295);
header("Content-type: image/gif");
ImageJPEG($billede_klippet);
ImageDestroy($billede_klippet);
} else {
echo $imagetype;
}
?>
Og fejl på dette link:
http://momex.dk/artikler/img/billeder.php?url=http://www.momex.dk/images/andet/6.jpg Jeg benytter altså kun jpg-delen af billeder.php
19. juni 2006 - 01:43
#10
$url = $_REQUEST[url]; skal være $url = $_REQUEST["url"];
19. juni 2006 - 01:44
#11
For ikke at få fejmeddelse, altså!:O) men er ikke helt med på den med at bruge ImageJPEG() uanset hvilket type billede du har i header()
19. juni 2006 - 01:44
#12
Har det så hjulpet på kvaliteten? :/ Har enormt dårlige øjne.. Men synes jeg kan ane noget grums? :/
19. juni 2006 - 01:46
#13
Nej nej, det gør jeg da heller ikke. Jeg har jo netop lavet 3 forskellige "funktioner" alt efter hvilken type billede der er tale om.
19. juni 2006 - 01:53
#15
Det kan ikke blive bedre kvalitet end det nuværende på nogen måde? (Møg ting at arbejde med, når man ikke selv kan se hvor godt det er :/)
19. juni 2006 - 01:54
#16
Lav om til PNG/GIF, de er ikke komprimeret.
19. juni 2006 - 01:57
#17
well, før fik jeg bare tegnene som billedet består af. (nok p.g.a. af fejlmeddelse) Nu er der et billede og der er ingen forskel at se på dit link, og iss's link. Og godnat!
19. juni 2006 - 01:57
#18
Så gør jeg bare det inden jeg uploader dem :) Svarer du, iss?
19. juni 2006 - 02:09
#19
Har ikke lige prøvet dette, men du kan jo kigge på det:
<?
$url = $_REQUEST['url'];
$imagetype = exif_imagetype($url);
$billede_klippet = imagecreatetruecolor(295, 295);
$bredde = imagesx($sti);
$hoejde = imagesy($sti);
if($imagetype == "3") {
$sti = imagecreatefrompng($url);
imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295);
header("Content-type: image/png");
imagepng($billede_klippet);
imagedestroy($billede_klippet);
}
elseif($imagetype == "2") {
$sti = imagecreatefromjpeg($url);
imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295);
header("Content-type: image/png");
imagepng($billede_klippet);
imagedestroy($billede_klippet);
}
elseif($imagetype == "1") {
$sti = imagecreatefromgif($url);
imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295);
header("Content-type: image/png");
imagepng($billede_klippet);
imagedestroy($billede_klippet);
}
else {
echo $imagetype;
}
?>
Plus grunden til der ikke er foreskel på
http://momex.dk/artikler/img/billeder.php?url=/mounted-storage/home20b/sub003/sc20585-UYKJ/momex.dk/images/andet/6.jpg og
http://momex.dk/artikler/img/billeder.php?url=http://www.momex.dk/images/andet/6.jpg er at det er det samme billes, det ene hentes bare hurtigere fordi PHP ikke skal lave en http connection for at hente billedet... Så hvis billederne alle ligge i samme bibliotek, så skriv stien i din kode:
$url = "/mounted-storage/home20b/sub003/sc20585-UYKJ/momex.dk/images/andet/".$_REQUEST['url'];
Så kalder du det bare med
http://momex.dk/artikler/img/billeder.php?url=6.jpg Hvad angår svar så får du ikke noget fra mig, behold dine point selv.
19. juni 2006 - 02:14
#20
19. juni 2006 - 02:15
#21
Ups: $bredde = imagesx($sti); $hoejde = imagesy($sti); Skal ikke flyttes ud...
19. juni 2006 - 02:17
#22
Altså sådan her: <? $url = $_REQUEST['url']; $imagetype = exif_imagetype($url); $billede_klippet = imagecreatetruecolor(295, 295); if($imagetype == "3") { $sti = imagecreatefrompng($url); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "2") { $sti = imagecreatefromjpeg($url); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "1") { $sti = imagecreatefromgif($url); $bredde = imagesx($sti); $hoejde = imagesy($sti); imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } else { echo $imagetype; } ?> Den melder stadig fejl, men dog en ny en ;) på linie 19..
19. juni 2006 - 02:18
#23
wrong parameter count må da betyde at der ikke er det rigtige antal parametre :/ Det er der altså..
19. juni 2006 - 02:22
#24
imagecopyresampled($billede_klippet, $sti, 0, 0, 0, 0, 295, 295, $bredde, $hoejde); Skal de vist alle tre hedde.
19. juni 2006 - 02:24
#25
Det virker - nu gør den bare noget helt andet end det den skal :) Den skal ikke formindske billedet, men tage en lille firkant af billedet og så kun vise den. :)
19. juni 2006 - 02:29
#26
Slet alle $bredde = imagesx($sti); $hoejde = imagesy($sti); Når nu du ikke bruger dem, i imagecopyresampled($billede_klippet, $sti, 0, 0, $bredde, $hoejde, 295, 295); skal du rette $bredde, $hoejde til 295, 295 (eller stører, alt efter hvor stor en bid du vil have)
19. juni 2006 - 02:37
#27
<? $url = $_REQUEST['url']; $imagetype = exif_imagetype($url); $billede_klippet = imagecreatetruecolor(110, 120); if($imagetype == "3") { $sti = imagecreatefrompng($url); imagecopyresampled($billede_klippet, $sti, 0, 0, 0, 0, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "2") { $sti = imagecreatefromjpeg($url); imagecopyresampled($billede_klippet, $sti, 0, 0, 0, 0, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "1") { $sti = imagecreatefromgif($url); imagecopyresampled($billede_klippet, $sti, 0, 0, 0, 0, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } else { echo $imagetype; } ?> Sådan - så har jeg fået den til at finde ønskede højde og bredde til mig. Hvordan får jeg den så til at tage dette udsnit fra præcist midten af billedet?
19. juni 2006 - 02:47
#28
Tager og ændre det første 0, 0 til en udregniung hvor taget og trækker x og y væk fra den originale x og y og dividere dem med 2...
19. juni 2006 - 02:50
#29
imagecopyresampled($billede_klippet, $sti, 0, 0, 200, 200, 110, 120, 110, 120); Sådan der fandt jeg ud af at flytte udsnittet ned så den tager og starter med pixel i punkt 200,200 Jeg prøver mig frem
19. juni 2006 - 02:52
#30
Jeg fandt funktionen imagesize(), som jeg kan se kan hente billedets størrelser. Men helt præcist hvordan skal jeg bruge den? :/
19. juni 2006 - 02:54
#31
getimagesize() mente jeg naturligvis..
19. juni 2006 - 02:58
#32
Like this!! Yea! <? $url = $_REQUEST['url']; $imagetype = exif_imagetype($url); $billede_klippet = imagecreatetruecolor(110, 120); $blah = getimagesize($url); $type = $blah['mime']; $width = $blah[0]; $height = $blah[1]; $width_s = $width / 2; $height_s = $height / 2; if($imagetype == "3") { $sti = imagecreatefrompng($url); imagecopyresampled($billede_klippet, $sti, 0, 0, $width_s, $height_s, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "2") { $sti = imagecreatefromjpeg($url); imagecopyresampled($billede_klippet, $sti, 0, 0, $width_s, $height_s, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } elseif($imagetype == "1") { $sti = imagecreatefromgif($url); imagecopyresampled($billede_klippet, $sti, 0, 0, $width_s, $height_s, 110, 120, 110, 120); header("Content-type: image/png"); imagepng($billede_klippet); imagedestroy($billede_klippet); } else { echo $imagetype; } ?>
19. juni 2006 - 02:58
#33
$url = $_REQUEST['url']; $x = 110; $y = 120; $imagetype = exif_imagetype($url); $billede_klippet = imagecreatetruecolor($x, $y); if($imagetype == "3") { $billed = imagecreatefrompng($url); } elseif($imagetype == "2") { $billed = imagecreatefromjpeg($url); } elseif($imagetype == "1") { $billed = imagecreatefromgif($url); } else { echo $imagetype; } if (isset($billed)) { $nyx = floor((imagesx($billed)-$x)/2); $nyy = floor((imagesy($billed)-$y)/2); imagecopy($billede_klippet, $billed, 0 , 0, $nyx, $nyy, $x, $y); header("Content-type: image/jpeg"); imagejpeg($billede_klippet); imagedestroy($billede_klippet); }
19. juni 2006 - 03:02
#34
Oh guard :D Du er rigtig igang ;) Jeg prøver naturligvis!
19. juni 2006 - 03:03
#35
19. juni 2006 - 03:12
#36
19. juni 2006 - 03:13
#37
Så er det bare mig.. :/ Tak for hjælpen! Hvorfor må jeg ikke give dig points?
19. juni 2006 - 03:23
#39
Du har måske heller ikke så tit brug for hjælp :P Nej, det ser ikke ud til at det forringer kvaliteten. Det er hele billedet, der er i elendig kvalitet :) Men det skal fint gå. Tusind tak for hjælpen!
19. juni 2006 - 03:27
#40
Har vist ikke oprettet et spørgsmål i flere år, plus jeg har vist rigeligt med point (mener jeg har 15.000) og som efter man viost kun kan afsætte 200 pr spørgsmål, så har jeg nok til minimum 75 spørgsmål... Og velbekommen, nu tror jeg også jeg vil smutte i seng, skal op om 4 timer...
19. juni 2006 - 03:28
#41
Jeg har lige en tysk eksamen at ordne om et par timer også :D SÅ jeg må også hellere se at komme afsted nu. Godnat!
19. juni 2006 - 09:53
#42
Prøv lige at se her..
http://momex.dk/artikler/index.php se på billede nummer to. Klik så på "Læs mere" til højre. Se så forskellen i kvalitet. Hvordan hulen kan det være?
19. juni 2006 - 10:14
#43
Det er fordi original billedet er gif og din kopi er jpeg.
23. juli 2006 - 14:18
#44
Et svar, iss?
07. august 2006 - 11:43
#45
Så må jeg jo selv :) TUSIND tak for hjælpen... Nu må jeg prøve at løse det med at den kan finde ud af at lave det i ordentlig kvalitet.. Har noteret det med, at originalen og kopien er forskelligt format..
Vi tilbyder markedets bedste kurser inden for webudvikling