Avatar billede zurekk Nybegynder
26. april 2007 - 12:05 Der er 15 kommentarer og
1 løsning

Image-Resize

Hej Eksperter,

Jeg skal bruge et Billede-Resize script som gør dette:

Tager billedet finder den korteste akse, og ændrer denne til X(f.eks. 100px), derefter klipper den enderne af den lange akse så denne også bliver X lang.
Så billedet derefter bliver XxX, uden billedekvalitet ændret =)

På forhånd tak.
Avatar billede zurekk Nybegynder
26. april 2007 - 12:06 #1
uden billedekvalitet ER ændret :D
Avatar billede jakobdo Ekspert
26. april 2007 - 12:17 #2
Du bør langt af vejen kunne bruge denne funktion:

function resize( $filename, $newfilename, $max)
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $max / $ow;
    $hscale = $max / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    imagejpeg( $dstim, $newfilename, 100);
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}
Avatar billede zurekk Nybegynder
26. april 2007 - 12:25 #3
Det vil jeg lige prøve, så vender jeg tilbage, og tak for det hurtige svar :D
Avatar billede zurekk Nybegynder
26. april 2007 - 12:38 #4
Jeg ved ikke om jeg har misset noget, men når jeg tester sådan her:
<?php

function resize( $filename, $newfilename, $max)
{
    echo "1";
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $max / $ow;
    echo "2";
    $hscale = $max / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    echo "3";
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    imagejpeg( $dstim, $newfilename, 100);
    imagedestroy( $dstim );
    echo "4";
    imagedestroy( $srcim );
    return file_exists($newfilename);
    echo "5";
}

resize( 'hej.jpg', 'lort', 100 );

?>

Så når den kun til echo "4";

Ved du hvad problemet er =)?
Avatar billede jakobdo Ekspert
26. april 2007 - 12:48 #5
Ja, funktionen stopper ved return!
Du kan teste på følgnede måde:

lav en mappe og kald den f.eks. test
chmod mappen 777
Smid scriptet og hej.jpg i den mappe.
Så skal du huske at kalde funktionen: resize( 'hej.jpg', 'lort.jpg', 100 );

Bliver der så oprettet en fil ved navn lort.jpg?
Avatar billede zurekk Nybegynder
26. april 2007 - 13:04 #6
Nu fik jeg det til at virke, havde glemt 777.


return file_exists($newfilename);
virker stadig ikke, men gør ikke så meget da scriptet virker fint.

Dog ikke som jeg havde håbet.
Den resizer bare til 87x100
Avatar billede zurekk Nybegynder
26. april 2007 - 13:59 #7
Jeg ville gerne have at den resizer den korte side til 100, også hvis så den er 100x140, så klipper den 20px af i hvert side, så den bliver 100x100 :)
Avatar billede zurekk Nybegynder
26. april 2007 - 19:01 #8
(der tages forbehold for stavefejl og gibberish)
Avatar billede jakobdo Ekspert
26. april 2007 - 20:01 #9
Så tror jeg den var der:

<?php
//http://www.eksperten.dk/spm/775295

$test = 'picture.jpg';
$temp = 'test.jpg';

function resize( $filename, $newfilename, $max)
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $max / $ow;
    $hscale = $max / $oh;
    $scale = ( $hscale > $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $max, $max );
    if($nh > $nw)
    {
        $diff = ($nh - $max)/2;
        imagecopyresampled( $dstim, $srcim, 0, 0, 0, $diff, $max, $max+$diff, $ow, $oh);
    }
    elseif($nh < $nw)
    {
        $diff = ($nw - $max)/2;
        imagecopyresampled( $dstim, $srcim, 0, 0, $diff, 0, $max+$diff, $max, $ow, $oh);
    }
    else
    {
        imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $max, $max, $ow, $oh);
    }
    imagejpeg( $dstim, $newfilename, 100);
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

resize($test,$temp,100);

?>
Avatar billede vix-mix Nybegynder
26. april 2007 - 20:06 #10
Hej jeg håber ikke at det gør noget jeg lige skriver her, men jakobdo, du ligner en der er en haj til det der resize, vil du hjælpe mig her evt?
Avatar billede jakobdo Ekspert
26. april 2007 - 20:08 #11
Jeg er ikke haj, er bare god til at prøve mig frem! :o)
Men hvis ikke du spammer zurekk's tråd, så kan du spørge løs! (ellers opret et nyt spørgsmål, så skal jeg eller andre eksperter kigger på det)
Avatar billede vix-mix Nybegynder
26. april 2007 - 20:36 #12
ah undskyld, jeg glemte at skrive url. jeg har lavet et spg :) http://www.eksperten.dk/spm/775141
Avatar billede zurekk Nybegynder
26. april 2007 - 21:27 #13
Lige præcis jakob, tusind tak, igen :D
Avatar billede zurekk Nybegynder
26. april 2007 - 21:27 #14
Og smid et svar :D
Avatar billede jakobdo Ekspert
26. april 2007 - 21:31 #15
Svar!
Avatar billede jakobdo Ekspert
26. april 2007 - 21:48 #16
Takker for point.
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