Avatar billede sansalvador Nybegynder
17. december 2002 - 22:18 Der er 19 kommentarer og
1 løsning

Lave bette 60x60 billede ud fra større bilelde

Hvordan kan man, hvis man uploader et billede lave det om i php, så det bliver til en mindre opløsning fx 60x60 ...

Upload-tingen har jeg styr på .. det er bare til at lave billedet mindre jeg skal have hjælp til..

På forhånd tak..
Avatar billede jeg_var_gangsta Nybegynder
17. december 2002 - 22:27 #1
lytter lige med, jeg kunne også godt bruge en thumbnail-generator :)
Avatar billede criterius.dk Nybegynder
18. december 2002 - 08:25 #2
jeg_var_gangsta >>
Hvis du bare vil lytte med, kan du nøjes med at markere email-boksen og trykke udfør.

Derved får vi andre ikke en mail, og og dit indlæg fylder ikke op i databasen. Men du får stadig en email når der er nye indlæg :o)
Avatar billede rzj Nybegynder
18. december 2002 - 10:01 #3
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?

<?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
list($nameOfFile, $ext) = explode(".", $renamed);

//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");
        }
?>
Avatar billede rzj Nybegynder
18. december 2002 - 10:07 #4
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
Avatar billede avminarm Juniormester
18. december 2002 - 10:30 #5
rzj>> er det fra et upload script?
Avatar billede rzj Nybegynder
18. december 2002 - 10:36 #6
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...
Avatar billede rzj Nybegynder
18. december 2002 - 10:52 #7
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

//CREATE THUMBNAIL
osv
Avatar billede avminarm Juniormester
18. december 2002 - 12:28 #8
rzj>> kunne man lokke dig til at maile scriptet (med upload mv.) til exp@avminmusearm.dk ?? - hvorfor chmod'er du den egentlig??
Avatar billede rzj Nybegynder
18. december 2002 - 12:56 #9
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
       
    $file_name = $_FILES['file']['name'];
        $file_size = $_FILES ['file']['size'];
        $file = $_FILES['file']['tmp_name'];
       
//Directory in which uploaded file will be placed temporaly
        $temp_dir = "/net/users/a37/699/basewebdk/phpupload/"; //Edit
        $dest = $temp_dir.$file_name;
       
//Array containing valid file types
        $formats = array('jpg');
       
//Definition of filename
        $file_name = stripslashes($file_name);

//Set max filesize
        $size = 2000000;

//Get filename and ext
        list($filename, $ext) = explode(".", $file_name);
        $ext = strtolower($ext);

//Define name of file when renamed
        $today = date("dmY-His");
       
        $file_name = utf8_encode($filename);
        $renamed = $today.".".$ext;
       
//Directory to place file ones uploaded
        $final_dir = "/net/users/a37/699/basewebdk/www/frida/galleri/Nyeste/";
       
    //BIG thumb parameters
        $quality_big = 75;
        //$thumb_big = $final_dir;
       
        //SMALL Thumb parameters
        //set quality parameter
        $quality = 40;
        //$thumb = $final_dir."thumbs/";
       
            //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");
        }
   
        //Try to rename file. Delete on failure
        if(@!rename($temp_dir.$file_name, $final_dir.$renamed)){
            unlink($temp_dir.$file_name);
    echo '<script type="text/javascript">uploadWin = window.open("uploadAlert.php?closeWin=2","uploadWin", "width=500, height=200");</script>';
            error("Kunne ikke omdøbe fil - prøv igen");
        }
        chmod($final_dir.$renamed, 0644);
    //BIG THUMBNAIL
        $src_dim = getimagesize($final_dir.$renamed);
       
        //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");
        }

        @unlink($temp_dir.$renamed);       

        //send_mail($valid_user, $renamed, $today);       
       
    return $renamed;       
}

function error($msg){
$top_html = ""; //edit   
$prefix = "<h4>Der opstod en fejl!</h4><ul type=\"square\">";
$error_txt = "</ul><br><br>
        <a href=\"java script:history.back()\">Gå tilbage.</a>"; //edit
$bottom_html = ""; //edit
    $msg = $prefix."<li>".$msg;
    echo $top_html.$msg.$error_txt.$bottom_html;
    exit;
}
?>
Avatar billede xyborx Nybegynder
18. december 2002 - 14:36 #10
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
Avatar billede avminarm Juniormester
18. december 2002 - 15:44 #11
xyborx>> den virker ikke på højden i testeren?

rzj>> tak ;-)
Avatar billede xyborx Nybegynder
18. december 2002 - 19:47 #12
Der var nogle bugs. De skulle være rettet nu (version 1.3 alpha) :o)
Avatar billede sansalvador Nybegynder
18. december 2002 - 20:38 #13
heh ... her er man væk i 24 timer, og så har i overspammet det hele ;)))

EJ, tak skal I/du sq have ...

Mvh Sam
Avatar billede xyborx Nybegynder
19. december 2002 - 07:53 #14
Tak for point :)
Ved nu ikke om jeg fortjener dem allesammen.. Ellers må I andre lige skrive, så skal jeg nok oprette et spørgsmål til overførslen
Avatar billede avminarm Juniormester
19. december 2002 - 13:23 #15
xyborx>>  http://www.xyborx.dk/image.php?image=biglogo&width=150&height=600

Prøv link - den viser stadigvæk ikke ændringer i højde ??
Avatar billede xyborx Nybegynder
19. december 2002 - 16:38 #16
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 :)
Avatar billede avminarm Juniormester
21. december 2002 - 19:47 #17
ok ;-)
Avatar billede rasmus55 Nybegynder
24. marts 2004 - 20:09 #18
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) ?
Avatar billede rzj Nybegynder
25. marts 2004 - 01:48 #19
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

Velkommen til PHP verdenen ;-)
/raz
Avatar billede rasmus55 Nybegynder
25. marts 2004 - 02:05 #20
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
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