Avatar billede mibu Nybegynder
16. november 2009 - 15:26 Der er 7 kommentarer og
1 løsning

Resize billeder (igen)

Jeg har med stor interesse gennempløjet "Eksperten" for af læse om dette emne, og det er da heller ikke fordi der mangler indlæg om det.

Men jeg kan ikke rigtigt finde lige det der passer på det jeg skal bruge.

Jeg har et script til opload af billeder, det virker fint, (er iøvrigt også oprindeligt her fra sitet)men jeg kunne mægtig godt tænke mig og får bygget en resize funktion ind, jeg har ikke brug for at der laves thump, alle billeder skal bare resizes til f.eks. 800px bred.

Jeg har prøvet flere gange, og i heldigste fald skedet der bare ikke en sk... og i værste en eventyrlig masse fejlmeddeleser.

Er der nogen der tror de kan og vil hjælpe lidt med det?

Behørligt belært fra tidligere sp. dumper jeg ikke min oploadkode før nogen ber om det :-)
Avatar billede preppydude Nybegynder
16. november 2009 - 17:29 #1
Prøv det her:

/**
* @param <string>tmpPath  Filename of the original image
* @param <string>thumbPath Filename to save our thumbnail (e.g. /var/www/thumbnails/<name>.jpg)
* @param <int>thumbWidth  Thumbnail width in pixels
*
* @return <bool>          True if success, false if not
**/
function createThumbs($tmpPath, $thumbPath, $thumbWidth=800) {
    if (!file_exists($tmpPath)) return false;
   
    $imgSize = getimagesize($tmpPath);
    $imgType = (int)$imgSize[2];
    switch ($imgType) {
        case 1:
            $imgOrig = imagecreatefromgif($tmpPath);
            break;
        case 1:
            $imgOrig = imagecreatefromjpeg($tmpPath);
            break;
        case 1:
            $imgOrig = imagecreatefrompng($tmpPath);
            break;
        default:
            $imgOrig = imagecreatefromjpeg($tmpPath);
            break;
    }
   
    $curWidth  = imagesx($imgOrig);
    $curHeight = imagesy($imgOrig);
    $newWidth  = $thumbWidth;
    $newHeight = floor($height*($thumbWidth/$curWidth));
    $imgThumb  = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($imgThumb, $imgOrig, 0, 0, 0, 0, $newWidth, $newHeight, $curWidth, $curHeight);
    imagejpeg($imgThumb, $thumbPath);
   
    unset($imgThumb);
    unset($imgOrig);
   
    return true;
}
Avatar billede preppydude Nybegynder
16. november 2009 - 17:29 #2
createThumb skulle funktionen selvfølgelig hedde... mindre fejl. Håber ikke jeg har lavet flere. ^_^
Avatar billede mibu Nybegynder
16. november 2009 - 17:40 #3
Prøv og se min opload kode, der er et sted hvor der tjekkes filstørrelse, hvis alle billeder der oploades bliver resizeset, så bliver det vel overfødigt, og så skal dit script flettes ind der ?? og hvordan!!

        $mappe = $_REQUEST["mappe"];
        $fil = $_REQUEST["nyt_navn"];
       
        //Her skrives stien til mappen hvor oploadede filer skal lande.
        // '.$mappe.'/' skal blive, ret kun det før.
        $upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/billeder/'.$mappe.'/';

        //Antal filer der kan uploades pr. gang.
        $num_files = 6;

        //filstørelse.
        $size_bytes = 3145728; //51200 bytes = 50KB. (3145728 = 3 MB

        //Filtype der kan uploades: Du kan anvende alle typer,
        //men det er smart at undlade exe. Og hvis du vil være sikker
        //så skriv filtype to gange, både med "små" og "STORT".
        $limitedext = array('.jpg','.JPG','.jpeg','.JPEG');

        //Kontrollerer om bibloteket findes eller ej.
        if (!is_dir("$upload_dir")) {
            die ("Error: Mappen <b>($upload_dir)</b> findes ikke!");
        }

        //check om bbiblotekket er skrivebart.
        if (!is_writeable("$upload_dir")) {
            die ("Error: Mappen <b>($upload_dir)</b> ikke skrivebar.");
        }

        //Hvis der trykkes på send (submit) starter upload
        if (isset($_POST['upload_form'])) {
            echo "<h3>Upload resultat:</h3>";

            //Laver et loop for at uploade filer baseret på ($num_files) number of files.
        for ($i = 1; $i <= $num_files; $i++) {
            //definerer variabler til values.
            $new_file = $_FILES['file'.$i];
            $file_name = $new_file['name'];

            //Ved mellemrum i fil navne erstattes disse med "_".
            $file_name = str_replace(' ', '_', $file_name);
            $file_tmp = $new_file['tmp_name'];
            $file_size = $new_file['size'];

            #-----------------------------------------------------------#
            # Denne koder tjekker om der er valgt en fil eller ej.      #
            #-----------------------------------------------------------#

            if (!is_uploaded_file($file_tmp)) {
                //print error meddelsser og fil nummer.
                echo "Filen $i: er ikke valgt.<br>";
            } else {
                #-----------------------------------------------------------#
                # Denne kode tjekker filens endenavn                        #
                #-----------------------------------------------------------#

                //Hvis du valgte ændre fil endelser, så husk at rette teksten
                //i denne medelsesblok
                $ext = strrchr($file_name,'.');
                if (!in_array(strtolower($ext),$limitedext)) {
                    echo "Filen $i: ($file_name) har forkert endenavn.<br>Du kan kun sende jpg.<br>";
                } else {
                    #-----------------------------------------------------------#
                    # Denne kode kontrolle filstørrelsen                        #
                    #-----------------------------------------------------------#

                    if ($file_size > $size_bytes) {
                        echo "Filen $i: ($file_name) blev ikke sendt. Filen skal være under <b>". $size_bytes / 1024/1024 ."</b> MB. <br>";
                    } else {
                        #-----------------------------------------------------------#
                        # Denne kode tjekker om filenavnet findes i forvejen.      #
                        #-----------------------------------------------------------#

                        if (file_exists($upload_dir.$file_name)) {
                            echo "Filen $i: ($file_name) findes allerede.<br>";
                        } else {
                            #-----------------------------------------------------------#
                            # Er alt ok går scriptet igang.                            #
                            #-----------------------------------------------------------#

                            if (move_uploaded_file($file_tmp,$upload_dir.$file_name)) {
                                echo "Filen $i: ($file_name) er sendt.<br><br>";
                            } else {
                                echo "Filen $i: kunne ikke sendes.<br>";
                            } #Slut på (move_uploaded_file).
                        } #Slut på (file_exists).
                    } #Slut på (file_size).
                } #Slut på (limitedext).
            } #eSlut på (!is_uploaded_file).
        } #Slut på (for loop).

        # print Tilbage knap.
        echo "";

        ////////////////////////////////////////////////////////////////////////////////
        //Hvis formen ikke sendte så vis hvorfor.
    } else {
            //Bare en overskrift der viser max filstørrelse der kan sendes.
        echo " <h3>Vælg filen der skal oploades.</h3>
            Max fil størrelse = ". $size_bytes / 1024/1024 ." MB. Og kun jpg format";
           
            //Og her er selve formulaen der ses på siden.
        echo " <form method=\"post\" action=\"admin.php?side=nyefoto\" enctype=\"multipart/form-data\">";
           
            // Viser hvad der blev oploadet baseret på($num_files).
        for ($i = 1; $i <= $num_files; $i++) {
            echo "File $i: <input type=\"file\" name=\"file". $i ."\"><br>";
        }
            // Laver en selectbox hvor man kan vælge hvilken mappe billederne skal gemmes.
        echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size_bytes\">
            <br>Vælg mappe hvor billeder skal gemmes.<br><br>
            <select size=\"1\" name=\"mappe\">";
           
            //Dette er stien til de mapper der skal vises. Den starter fra
            //"roden" og så skriver du selv de mapper den skal igennem derfra,
            //de mapper der ligger i sidst nævnte mappe listes op.       
            $up_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/billeder/';
            chdir( "$up_dir" );
            $rep = opendir('.');
            while (false != ($file = readdir($rep)))
            //Hvis der er mapper der ikke skal med på listen navngives de her,
            //Hvis alle skal med udkommenteres den næste linie og "//" fjernes fra linien under.     
            if (is_dir($file) && $file != "." && $file != "..")
            //if (is_dir($file))
          {
            echo"<option>$file</option>";
            }
            echo"</select>
            <input type=\"submit\" name=\"upload_form\" value=\"Send!\">
            </form>";
    }
