if ($file_size > 2097152) { echo "Billedet er større end 2 Mb, og kan derfor ikke uploades."; } elseif ($image_type[1] !== "jpeg" && $image_type[1] !== "png" && $image_type[1] !== "gif") { echo "Billedet er af typen " . $image_type[1] . ", og kan derfor ikke uploades. Formatet skal være JPEG, JPG, GIF eller PNG"; } else {
//Image resize //Target size in pixel $target = 200; //px
if ($width > $height) { $percentage = ($target / $width); } else { $percentage = ($target / $height); } //gets the new value and applies the percentage, then rounds the value $thumb_width = round($width * $percentage); $thumb_height = round($height * $percentage);
//Create thumbnail $thumb = imagecreatetruecolor($thumb_width, $thumb_height); $thuumb = imagecopyresampled ($thumb, $_FILES["image"]["tmp_name"], 0, 0, 0, 0, $width, $height, $thumb_width, $thumb_height); //imagecopyresampled(resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h) if ($image_type[1] == "jpeg") { $thumb = imagejpeg($thuumb); } elseif ($image_type[1] == "png") { $thumb = imagepng($thuumb); } elseif ($image_type[1] == "gif") { $thumb = imagegif($thuumb); }
Din $_FILES["image"]["tmp_name"] er IKKE en Image resource. Du skal, ud fra hvilken type dit billede er, lave en image resource med funktionerne imagecreatefromgif, imagecreatefromjpeg eller imagecreatefrompng.
@ dkfire - Det virkede delvist.. Nu får jeg et sort billede. Jeg har prøvet at lave en fputs til at skrive informationerne til billedet, men det ser ikke ud til at virke.
Du tager også og ligger det forkerte billede ind i din database: INSERT INTO .... `thumb` = '" . $thumb . "', .... kan jo sætte et tomt billede ind. Tror du skal bruge lade være med at bruge variabel navne flere forskellige gange. Prøv at skrive din $image_type[1] ud for at se om den giver det rigtige til dine if sætninger.
jakobdo - Jeg har brugt lidt fra dine artikler, men dog ikke meget, da jeg står i en situation hvor jeg helst ikke vil gemme nogle filer på webserveren, men i stedet vil skrive det hele til databasen med det samme :) - og desuden virker resten af mit upload script jo udemærket, det er udelukkende resize jeg har problemer med :)
dkfire - Jeg har haft udskrevet samtlige variabler, og lige netop $image_type[1] skulle jo meget gerne være den samme hele vejen igennem scriptet da det thumbnail jeg vil generere skal være samme filformat som det uploadede billede er fra starten af :)
if ($file_size > 2097152) { echo "Billedet er større end 2 Mb, og kan derfor ikke uploades."; } elseif ($image_type[1] !== "jpeg" && $image_type[1] !== "png" && $image_type[1] !== "gif") { echo "Billedet er af typen " . $image_type[1] . ", og kan derfor ikke uploades. Formatet skal være JPEG, JPG, GIF eller PNG"; } else {
//Image resize //Target size in pixel $target = 200; //px
if ($width > $height) { $percentage = ($target / $width); } else { $percentage = ($target / $height); } //gets the new value and applies the percentage, then rounds the value $thumb_width = round($width * $percentage); $thumb_height = round($height * $percentage);
//Create thumbnail switch($image_type[1]) { case 'jpeg': case 'jpe': case 'jpg': $srcim = imagecreatefromjpeg( $filename ); break; case 'gif': $srcim = imagecreatefromgif( $filename ); break; case 'png': $srcim = imagecreatefrompng( $filename ); break; default: return false; } $thumb = imagecreatetruecolor($thumb_width, $thumb_height); $fput_data = @imagecopyresampled ($thumb, $srcim, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); //imagecopyresampled(resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
switch($image_type[1]) { case 'jpeg': case 'jpe': case 'jpg': imagejpeg( $thumb, $thumb_name, 100 ); break; case 'gif': imagegif( $thumb, $thumb_name ); break; case 'png': $png_q = floor( abs( 100 / 10 - 9.9 ) ); imagepng( $thumb, $thumb_name, $png_q ); break; default: return false; }
Hvad giver den af fejl ?? Hvad sker der hvis du fjerner @ ved @imagecopyresampled() ?
Indeholder thumb i databasen noget data ??
Jeg kunne godt tænke mig at se hvordan du har lavet show_thumb.php.
Men der er en stor fejl du laver i den kode: $fp = fopen($thumb_name, 'a+'); $fput = fwrite($fp, $fput_data); $thumb = fread($fp, filesize($thumb_name)); $thumb = addslashes($thumb); fclose($fp);
Først åbner du en fil du allerede har lavet med imagejpeg, imagegif eller imagepng. Dernæst forsøøger du at ligge ukomprimeret billeddata ned i filen. Derefter læser du den samme data og tilføjer addslashes. Det giver slet ingen mening at bruge ukompromeret billeddata, det kan du jo ikke bruge til at vise billeder med. Du skal istedet bruge imagejpeg, imagegif eller imagepng til at lave den billeddata som du vil ligge i databasen.
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/jordegern.dk/public_html/inc/functions.php on line 119, som jo egentlig nok er roden til alt ondt i mit tilfælde..
Jeg har nu fjernet den store fejl du påpegede - Smed det egentlig ind fordi jeg vidste det virkede længere oppe i mit script, men der er det selvfølgelig heller ikke rå billeddata.
Ja, den ligger i en variabel der hedder $final_thumb :)
Efter jeg har rettet dette til giver den lidt flere fejl:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: Unable to access 2008_01_24_cat_not_drunk.jpg in /var/www/jordegern.dk/public_html/inc/functions.php on line 107
Warning: imagecreatefromjpeg(2008_01_24_cat_not_drunk.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /var/www/jordegern.dk/public_html/inc/functions.php on line 107
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/jordegern.dk/public_html/inc/functions.php on line 119
Linie 107 og omliggende:
switch($image_type[1]) { case 'jpeg': case 'jpe': case 'jpg': $srcim = imagecreatefromjpeg( $file_name ); // LINE 107 break; case 'gif': $srcim = imagecreatefromgif( $file_name ); break; case 'png': $srcim = imagecreatefrompng( $file_name ); break; default: return false; }
Så fik jeg det til at virke. Jeg opdagede at den alligevel smed en fil på webserveren, så jeg lavede en fopen på den, læste indholdet, og smed det ind i databasen på den måde, og sletter det så igen med unlink bagefter :)
if ($file_size > 2097152) { echo "Billedet er større end 2 Mb, og kan derfor ikke uploades."; } elseif ($image_type[1] !== "jpeg" && $image_type[1] !== "png" && $image_type[1] !== "gif") { echo "Billedet er af typen " . $image_type[1] . ", og kan derfor ikke uploades. Formatet skal være JPEG, JPG, GIF eller PNG"; } else {
//Image resize //Target size in pixel $target = 200; //px
if ($width > $height) { $percentage = ($target / $width); } else { $percentage = ($target / $height); } //gets the new value and applies the percentage, then rounds the value $thumb_width = round($width * $percentage); $thumb_height = round($height * $percentage);
//Create thumbnail switch($image_type[1]) { case 'jpeg': case 'jpe': case 'jpg': $srcim = imagecreatefromjpeg( $tmp_name ); break; case 'gif': $srcim = imagecreatefromgif( $tmp_name ); break; case 'png': $srcim = imagecreatefrompng( $tmp_name ); break; default: return false; } $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled ($thumb, $srcim, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); //imagecopyresampled(resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
switch($image_type[1]) { case 'jpeg': case 'jpe': case 'jpg': imagejpeg( $thumb, $thumb_name, 100 ); break; case 'gif': imagegif( $thumb, $thumb_name ); break; case 'png': $png_q = floor( abs( 100 / 10 - 9.9 ) ); imagepng( $thumb, $thumb_name, $png_q ); break; default: return false; }
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.