Avatar billede oldschool Nybegynder
03. oktober 2007 - 18:02 Der er 7 kommentarer

Hjælp til resize ved upload

Hey

Jeg har et php script som resizer et billede fra en flash form 2 gange... Det virker super, men jeg kan ikke få den til at "croppe" et kvadrat til et thumbnail. Den funktion jeg bruger nu til thumbs laver det med korrekt ratio osv, men ville gerne have at den bare tager et kvadrat "ud af det originale billede" og gemmer det...

Jeg ved det kan lade sig gøre, og jeg har fundet en del tråde omkring det - kan bare ikke hitte ud af det.

Det script jeg bruger nu:

    //Resize og dupliker
        $max_width_t=100; //max bredde
        $max_height_t=75; //max højde
        $size_t=getimagesize($uploadFile);
        $width_t=$size[0];
        $height_t=$size[1];
        $x_ratio_t=$max_width_t/$width_t;
        $y_ratio_t=$max_height_t/$height_t;
        if(($width_t<=$max_width_t) && ($height_t<=$max_height_t)){
                $tn_width_t=$width_t;
                $tn_height_t=$height_t;
        }
        else if(($x_ratio_t*$height_t)<$max_height_t){
                $tn_height_t=ceil($x_ratio_t*$height_t);
                $tn_width_t=$max_width_t;
        }
        else{
                $tn_width_t=ceil($y_ratio_t*$width_t);
                $tn_height_t=$max_height_t;
        }
        $src_t=imagecreatefromjpeg($uploadFile);
        $dst_t=imagecreatetruecolor($tn_width_t,$tn_height_t); //lav en holder
        imagecopyresized($dst_t,$src_t,0,0,0,0,$tn_width_t,$tn_height_t,$width_t,$height_t);
        $nameResized_t = $uploadDir . substr(md5(uniqid(rand(), true)),0,20) . "thumbb.jpg"; //navn på det nye billede
        imagejpeg($dst_t,$nameResized_t,80); //gemmer det nye billede med jpg kvalitet 80
        imagedestroy($src_t);
        imagedestroy($dst_t);
       
       
  }
 
Vil være fedt med et hint!

Thanks

Oldschool
Avatar billede zurekk Nybegynder
03. oktober 2007 - 18:09 #1
function createavatar( $file, $new, $max, $ext )
    {
        switch( $ext ):
            case 'jpeg':
            case 'jpg':
                $srcim = imagecreatefromjpeg( $file );
                break;
            case 'gif':
                $srcim = imagecreatefromgif( $file );
                break;
            case 'png':
                $srcim = imagecreatefrompng( $file );
                break;
        endswitch;
       
        $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);
            }
       
        switch( $ext ):
            case 'jpg':
            case 'jpeg':
                imagejpeg( $dstim, $new, 100 );
                break;
            case 'gif':
                imagegif( $dstim, $new );
                break;
            case 'png':
                imagepng( $dstim, $new );
                break;
        endswitch;

        imagedestroy( $dstim );
        imagedestroy( $srcim );
       
        return file_exists($new);
    }
Avatar billede zurekk Nybegynder
03. oktober 2007 - 18:10 #2
Den bruger jeg til avatars, den virker fint.
Avatar billede oldschool Nybegynder
03. oktober 2007 - 19:11 #3
Tak for svar :)

Får mine billeder med $uploadFile er det $File i dit script - hvis du forstår?
Avatar billede zurekk Nybegynder
03. oktober 2007 - 19:43 #4
$file = Billedet der skal resizes, stien på det.
$new = Stien til det nye billede, eks. /billeder/prut.jpg
$max = Hvor stor kvadraten skal være, 80 vil give 80x80.
$exp = Filtype, jpeg, jpg, etc.

Og til sidst returnerer den så om billedet blev gemt.

Så hvis du skriver:

if( createavatar( 'storebilleder/1000.jpg', 'småbilleder/1000.jpg', 100, 'jpg' ) )
echo 'YES SIR!';

Så vil den udskrive yes sir hvis billedet blev lavet og gemt :)
Avatar billede oldschool Nybegynder
04. oktober 2007 - 19:54 #5
fedt tak, har fået det til at fungerer...
Har skrevet det lidt om så det passede med mine i forvejen eksisterende variabler... Så nu blev det sådan:

$max=140; //max bredde
     
        $size_t=getimagesize($uploadFile);
        $width_t=$size[0];
        $height_t=$size[1];
        $x_ratio_t=$max/$width_t;
        $y_ratio_t=$max/$height_t;
       
        $scale=($x_ratio_t > $y_ratio_t ? $x_ratio_t : $y_ratio_t);
       
        $tn_width_t=round( $width_t * $scale, 0 );
        $tn_height_t=round( $height_t * $scale, 0 );
       
        $src_t=imagecreatefromjpeg($uploadFile);
        $dst_t=imagecreatetruecolor(70,70); //lav en holder       
       
        if($tn_height_t > $tn_width_t) {
            $diff = ($tn_height_t - $max)/2;
            imagecopyresampled( $dst_t, $src_t, 0, 0, 0, $diff, $max, $max+$diff, $width_t, $height_t);
            }
           
        else if($height_t < $width_t)
            {
                $diff = ($width_t - $max)/2;
                imagecopyresampled( $dst_t, $src_t, 0, 0, $diff, 0, $max+$diff, $max, $width_t, $height_t);
            }
        else
            {
                imagecopyresampled( $dst_t, $src_t, 0, 0, 0, 0, $max, $max, $width_t, $height_t);
            }
       
       
       
       
       
     
        $nameResized_t = $uploadDir . substr(md5(uniqid(rand(), true)),0,20) . "thumbb.jpg"; //navn på det nye billede
        imagejpeg($dst_t,$nameResized_t,80); //gemmer det nye billede med jpg kvalitet 80
        imagedestroy($src_t);
        imagedestroy($dst_t);
     
     
  }

Smid et svar, så kan du få lidt point :)

Endnu engang tak for hjælpen!
Avatar billede zurekk Nybegynder
05. oktober 2007 - 11:49 #6
Jamen you're welcome :)
Avatar billede zurekk Nybegynder
05. oktober 2007 - 13:11 #7
DOH!
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