Avatar billede preppydude Nybegynder
16. november 2009 - 17:56 #4
Du kan tilføje et tjek i funktionen der lader billedet være hvis det er under 800px i bredden.
Avatar billede mibu Nybegynder
16. november 2009 - 19:14 #5
Okay! Har du et bud på hvordan jeg koger de to koder sammen, det er her det hidtil er gået glat for mig, alle mine tidligere forsøg er mislykkedes. Please! :-)
Avatar billede preppydude Nybegynder
16. november 2009 - 20:18 #6
Prøv det her...

if (move_uploaded_file($file_tmp,$upload_dir.$file_name)) {


til:

$info = pathinfo($file_tmp);
$fileName =  basename($file_tmp,'.'.$info['extension']);
if (createThumb($file_tmp, $upload_dir.$fileName."_thumb.jpg") && move_uploaded_file($file_tmp, $upload_dir.$file_name)) {
Avatar billede mibu Nybegynder
16. november 2009 - 22:12 #7
Jeg er sikkert dummere end andre folks børn, nu har jeg prøvet og følge dine forslag. Scriptet oploader, men resizer ikke og den melder fejl i 3 linier (udkommenteret fejlmeddelse står over linien)

Samlet script:

<?php

            function createThumb($tmpPath, $thumbPath, $thumbWidth=800)
{    if (!file_exists($tmpPath))
  return false;
    $imgSize = getimagesize($tmpPath);
    $imgType = (int)$imgSize[2];
    switch ($imgType)
  {
    case 1:
    $imgOrig = imagecreatefromgif($tmpPath);
    break;
    case 1:
    $imgOrig = imagecreatefromjpeg($tmpPath);
    break;
    case 1:
    $imgOrig = imagecreatefrompng($tmpPath);
    break;
    default:
    $imgOrig = imagecreatefromjpeg($tmpPath);
    break;
  }
    $curWidth  = imagesx($imgOrig);
    $curHeight = imagesy($imgOrig);
    $newWidth  = $thumbWidth;
    $newHeight = floor($height*($thumbWidth/$curWidth));
   
//Warning: imagecreatetruecolor(): Invalid image dimensions
    $imgThumb  = imagecreatetruecolor($newWidth, $newHeight);
   
//Warning: imagecopyresampled(): supplied argument is not a valid Image resource
    imagecopyresampled($imgThumb, $imgOrig, 0, 0, 0, 0, $newWidth, $newHeight, $curWidth, $curHeight);

//Warning: imagejpeg(): supplied argument is not a valid Image resource
    imagejpeg($imgThumb, $thumbPath);
    unset($imgThumb);
    unset($imgOrig);
    return true;
}

        //Her beder scriptet om at få navnet på mappen hvor filen skal gemmes.
        //RET IKKE!!! SCRIPTET HENTER SELV OPLYSNINGEN FRA FOREGÅENDE FORMULAR.
        $mappe = $_REQUEST["mappe"];
        $fil = $_REQUEST["nyt_navn"];
       
        //Her skrives stien til mappen hvor oploadede filer skal lande.
        // '.$mappe.'/' skal blive, ret kun det før.
        $upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/billeder/'.$mappe.'/';

        //Antal filer der kan uploades pr. gang.
        $num_files = 2;

        //filstørelse.
        $size_bytes = 6291456; //51200 bytes = 50KB. - 3145728 = 3 MB - 6291456 = 6 MB

        //Filtype der kan uploades: Du kan anvende alle typer,
        //men det er smart at undlade exe. Og hvis du vil være sikker
        //så skriv filtype to gange, både med "små" og "STORT".
        $limitedext = array('.jpg','.JPG','.jpeg','.JPEG');

        //Kontrollerer om bibloteket findes eller ej.
        if (!is_dir("$upload_dir")) {
            die ("Error: Mappen <b>($upload_dir)</b> findes ikke!");
        }

        //check om bbiblotekket er skrivebart.
        if (!is_writeable("$upload_dir")) {
            die ("Error: Mappen <b>($upload_dir)</b> ikke skrivebar.");
        }

        //Hvis der trykkes på send (submit) starter upload
        if (isset($_POST['upload_form'])) {
            echo "<h3>Upload resultat:</h3>";

            //Laver et loop for at uploade filer baseret på ($num_files) number of files.
        for ($i = 1; $i <= $num_files; $i++) {
            //definerer variabler til values.
            $new_file = $_FILES['file'.$i];
            $file_name = $new_file['name'];

            //Ved mellemrum i fil navne erstattes disse med "_".
            $file_name = str_replace(' ', '_', $file_name);
            $file_tmp = $new_file['tmp_name'];
            $file_size = $new_file['size'];

            #-----------------------------------------------------------#
            # Denne koder tjekker om der er valgt en fil eller ej.      #
            #-----------------------------------------------------------#

            if (!is_uploaded_file($file_tmp)) {
                //print error meddelsser og fil nummer.
                echo "Filen $i: er ikke valgt.<br>";
            } else {
                #-----------------------------------------------------------#
                # Denne kode tjekker filens endenavn                        #
                #-----------------------------------------------------------#

                //Hvis du valgte ændre fil endelser, så husk at rette teksten
                //i denne medelsesblok
                $ext = strrchr($file_name,'.');
                if (!in_array(strtolower($ext),$limitedext)) {
                    echo "Filen $i: ($file_name) har forkert endenavn.<br>Du kan kun sende jpg.<br>";
                } else {
                    #-----------------------------------------------------------#
                    # Denne kode kontrolle filstørrelsen                        #
                    #-----------------------------------------------------------#

                    if ($file_size > $size_bytes) {
                        echo "Filen $i: ($file_name) blev ikke sendt. Filen skal være under <b>". $size_bytes / 1024/1024 ."</b> MB. <br>";
                    } else {
                        #-----------------------------------------------------------#
                        # Denne kode tjekker om filenavnet findes i forvejen.      #
                        #-----------------------------------------------------------#

                        if (file_exists($upload_dir.$file_name)) {
                            echo "Filen $i: ($file_name) findes allerede.<br>";
                        } else {
                            #-----------------------------------------------------------#
                            # Er alt ok går scriptet igang.                            #
                            #-----------------------------------------------------------#

                          // if (move_uploaded_file($file_tmp,$upload_dir.$file_name)) {
                            //test
                            $info = pathinfo($file_tmp);$fileName =  basename($file_tmp,'.'.$info['extension']);
                            if (createThumb($file_tmp, $upload_dir.$fileName."_thumb.jpg") && move_uploaded_file($file_tmp, $upload_dir.$file_name)) {
                            //test
                                echo "Filen $i: ($file_name) er sendt.<br><br>";
                            } else {
                                echo "Filen $i: kunne ikke sendes.<br>";
                            } #Slut på (move_uploaded_file).
                        } #Slut på (file_exists).
                    } #Slut på (file_size).
                } #Slut på (limitedext).
            } #eSlut på (!is_uploaded_file).
        } #Slut på (for loop).

        # print Tilbage knap.
        echo "";

        ////////////////////////////////////////////////////////////////////////////////
        //Hvis formen ikke sendte så vis hvorfor.
    } else {
            //Bare en overskrift der viser max filstørrelse der kan sendes.
        echo " <h3>Vælg filen der skal oploades.</h3>
            Max fil størrelse = ". $size_bytes / 1024/1024 ." MB. Og kun jpg format";
           
            //Og her er selve formulaen der ses på siden.
        echo " <form method=\"post\" action=\"admin.php?side=nyefoto\" enctype=\"multipart/form-data\">";
           
            // Viser hvad der blev oploadet baseret på($num_files).
        for ($i = 1; $i <= $num_files; $i++) {
            echo "File $i: <input type=\"file\" name=\"file". $i ."\"><br>";
        }
            // Laver en selectbox hvor man kan vælge hvilken mappe billederne skal gemmes.
        echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size_bytes\">
            <br>Vælg mappe hvor billeder skal gemmes.<br><br>
            <select size=\"1\" name=\"mappe\">";
           
            //Dette er stien til de mapper der skal vises. Den starter fra
            //"roden" og så skriver du selv de mapper den skal igennem derfra,
            //de mapper der ligger i sidst nævnte mappe listes op.       
            $up_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/billeder/';
            chdir( "$up_dir" );
            $rep = opendir('.');
            while (false != ($file = readdir($rep)))
            //Hvis der er mapper der ikke skal med på listen navngives de her,
            //Hvis alle skal med udkommenteres den næste linie og "//" fjernes fra linien under.     
            if (is_dir($file) && $file != "." && $file != "..")
            //if (is_dir($file))
          {
            echo"<option>$file</option>";
            }
            echo"</select>
            <input type=\"submit\" name=\"upload_form\" value=\"Send!\">
            </form>";
    }

?>
Avatar billede mibu Nybegynder
26. august 2010 - 17:00 #8
lukker
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