Avatar billede jacobs1 Nybegynder
17. juni 2006 - 10:47 Der er 18 kommentarer

resize JPEG billeder i php

Hej eksperten.

Jeg bruger dette script der kan resize et billede, men det virker åbenbart ikke hvis formatet er JPEG.
Jeg tænker at man måske kan rename JPEG billedet til JPG og derefter resize det ??

er der nogle der har nogle gode ideer, eller et script der kan hjælpe mig med dette problem.?


function resize( $filename, $newfilename, $maxw, $maxh )

{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $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 );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

  resize($path."/".$filename,  $path."/".$filename, 100,100);
Avatar billede jakobdo Ekspert
17. juni 2006 - 11:07 #1
Du kan resize mange billeder, men det er rigtigt, den funktion der tager kun jpeg.
Du kan evt rette denne linie:
$srcim = imagecreatefromjpeg( $filename );
til:
$srcim = imagecreatefromgif( $filename);
eller
$srcim = imagecreatefrompng( $filename);

Der findes også kode på nettet, som kan lave:
$srcim = imagecreatefrombmp( $filename);
Men det er ikke standard php funktion.
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 11:28 #2
Mange tak for dit svar.

Det virker desværre ikke med:

$srcim = imagecreatefromgif( $filename);
eller
$srcim = imagecreatefrompng( $filename);

skal jeg også ændre
$result = imagejpeg( $dstim, $newfilename, 85 );?

scriptet skal også ende op med at resize til en JPEG/JPG eller GIF da billederne skal vises på en mobil telefon til sidst
Avatar billede jakobdo Ekspert
17. juni 2006 - 11:49 #3
Hvis du blot retter som jeg skrev i: 17/06-2006 11:07:12
Så vil den tage et gif, eller png og altid gemme det som et jpeg billede.
Så du må ikke kalde filerne det samme.

F.eks.:
resize($path."/".$filename,  $path."/".$filename.".jpg", 100,100);
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 12:03 #4
Jeg forstå det ikke helt,
jeg uploader et JPEG billeder til Scriptet, det resize den ikke, men alle andre billede formater virker fint nok.

function resize( $filename, $newfilename, $maxw, $maxh )

{
    $result = false;
    $srcim = imagecreatefromgif( $filename);
    //$srcim = imagecreatefrompng( $filename);
    //$srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $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 );
    $result = imagejpeg( $dstim, $newfilename, 60 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}
resize($path."/".$filename,  $path."/".$filename.".jpg", 100,100);
Avatar billede jakobdo Ekspert
17. juni 2006 - 12:12 #5
Prøv denne funktion:

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = NULL;
    $ext = strtolower(end(explode($filename)));
   
    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $srcim = imagecreatefromjpeg( $filename );
            break;
        case 'gif':
            $srcim = imagecreatefromgif( $filename);
            break;
        case 'png':
            $srcim = imagecreatefrompng( $filename);
            break;
        default:
            //Her er opstået en fejl...
    }

    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $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 );
   
    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $result = imagejpeg( $dstim, $newfilename, 60 );
            break;
        case 'gif':
            $result = imagegif( $dstim, $newfilename );
            break;
        case 'png':
            $result = imagepng( $dstim, $newfilename );
            break;
        default:
            //Her er opstået en fejl...
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

Og så kalder du den med:
resize($path."/".$filename,  $path."/".$filename, 100,100);

