Kræver: stien: /original_images/thumbs/ (hvor original billeder ligger i original_images og thumbs bliver lagt i thumbs) chmod: 777 på begge bibs GDLib: GDLib 2.0 eller højere installeret
Jeg har tilpasset nedenstående lidt da jeg lige har taget det ud af en større sammenhæng. Man burde jo lave det til en funktion osv. Men spørg hvis der er problemos. Princippet kan du ihvertfald bruge. Vil iøvrigt meget gerne have feedback hvis nogle ligger inde med en smartere udgave?
//CREATE THUMBNAIL //Get size of big image $src_dim = getimagesize($final_dir.$renamed);
//Set correct dimensions for new image (thumb) if($src_dim[0] < $src_dim[1]){ $dest_width = $width; $dest_height = $height; } else { $dest_width = $height; $dest_height = $width; } //Create thumb dependent of image type if($ext == "jpg"){
//Create a image in buffer from source image $src_img = imagecreatefromjpeg("$final_dir"."$renamed");
//Create distination image in buffer with correct dimensions $dst_img = imagecreatetruecolor($dest_width,$dest_height); //should be imagecreatetruecolor, but no supported by azero
//Copy the image from source to destination imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, //should be imagecopyresampled, but no supported by azero $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $final_dir."/thumbs/".$renamed, $quality);
//Destroy the buffers imagedestroy($src_img); imagedestroy($dst_img);
} else { echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.jpg"); } ?>
Læg mærke tli at den kun tager jpg format, men det kan du ret simpelt lave om ved at kopiere hele if($ext == "jpg"){ ...}else{} klausulen og lave if($ext == "png"){} & if($ext == "gif"){} klausuler (jeg er dog ikke sikker på at gif formatet er supporteret af GDLib 2.0. Det var vist nok supportere i GDLib 1.6, men blev så fjernet. Du kan læse lidt om GDLib her: http://phpwizard.dk/gdlib.php
avminarm>> ja, det er det. Jeg uploader en fil, flytter filen, chmod'er den og laver et thumb af billedet som placeres i undermappe (kaldet thumbs). Men ovenstående er pillet ud af upload scriptet, da spørgsmålet kun gik på resizeing og spørgeren allerede havde fået upload til at virke...
mhmh, ja. Det kan godt give problemer. Da $quality ikke er defineret. Så i starten af scriptet skal selvfølgeligt stå: <?php $final_dir = "the_dir_your_original_image_is_placed/"; //Edit $renamed = "the_name_of_your_original_image"; //Edit $width = "the_width_of_thumbnail_in_pixels_eg_60"; //Edit $height = "the_height_of_thumbnail_in_pixels_eg_60"; //Edit $quality = 60; //Edit
list($nameOfFile, $ext) = explode(".", $renamed); //get extension of file
næ, jeg tror det skal være muligt for alle her på eksperten at se alt kode og svar. Så derfor poster jeg det her. Men det er gammelt og ikke særlig 'fed' kode (men det virker): Jeg laver to 'thumbs'. Et stort og et lille. Så har jeg nemlig fuld kontrol med størrelsen af de billeder, der kommer til at blive præsenteret. Ellers spørg løs, hvis det ikke virker. Grunden til $temp_dir skal findes hos min udbyder, der kun acceptere uploads til et bestemt dir. Jeg flytter derfor filen efter tjek for diverse upload-hacks. Jeg chmod'er for at filen (der ellers har 'nobody' rettigheder (PHP gør sådan ved filer) kan tilgåes af klienter (e.g. browsere) og vises. Fejlmeddelelser udskrives med funktionen error(); God fornøjelse. <?php function upload_file() { global $file, $file_name, $file_size; //vars from form may be depricated
//Directory in which uploaded file will be placed temporaly $temp_dir = "/net/users/a37/699/basewebdk/phpupload/"; //Edit $dest = $temp_dir.$file_name;
//Check if file has zero size if($file_size == 0){ error("Filen er tom!"); } //Check if file is above limit for file if($file_size > $size){ echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; $file_size = round($file_size/1000, 0); $size_in_kb = $size/1000; error("Filen er for stor - $file_size KB! <br> Filen må højst fylde $size_in_kb KB.<br>\n Prøv evt. at gemme filen i et andet format eller gøre billedet mindre."); }
//Check if file is uploaded via HTTP POST if(!is_uploaded_file($file)){ echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Muligt 'crackattack' fra uploadet fil!"); }
//Check if filetype is valid if(!in_array($ext, $formats)) { echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Forkert filtype. Det er kun muligt at uploade filer af filtypen *.jpg"); }
//Change attribute of file umask(0000);
//Failed to move file on server or greenlight for "go" if(@!move_uploaded_file ($file, $temp_dir.$file_name)){ unlink($final_dir.$file_name); echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Unable to move file"); }
//Set correct dimensions for new image (thumb) if($src_dim[0] < $src_dim[1]){ $dest_width = 350; $dest_height = 500; } else { $dest_width = 500; $dest_height = 350; } //Create thumb dependent of image type if($ext == "jpg"){
//Create a image in buffer from source image $src_img = imagecreatefromjpeg("$final_dir"."$renamed");
//Create distination image in buffer with correct dimensions $dst_img = imagecreatetruecolor($dest_width,$dest_height); //should be imagecreatetruecolor, but no supported by azero
//Copy the image from source to destination imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, //should be imagecopyresampled, but no supported by azero $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $final_dir.$renamed, $quality_big);
//Destroy the buffers imagedestroy($src_img); imagedestroy($dst_img);
} else { echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.jpg"); }
//SMALL THUMBNAIL //Get size of big image $src_dim = getimagesize($final_dir.$renamed);
//Set correct dimensions for new image (thumb) if($src_dim[0] < $src_dim[1]){ $dest_width = 66; $dest_height = 100; } else { $dest_width = 100; $dest_height = 66; } //Create thumb dependent of image type if($ext == "jpg"){
//Create a image in buffer from source image $src_img = imagecreatefromjpeg("$final_dir"."$renamed");
//Create distination image in buffer with correct dimensions $dst_img = imagecreatetruecolor($dest_width,$dest_height); //should be imagecreatetruecolor, but no supported by azero
//Copy the image from source to destination imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, //should be imagecopyresampled, but no supported by azero $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $final_dir."/thumbs/".$renamed, $quality);
//Destroy the buffers imagedestroy($src_img); imagedestroy($dst_img);
} else { echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>'; error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.jpg"); }
hehe.. Efter at være blevet inspireret af det her spørgsmål, har jeg selv skrevet en lille function som måske kan hjælpe lidt. Det kan jo ikke skade at tage et kig :) http://www.xyborx.dk/image.php
Ahh.. Tror du har misset det lidt. De værdier man angiver betragtes som maximum værdier. Det er beregnet til at lave thumbnails, dvs formindskelser. Det kan være jeg indbygger forstørrelse senere :)
rzj>> Jeg er ganske uerfaren udi php(startede så småt i sidste uge, konservativ ASPer, php ser dog rimeligt interessant ud!), men scriptet ser fedt ud.
Jeg har bare det problem at jeg ikke kan regne ud hvordan form'en der sender billedet afsted skal opbygges... Er der en chance for at du stadig har form scriptet liggende på din HD 8o) ?
rasmus55>> Tro mig, der er rigtig mange fede upload scripts derude der er federe end det der gamle script :-) Kig eksempelvis på www.hotscripts.com eller lign.
Formen er standard, den kan du finde eksempler på mange steder, men den kunne eksempelvis se sådan her ud: <form enctype="multipart/form-data" action="upload.php" method="post"> <input name="file" file="file" /> <input type="submit" value="Upload" /> </form> Når fomrularen sendes så oprettes automatisk en del andre variable i $_FILES[] som er et associativt array. Dvs at du kan tilgå de forskellige vars: $_FILES['files']['name'] = navnet på den fil der er uploadet $_FILES['files']['size'] = størrelsen på den fil der er uploadet osv. Mere info: http://dk.php.net/features.file-upload
raz> vær hilset, navnebroder! Jeg havde en snigende fornemmelse af at der var noget med nogle arrays involveret 8o) Kigger lige lidt på det der link til php.net... er kommet lidt mere i gang, men er der ikke helt.
Bortset fra det kan jeg godt forstå folk der sværger til php nu. At lave det samme stunt i ASP er enten: 1. Meget dyrt, eller 2. For folk der tænker binært 8o) /Rasmus
Synes godt om
Ny brugerNybegynder
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.