Avatar billede dennism Nybegynder
11. juli 2006 - 17:38 Der er 5 kommentarer og
1 løsning

PHP: Resize af billede

Jeg har engang lavet denne funktion til resize af billeder:

function reziseImage($src, $dist, $imageType, $maxWidth, $maxHeight) {
    list($width, $height) = getimagesize($src);

    if ($width>$maxWidth || $height>$maxHeight) {
        $scrRatio = $width/$height;
        $distRatio = $maxWidth/$maxHeight;
        if ($distRatio>$scrRatio) {
            $newHeight = $maxHeight;
            $newWidth = round($maxHeight*$scrRatio);
        } else {
            $newHeight = round($maxWidth/$scrRatio);
            $newWidth = $maxWidth;
        }
    } else {
        $newWidth=$width;
        $newHeight=$height;
    }

        $thumb = imagecreatetruecolor($newWidth, $newHeight);

        if ($imageType == "jpg") {
            $source = imagecreatefromjpeg($src);
        } elseif ($imageType == "png") {
            $source = imagecreatefrompng($src);
        } elseif ($imageType == "gif") {
            $source = imagecreatefromgif($src);
        }

        imagecopyresized($thumb, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
   
        if ($imageType == "jpg") {
            imagejpeg($thumb, "$dist");
        } elseif ($imageType == "png") {
            imagepng($thumb, "$dist");
        } elseif ($imageType == "gif") {
            imagegif($thumb, "$dist");
        }
   
}

Jeg har f.eks. dette billede, som jeg kører igennem:
http://www.demaweb.dk/pic01.jpg

Dette resulterer f.eks. i dette thumbnail (maxwidth=150, maxheight=100):
http://www.demaweb.dk/pic02.jpg

Nogen der kan hjælpe mig med at få lavet dette script, sådan billederne ikke bliver så dårlige? Det ser ud som når man ikke trækker i hjørnerne i word f.eks.
Avatar billede loevgaard Praktikant
11. juli 2006 - 18:23 #1
Den funktion du søger er den her: http://no.php.net/manual/en/function.imagecreatetruecolor.php

Her er en funktion du kan få lidt inspiration fra:
    function resizeImage($newWidth) {
        if($this->getWidth() > $newWidth) {
            // Get new sizes
            $width = $this->getWidth();
            $height = $this->getHeight();
            $factor = ($width/$height);
            $newHeight = ($newWidth/$factor);

            // Load
            $thumb = imagecreatetruecolor($newWidth, $newHeight);

            // Resize
            imagecopyresized($thumb, $this->image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

            // Output
            $this->image = $thumb;
        }
    }

Den er taget ud fra en klasse, men håber den kan bruges til inspiration :)
Avatar billede dennism Nybegynder
11. juli 2006 - 18:57 #2
Den eneste umiddelbare forskel på disse to er, at jeg afrunder den nye højde eller bredde. Men efter at have fjernet denne afrunding, er der stadig ikke sket noget.
Avatar billede coderdk Praktikant
11. juli 2006 - 19:24 #3
Du skal bare skifte imagecopyresized med imagecopyresampled
Avatar billede dennism Nybegynder
11. juli 2006 - 19:33 #4
Hold da op - det var da en voldsom forskel :)

Hvordan kan det være? :)
Avatar billede coderdk Praktikant
11. juli 2006 - 19:46 #5
Måden copyresized og copyresampled virker på... Lidt svært at forklare - imagecopyresampled den smager på de omkringliggende pixels for at lave et pænere overall billede - copyresized er meget mere simpel... :)
Avatar billede dennism Nybegynder
11. juli 2006 - 19:50 #6
Jamen, tusind tak for hjælpen i hvert fald! :)
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