Avatar billede dazzy Nybegynder
08. juni 2010 - 17:48 Der er 12 kommentarer

Image thumbnail der ikke virker 100%

Hej derude

Jeg har en side hvor jeg skal resize nogle billeder. Her bruger jeg dette script:

   
//make sure this directory is writable!
$path_thumbs = "files/thumb";       
//the new width of the resized image, in pixels.
$img_thumb_width = 200; //
$extlimit = "no"; //Limit allowed extensions? (no for all extensions allowed)
//List of allowed extensions if extlimit = yes
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");       
//the image -> variables
$image = time().substr($_FILES['vImage']['name'],strrpos($_FILES['vImage']['name'],'.'));
$file_type = $_FILES['vImage']['type'];
$file_name = $_FILES['vImage']['name'];
$file_size = $_FILES['vImage']['size'];
$file_tmp = $_FILES['vImage']['tmp_name'];
//check if you have selected a file.
if(!is_uploaded_file($file_tmp)){
echo "Error: Please select a file to upload!. <br>--<a href=\"$_SERVER[PHP_SELF]\">back</a>";
exit(); //exit the script and don't process the rest of it!
}
//check the file's extension
$ext = strrchr($file_name,'.');
$ext = strtolower($ext);

//so, whats the file's extension?
$getExt = explode ('.', $file_name);
$file_ext = $getExt[count($getExt)-1];
//create a random file name
$rand_name = md5(time());
$rand_name= rand(0,999999999);
//the new width variable
$ThumbWidth = $img_thumb_width;
$ThumbWidth = 100; //
/////////////////////////////////
// CREATE THE THUMBNAIL //
////////////////////////////////

//keep image type
if($file_size){
if($file_type == "image/pjpeg" || $file_type == "image/jpeg"){
$new_img = imagecreatefromjpeg($file_tmp);
}elseif($file_type == "image/x-png" || $file_type == "image/png"){
$new_img = imagecreatefrompng($file_tmp);
}elseif($file_type == "image/gif"){
$new_img = imagecreatefromgif($file_tmp);
}
//list the width and height and keep the height ratio.
list($width, $height) = getimagesize($file_tmp);
//calculate the image ratio
$imgratio=$width/$height;
if ($imgratio>1){
$newwidth = $ThumbWidth;
$newheight = $ThumbWidth/$imgratio;
}else{
$newheight = $ThumbWidth;
$newwidth = $ThumbWidth*$imgratio;
}
//function for resize image.
if (function_exists(imagecreatetruecolor)){
$resized_img = imagecreatetruecolor($newwidth,$newheight);
}else{
die("Error: Please make sure you have GD library ver 2+");
}
//the resizing is going on here!
imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//finally, save the image
ImageJpeg ($resized_img,"files/thumb/$image");
ImageDestroy ($resized_img);
ImageDestroy ($new_img);


}

move_uploaded_file ($file_tmp, "files/thumb/$image");

Dette er noget jeg har fundet fra diverse sider som jeg har prøvet mig frem med og det virker også nogenlunde...
Men når jeg uploader billeder over 1mb går det helt galt og der bliver ikke vist noget på siden overhovedet.

Nogen løsningsforslag ?
på forhånd tak
Avatar billede dkfire Nybegynder
08. juni 2010 - 17:54 #1
Upload mindre billeder ??
Hvis du slår fejlbeskeder til vil du sikkert se at php løber tør for hukommelse når den skal til at behandle store billeder.
Avatar billede repox Seniormester
08. juni 2010 - 17:56 #2
Når dine billeder bliver større end 1MB er problemet nok at din PHP konfiguration ikke tillader større filsending end det.

Prøv at lægge dette i din .htaccess (eller lav en .htaccess):
php_value post_max_size 20M
php_value upload_max_filesize 20M
Avatar billede dazzy Nybegynder
08. juni 2010 - 17:59 #3
Kan jeg godt lige prøve,

Men skal siges at jeg godt kan uploade 4 mb store billeder, bare ikke resize dem med dette script :)
Avatar billede repox Seniormester
08. juni 2010 - 18:02 #4
Det er også fordi du bruger en vildt forældet teknologi - GD2 er noget forældet i forhold til imagemagick; samtidig giver imagemagick bedre resultater.

Du kan også tilføje denne linie til din .htaccess for at komme nemt uden om den begrænsning:
php_value memory_limit 20M
Avatar billede dazzy Nybegynder
08. juni 2010 - 18:04 #5
okay, kan være jeg skal kigge på imagemagick så istedet, synes bare det er svært at finde noget nyt, det meste er jo æld gammelt af det jeg finder
Avatar billede repox Seniormester
08. juni 2010 - 18:21 #6
Tja, sådan er det jo med IT...
Det du ved idag, var brugbart igår.
Det du vidste igår, var brugbart for en måned siden.
Det du vidste for en måned siden, er omtrent lige så brugbar information som teknikker til hvordan du kan slå dinosaurer ihjel med en trækølle...
Avatar billede dazzy Nybegynder
08. juni 2010 - 19:54 #7
Ved godt at det er gammelt men vil være godt at kunne få det til at lykkes, det behøves ikke at være så avanceret i denne omgang..

Nu har jeg fundet ud af hvad jeg har lov til som upload
print "<br/>Max upload size ".ini_get('upload_max_filesize');
print "<br/>Max post upload size ".ini_get('post_max_size');

Og dette fik jeg:

Max upload size 12M
Max post upload size 12M

Så problemet kan jo ikke være at der ikke er nok "plads" at uploade på.
Avatar billede repox Seniormester
08. juni 2010 - 22:12 #8
Prøvede du mit forslag i #4?
Avatar billede dazzy Nybegynder
09. juni 2010 - 17:57 #9
Har også testet den nu, der får jeg 32M
Avatar billede mcardle Nybegynder
10. juni 2010 - 04:43 #10
Hvis du ønsker at prøve med ImageMagick, så ser det sådan her ud:

//the image -> variables
$file_type = $_FILES['vImage']['type'];
$file_name = $_FILES['vImage']['name'];
$file_size = $_FILES['vImage']['size'];
$file_tmp = $_FILES['vImage']['tmp_name'];
$image = time().$file_name;
$ThumbWidth = 100;

move_uploaded_file($file_tmp, "files/thumb/$image");

list($width, $height) = getimagesize("files/thumb/$image");

$imgratio = $width/$height;

if ($imgratio>1){
  $newwidth = $ThumbWidth;
  $newheight = $ThumbWidth/$imgratio;
}else{
  $newheight = $ThumbWidth;
  $newwidth = $ThumbWidth*$imgratio;
}

exec("convert files/thumb/$image -resize ".$newwidth."x".$newheight." files/thumb/$image");

Denne her metode gemmer ikke den originale størrelse, den gemmer oven i den gamle.

Der er muligvis nogle bugs, for jeg har ikke testet det og jeg har bare brugt dine udregningsmetoder til udregning af ratioen, men du kan jo lige skrive, hvis det ikke virker.

Du skal have ImageMagick installeret på serveret for det virker, naturligvis, men hvis du har one, gigahost, web10 eller sådan et, så er det installeret.

Test og meld tilbage

//mcardle
Avatar billede dazzy Nybegynder
10. juni 2010 - 22:25 #11
Har jeg prøvet og virker, altså den uploader billedet og for den til at fylde mindre.

Der er dog kun en difference fra 4.8 mb til 4.7mb

Har prøvet med thumb width på 10
Avatar billede dazzy Nybegynder
10. juni 2010 - 22:41 #12
Hov, den bliver kun resized fra 4.8 til 4.7 ;)
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