Avatar billede elskermad.dk Nybegynder
17. maj 2005 - 15:58 Der er 3 kommentarer og
1 løsning

billeder bliver kornede ved upload og konventering

hej eksperter!

jeg har et kanont træls problem... :(

jeg har nedenstående funktion jeg bruger til at behandle billeder jeg oploader til et site! det er meget store billeder jeg oploader (altså højde/bredde) og derfor laver jeg to kopier - en hel lille en (thumb) og et lidt større (eks)

problemet er at de to mindre billeder jeg laver bliver meget kantede og ikke særligt pæne at se på, og det er virkelig generende!

jeg vil _meget_ gerne være fri for manuelt med photoshop at skulle omkonventere alle billederne (der er mange) også manuelt igen oploade 3 forskellige billeder til hvert billede!

er der nogen der kender en bedre måde at gøre det jeg forespørger end i den funktion jeg bruger?

funktionen ser således her ud:

<?

function uploadimage($source) {
    $felt             = $_FILES[$source];
    $phptime         = time();
    $maxsize        = 2048;
   
    if ($felt["size"] > 0) {
        $kb         = $maxsize;
        $byte        = $kb*1024;
           
        $unikname     = $phptime . rand(1000, 9999);
        $arg         = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". round(($kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!");
           
        if ($felt["error"] == 0) {
            if (true == ($str = getimagesize($felt["tmp_name"]))) {
                if ($str[2] <= 3) {
                    if ($felt["size"] <= $byte) {
                        // mulige filendelser
                        $filetypes     = array(1 => "gif", 2 => "jpg", 3 => "png");
                       
                        // filtype
                        $filtypen     = strtr($str[2], $filetypes);
                       
                        // filnavn
                        $upname     = $unikname .".". $filtypen;
                       
                        // stier
                        $fra         = $felt["tmp_name"];
                       
                        $til         = "../images/produkt/" . $upname;
                        $thumb        = "../images/produkt/thumb/" . $upname;
                        $eks        = "../images/produkt/eks/" . $upname;
                       
                        // størrelsesforhold
                        $forhold = $str[1]/$str[0];
                        $nyhojde = $forhold*100;
                        $nyeks    = $forhold*300;
                       
                        if (move_uploaded_file($felt["tmp_name"], $til)) {
                            // lave thumbs
                            if ($filtypen == "jpg") {
                                Header("Content-type: image/jpeg");
                                $src_img = imagecreatefromjpeg($til);
                                $thumbnail = imagecreatetruecolor(100,$nyhojde); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,100,$nyhojde,$str[0],$str[1]);
                                imagejpeg($thumbnail,$thumb,50);
                               
                                $src_img = imagecreatefromjpeg($til);
                                $thumbnail = imagecreatetruecolor(300,$nyeks); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,300,$nyeks,$str[0],$str[1]);
                                imagejpeg($thumbnail,$eks,50);
                            }
                            elseif ($filtypen == "png") {
                                Header("Content-type: image/png");
                                $src_img = imagecreatefrompng($til);
                                $thumbnail = imagecreatetruecolor(100,$nyhojde); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,100,$nyhojde,$str[0],$str[1]);
                                imagepng($thumbnail,$thumb,50);
                               
                                $src_img = imagecreatefrompng($til);
                                $thumbnail = imagecreatetruecolor(300,$nyeks); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,300,$nyeks,$str[0],$str[1]);
                                imagepng($thumbnail,$eks,50);
                            }
                            elseif ($filtypen == "gif") {
                                Header("Content-type: image/png");
                                $src_img = imagecreatefromgif($til);
                                $thumbnail = imagecreatetruecolor(100,$nyhojde); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,100,$nyhojde,$str[0],$str[1]);
                                imagepng($thumbnail,$thumb,50);
                               
                                $src_img = imagecreatefromgif($til);
                                $thumbnail = imagecreatetruecolor(300,$nyeks); // width, height
                                imagecopyresized($thumbnail,$src_img,0,0,0,0,300,$nyeks,$str[0],$str[1]);
                                imagepng($thumbnail,$eks,50);
                            }
                           
                            $thumbsize        = getimagesize($thumb);
                           
                            $size            = filesize($til);
                            $size_thumb     = filesize($thumb);
                           
                            $height            = $str[0];
                            $height_thumb    = $thumbsize[0];
                            $width            = $str[1];
                            $width_thumb    = $thumbsize[1];
                           
                            mysql_query("insert into lobo_image (url,size,size_thumb,width,width_thumb,height,height_thumb,tidspunkt,ip) values ('$upname','$size','$size_thumb','$width','$width_thumb','$height','$height_thumb','$phptime','$ip')") or die(mysql_error());
                           
                            $foresp = mysql_query("SELECT * FROM lobo_image WHERE url = '$upname'") or die(mysql_error());
                            while($row = mysql_fetch_array($foresp)) {
                                $id = $row["id"];
                            }
                        }
                        else {
                            $fejl = "Billedet kunne ikke oploades... Prøv igen!";
                        }
                    }
                    else {
                        $fejl = "Filen var for stor til opload...";
                    }
                }
                else {
                    $fejl = "Kun jpg, gif og png billedefiler kan oploades!";
                }
            }
            else {
                $fejl = "Filen du oploadede er ikke et billede!";
            }
        }
        else {
            $fejl = strtr($felt["error"], $arg);
        }
    }
   
    if (!isset($fejl) && isset($id)) {
        $return = $id;
    }
    else {
        $return = $fejl;
    }
   
    return $return;
}

?>

håber virkelig på hjælp :P
Avatar billede fangel Nybegynder
17. maj 2005 - 18:32 #1
brug ImageCopyResampled() istedet for ImageCopyResized !

Som taget fra PHP-man om ImageCopyResized()
" The image will be output at half size, though better quality could be obtained using imagecopyresampled()."

Fangel
Avatar billede elskermad.dk Nybegynder
17. maj 2005 - 22:01 #2
nøj du er en skat fangel :D :P :) :] :o) det havde jeg da aldrig fundet ud af hvis du ikke har hjulpet mig!!!

lige hurtigt, er der andre ting der kan gøre funktionen bedre?
Avatar billede fangel Nybegynder
17. maj 2005 - 23:08 #3
kan blive en del kortere ved at brug ting som variable-functions.. eg

$type = "jpeg";

$funcname = "imagecreatefrom" . $type;
$funcname($im, 0, 0, 0, ....);

så skal $type bare ændres for at ændre funktionen - så kan du spare nogle linjer... ;)

Men bruger norm. ikke tid på E (læs min profil), var bare forbi og så titlen og tænkte "imagecopyresampled"

Fangel
Avatar billede elskermad.dk Nybegynder
18. maj 2005 - 07:25 #4
hehe det er bare iorden :) vidste ikke man kunne bruger funktioner på den måde, det vil jeg da lige overveje! men det er jo os kun skønhedsmæssigt, det giver nok ikke noget på kvalitet!?

men igen mange tak :)
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