Avatar billede sbk-eraser Nybegynder
24. november 2007 - 02:22 Der er 1 løsning

imagecreatetruecolor funktion fejler ved genkald

Hej,
Jeg har et problem med et script der skal gemme et billede i to forskellige størrelser, derfeter uploade originalen.
Jeg kan godt uploade jpeg, og ikke-animeret ikke-transparente gif filer. fejlen kommer når jeg vil uploade en animeret gif, transparent gif, eller et png.
Fejlen består i at den uploader filen, danner det mindste thumbnail, og så dør ved medium-size billede.
Koden til at generere thumbnail er her;

function createScaledImage($max_x, $max_y, $ext, $uploadsDirectory, $newName, $nameCount, $type){
    $uploadedfile = $_FILES['file']['tmp_name'];
    $resizedImageName =  $uploadsDirectory.$newName."-".$nameCount.$type.".".$ext;

// Take proper action according to extension
    switch ($ext) {
        case 'jpg':
        case 'jpeg': $im = imagecreatefromjpeg ($uploadedfile);
            break;
        case 'gif': $im = imagecreatefromgif  ($uploadedfile);
            break;
        case 'png': $im = imagecreatefrompng  ($uploadedfile);
            break;
        default: $abort = true;
            break;
    }
   
// If extension is accepted, calculate new dimensions
    if (!isset($abort)) {
        $x = imagesx($im);
        $y = imagesy($im);
          if ($x > $max_x || $y > $max_y){
            if (($max_x/$max_y) < ($x/$y)) {
                $save = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x));
            }
            else {
                $save = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y));
            }
        }
// Calculate and define transparency
        $originaltransparentcolor = imagecolortransparent( $im );
        if ($originaltransparentcolor >= 0 && $originaltransparentcolor < imagecolorstotal( $im )) {
            $transparentcolor = imagecolorsforindex( $im, $originaltransparentcolor );
/*LINE99*/        $newtransparentcolor = imagecolorallocate($save, $transparentcolor['red'], $transparentcolor['green'], $transparentcolor['blue']);
            imagefill( $save, 0, 0, $newtransparentcolor );
            imagecolortransparent( $save, $newtransparentcolor );
        }

// Create the resized image       
        imagecopyresized($save, $im, 0, 0, 0, 0, imagesx($save), imagesy($save), $x, $y);
        switch ($ext) {
            case 'jpg' :
            case 'jpeg': imagejpeg($save, $resizedImageName, 100);
                break;
            case 'gif' : imagegif($save, $resizedImageName);
                break;
            case 'png' : imagepng($save, $resizedImageName);
                break;
        }
       
//Remove the temporary files
        imagedestroy($im);
        imagedestroy($save);
    }
    else{
        error('Du kan kun uploade billeder af typen jpg, jpeg, gif, png', $uploadForm);
    }
}

createScaledImage(175,125, $ext, $uploadsDirectory, $newName, $nameCount, "-tn");
createScaledImage(750,550, $ext, $uploadsDirectory, $newName, $nameCount, "-md");

Efter dette bliver der udført:
------------------------------------------
@move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadFilename)
    or error('Utilstrækkelig adgang til upload-destinationen', $uploadForm);

------------------------------------------

@move_uploaded_file bliver udført, eftersom den genererer filnavn-tn.ext og filnavn.ext, og ved jpeg/ikke-animeret ikke-transparent gif, genererer den også filnavn-md.ext.

men ved png, og animeret/transparente gif får jeg denne fejl;
------------------------------------------
Warning: imagecolorallocate(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 99

Warning: imagefill(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 100

Warning: imagecolortransparent(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 101

Warning: imagesx(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 105

Warning: imagesy(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 105

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 105

Warning: imagegif(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 110

Warning: imagedestroy(): supplied argument is not a valid Image resource in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 118

Warning: Cannot modify header information - headers already sent by (output started at /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php:99) in /customers/notsocrazyhorse.dk/notsocrazyhorse.dk/httpd.www/woco/upload.image.processor.php on line 142
------------------------------------------

Hvis jeg fjerner funtionen, og bare eksekverer koden inde i funktionen en enkelt gang, så er der ingen problemer, ligemeget om det er animeret gif eller transparent png.
Linie 99 er mærket i koden med /*LINE99*/

Hvis nogen kan hjælpe vil det virkelig redde mig fra nogle søvnløse nætter ;)
Avatar billede sbk-eraser Nybegynder
27. december 2007 - 11:18 #1
Hele funktionen er omstruktureret, så nu virker det.
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