Avatar billede zaittam Nybegynder
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?
Avatar billede iss Novice
19. juni 2006 - 00:51 #1
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.
Avatar billede showsource Seniormester
19. juni 2006 - 00:59 #2
ImageJPEG($billede_klippet, 100);

100 er bedste kvali, 0 dårligste
Avatar billede iss Novice
19. juni 2006 - 01:22 #3
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)
Avatar billede iss Novice
19. juni 2006 - 01:23 #4
Plus det var generalt og ikke kun til JPEG der efterlyses...
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:25 #5
showsource - Hvis jeg tilføjer det, vises billedet ikke :/

iss - Hermed gjort.. Det er sammenstykket af en kode jeg fandt på php.net :/
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:27 #6
Altså jeg fjernede touch.. Resten sidder jeg og prøver :)
Avatar billede showsource Seniormester
19. juni 2006 - 01:30 #7
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"
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:31 #8
Det gør jeg så.

Jeg forsøger lige lidt med imagecopyresampled i stedet for imagecopy, poster tilbage om lidt.
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:36 #9
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
Avatar billede showsource Seniormester
19. juni 2006 - 01:43 #10
$url = $_REQUEST[url];
skal være
$url = $_REQUEST["url"];
Avatar billede showsource Seniormester
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()
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:44 #12
Har det så hjulpet på kvaliteten? :/

Har enormt dårlige øjne.. Men synes jeg kan ane noget grums? :/
Avatar billede zaittam Nybegynder
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.
Avatar billede iss Novice
19. juni 2006 - 01:51 #14
Hvis du kun bruger funktionen til at hente billeder fra din egen side, så lad være med at hente dem via URI, brug direkte sti: http://momex.dk/artikler/img/billeder.php?url=/mounted-storage/home20b/sub003/sc20585-UYKJ/momex.dk/images/andet/6.jpg
Det er en del hurtigere.

Og det der grums der er, det er nu en gang på alle billeder der er af komprimeret typer.
Avatar billede zaittam Nybegynder
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 :/)
Avatar billede iss Novice
19. juni 2006 - 01:54 #16
Lav om til PNG/GIF, de er ikke komprimeret.
Avatar billede showsource Seniormester
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!
Avatar billede zaittam Nybegynder
19. juni 2006 - 01:57 #18
Så gør jeg bare det inden jeg uploader dem :)

Svarer du, iss?
Avatar billede iss Novice
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.
Avatar billede zaittam Nybegynder
19. juni 2006 - 02:14 #20
Den melder godt nok fejl :/

http://momex.dk/artikler/img/billeder.php?url=http://www.momex.dk/images/andet/6.jpg

Dén kan jeg ikke hitte ud af :/
Avatar billede iss Novice
19. juni 2006 - 02:15 #21
Ups:
$bredde = imagesx($sti);
$hoejde = imagesy($sti);
Skal ikke flyttes ud...
Avatar billede zaittam Nybegynder
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..
Avatar billede zaittam Nybegynder
19. juni 2006 - 02:18 #23
wrong parameter count må da betyde at der ikke er det rigtige antal parametre :/ Det er der altså..
Avatar billede iss Novice
19. juni 2006 - 02:22 #24
imagecopyresampled($billede_klippet, $sti, 0, 0, 0, 0, 295, 295, $bredde, $hoejde);

Skal de vist alle tre hedde.
Avatar billede zaittam Nybegynder
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. :)
Avatar billede iss Novice
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)
Avatar billede zaittam Nybegynder
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?
Avatar billede iss Novice
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...
Avatar billede zaittam Nybegynder
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
Avatar billede zaittam Nybegynder
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? :/
Avatar billede zaittam Nybegynder
19. juni 2006 - 02:54 #31
getimagesize() mente jeg naturligvis..
Avatar billede zaittam Nybegynder
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;
}
?>
Avatar billede iss Novice
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);
}
Avatar billede zaittam Nybegynder
19. juni 2006 - 03:02 #34
Oh guard :D Du er rigtig igang ;) Jeg prøver naturligvis!
Avatar billede zaittam Nybegynder
19. juni 2006 - 03:03 #35
Det forslag der gav en elendig billedkvalitet :/

Prøv at se her:
http://momex.dk/artikler/img/billeder.php?url=http://www.momex.dk/images/andet/6.jpg
Avatar billede iss Novice
19. juni 2006 - 03:12 #36
Avatar billede zaittam Nybegynder
19. juni 2006 - 03:13 #37
Så er det bare mig.. :/

Tak for hjælpen!

Hvorfor må jeg ikke give dig points?
Avatar billede iss Novice
19. juni 2006 - 03:21 #38
http://www.imagezones.com/v/1ad24e16ac02c9e3123c3a76bba83f68.html som du kan se, ikke den store forskel... Jeg har lagt udsnittet op og lagt en sort ramme på så du kan se hvor det er...

Og jeg samler ikke på point...
Avatar billede zaittam Nybegynder
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!
Avatar billede iss Novice
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...
Avatar billede zaittam Nybegynder
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!
Avatar billede zaittam Nybegynder
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?
Avatar billede iss Novice
19. juni 2006 - 10:14 #43
Det er fordi original billedet er gif og din kopi er jpeg.
Avatar billede zaittam Nybegynder
23. juli 2006 - 14:18 #44
Et svar, iss?
Avatar billede zaittam Nybegynder
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..
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