$filename kan være: jpg,jpeg,gif eller png filer.
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 12:22 #6
Nej desværre :(
Avatar billede viper_killerguy Nybegynder
17. juni 2006 - 12:23 #7
du burde nok
list(,,$text) = getimageeize($filename);
$text indeholder så den filtype der står i headeren på input filen.
Filnavne er nemme at ændre, og de fleste programmer er ligeglade hvis selve filtypen og filnavnet ikke passer sammen.
Avatar billede viper_killerguy Nybegynder
17. juni 2006 - 12:27 #8
hov!
http://dk.php.net/manual/da/function.getimagesize.php
getimagesize giver tal til de forskellige formater.
så du for at tilpasse sig til jakobdo's kode burde det se sådan her ud.

list(,,$text) = getimageeize($filename);
$tmp = array(,"gif","jpg","png");
$text = $tmp[$text];
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 12:34 #9
hvor skal det stykke kode indsættes?
Avatar billede viper_killerguy Nybegynder
17. juni 2006 - 12:40 #10
istedet for:
$ext = strtolower(end(explode($filename)));
og det skal være $ext og ikke $text kan jeg se nu.
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 12:43 #11
Jeg får denne fejl : Parse error: syntax error, unexpected ',', expecting ')'
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 12:46 #12
function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = NULL;
list(,,$ext) = getimageeize($filename);
$tmp = array(,"gif","jpg","png");
$ext = $tmp[$text];
   

    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $srcim = imagecreatefromjpeg( $filename );
            break;
        case 'gif':
            $srcim = imagecreatefromgif( $filename);
            break;
        case 'png':
            $srcim = imagecreatefrompng( $filename);
            break;
        default:
            //Her er opstået en fejl...
    }

    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $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 );
   
    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $result = imagejpeg( $dstim, $newfilename, 60 );
            break;
        case 'gif':
            $result = imagegif( $dstim, $newfilename );
            break;
        case 'png':
            $result = imagepng( $dstim, $newfilename );
            break;
        default:
            //Her er opstået en fejl...
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}
Avatar billede viper_killerguy Nybegynder
17. juni 2006 - 12:50 #13
ok, min fejl. men du havde også lagt en lille fejl ind (du glemte at rette den sidste  $text til $ext, jeg har rettet begge forneden.

list(,,$ext) = getimageeize($filename);
$tmp = array("","gif","jpg","png");
$ext = $tmp[$ext];
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 13:11 #14
nu får jeg denne fejl :
  Call to undefined function getimageeize()
Avatar billede viper_killerguy Nybegynder
17. juni 2006 - 13:17 #15
great!
getimagesize() hedder funktionen.
list(,,$ext) = getimageeize($filename); -> list(,,$ext) = getimagesize($filename);
Avatar billede jacobs1 Nybegynder
17. juni 2006 - 13:51 #16
Den resize ikke billedet mærkeligt, det virker lidt som om at det eneste billede den ikke vil resize er det billede jeg har taget på min mobil telefon??? men det kan jo hellere ikke passe.
Avatar billede jacobs1 Nybegynder
18. juni 2006 - 11:31 #17
Jeg fandt denne stump kode på nettet, når den er sat ind virker det :)

error_reporting(E_ALL);
// 0 is the current behavior
ini_set('gd.jpeg_ignore_warning', 1);
$im = imagecreatefromjpeg($file);

Så scriptet kom til at se sådan her ud:

<?php
function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = NULL;
//  $ext = strtolower(end(explode($filename)));
  list(,,$ext) = getimagesize($filename);
$tmp = array("","gif","jpg","png");
$ext = $tmp[$ext];

error_reporting(E_ALL);
// 0 is the current behavior
ini_set('gd.jpeg_ignore_warning', 1);
$im = imagecreatefromjpeg($file);




    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $srcim = imagecreatefromjpeg( $filename );
            error_reporting(E_ALL);
// 0 is the current behavior
ini_set('gd.jpeg_ignore_warning', 1);
$im = imagecreatefromjpeg($file);
            break;
        case 'gif':
            $srcim = imagecreatefromgif( $filename);
            break;
        case 'png':
            $srcim = imagecreatefrompng( $filename);
            break;
        default:
            //Her er opstået en fejl...
    }

    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $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 );
   
    switch($ext)
    {
        case 'jpg':
        case 'jpeg':
            $result = imagejpeg( $dstim, $newfilename, 60 );
            break;
        case 'gif':
            $result = imagegif( $dstim, $newfilename );
            break;
        case 'png':
            $result = imagepng( $dstim, $newfilename );
            break;
        default:
            //Her er opstået en fejl...
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}


resize("Billede013.jpg",  "Billede013.jpg", 100,100);
?>

Mange tak for jeres hjælp både jakobdo og viper_killerguy.
Læg et svar begge så for i 15 point hver :)
Avatar billede jakobdo Ekspert
18. juni 2006 - 20:09 #18
Svar.
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