Avatar billede ra__mus Nybegynder
26. maj 2005 - 16:27 Der er 5 kommentarer og
1 løsning

reducering af billede størrelse

Hej.
Jeg har en side hvor man kan uploade et billede. jeg vil gerne reducere størrelsen af disse billedefiler inden upload med imagecopyresampled, men ka ikke få det til at virke. Har lige nu :

$files = $_FILES['upfil']['name'];
   
    list($width, $height) = getimagesize($files);
    $new_width = 20 ;
    $new_height = 20 ;

    $image_p = imagecreatetruecolor(20, 20);
    $image = imagecreatefromjpeg($files);
    $files = imagecopyresampled($image_p, $image, 0, 0, 0, 0,  $new_width, $new_height, $width, $height);
 
       
    $sti = "/test/";
    $dist = $_SERVER["DOCUMENT_ROOT"] ."$sti";
    $temparr = explode(".", $files);
    $temparr[count($temparr)-2] = time();
    $files = implode(".", $temparr);
    move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);

 

billedet bliver uploadet men uden at størrelsen af filen er mindre ??? Hvad er galt ??
Avatar billede angam Nybegynder
26. maj 2005 - 16:51 #1
Denne linie er helt gal:

$files = imagecopyresampled($image_p, $image, 0, 0, 0, 0,  $new_width, $new_height, $width, $height);

imageCopyResampled returnerer true/false, så du overskriver dir originale filnavn.
Prøv med:

if(imagecopyresampled($image_p, $image, 0, 0, 0, 0,  $new_width, $new_height, $width, $height)) {
    $sti = "/test/";
    $dist = $_SERVER["DOCUMENT_ROOT"] ."$sti";
    $temparr = explode(".", $files);
    $temparr[count($temparr)-2] = time();
    $files = implode(".", $temparr);
    move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);
} else
    die('Image could not be resized.');
Avatar billede ra__mus Nybegynder
26. maj 2005 - 19:48 #2
Har fundet ud af at billedet først skal uploades og derefter kan jeg reducere størrelsen på det, men hvordan ???
Avatar billede angam Nybegynder
26. maj 2005 - 20:45 #3
Du behøver ikke at uploade billedet først. Jeg har lavet et eksempel hvor jeg resizer Ekspertens logo. Prøv og se om ikke du kan udbygge denne kodestump til dine behov:

<?
    define('IMAGE_WIDTH',    200);                //    New Image width
    define('IMAGE_HEIGHT',    100);                //    new Image height
    define('IMAGE_ASPECT',    false);                //    TRUE: keep aspect

    $imageurl = 'http://www.eksperten.dk/img/elogo.png';


    //    Calculate new height / width:
    list($x, $y) = getimagesize($imageurl);
    $w = IMAGE_WIDTH;
    $h = IMAGE_HEIGHT;
    if(IMAGE_ASPECT) {                            //    Keep aspect ratio: Assume WIDTH is perfect and resize HEIGHT:
        $h = ceil($y / $x * $w);
        if($h > IMAGE_HEIGHT)
            $w = ceil($x * $y / $h);
    }
   
    $image = false;
    $extension = strrchr($imageurl, '.');
    switch($extension) {
        case '.gif':    $image = imagecreatefromgif($imageurl); break;
        case '.jpg':
        case '.jpeg':
        case '.pjpeg':    $image = imagecreatefromjpeg($imageurl); break;
        case '.png':    $image = imagecreatefrompng($imageurl); break;
        default:        die("Unknown file type: $extension");
    }

    if($image) {                            //    Create new image ressource in correct size:       
        $newimg = imagecreatetruecolor($w, $h);
        imagecopyresized($newimg, $image, 0, 0, 0, 0, $w, $h, $x, $y);
        header("content-type: image/jpeg");
        imagejpeg($newimg);
        ImageDestroy($newimg);
    }

?>
Avatar billede angam Nybegynder
26. maj 2005 - 20:49 #4
Hvis du hellere vil gemme billedet på disk istedet for at vise det, kan du erstatte nederste del af koden med:

    if($image) {                            //    Create new image ressource in correct size:       
        $newimg = imagecreatetruecolor($w, $h);
        imagecopyresized($newimg, $image, 0, 0, 0, 0, $w, $h, $x, $y);
        imagejpeg($newimg, 'newImageFile.jpg');
        ImageDestroy($newimg);
    }


Bemærk at jeg bruger jpeg - hvis ikke du har kompileret disse moduler ind i php (det er de ikke som standard), skal du nok bruge png istedet.
Avatar billede sungdk Nybegynder
26. maj 2005 - 21:40 #5
Ved ikke lige hvor du har fundet det script, men synes det er gjort meget sværer end det egentlig kan gøres.

Bl.a. er denne kode jo "hul i hovedet":

$image = false;
    $extension = strrchr($imageurl, '.');
    switch($extension) {
        case '.gif':    $image = imagecreatefromgif($imageurl); break;
        case '.jpg':
        case '.jpeg':
        case '.pjpeg':    $image = imagecreatefromjpeg($imageurl); break;
        case '.png':    $image = imagecreatefrompng($imageurl); break;
        default:        die("Unknown file type: $extension");
    }

Hvis du fx. omdøbber din .jpg-fil til .gif, så begynder den at tro den er .gif :)
Avatar billede angam Nybegynder
26. maj 2005 - 21:44 #6
Det er faktisk en del af mit script til min imageproxy; derfor kan det en hel del mere end requested (og der er skåret en del kode væk), men ja, du kan godt have ret: den er større end nødvendig. Det var nu også for eksemplets skyld: se noget virke ...
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