Avatar billede durd Nybegynder
02. marts 2004 - 10:49 Der er 10 kommentarer

Upload af billede!

Jeg har lavet et upload system men mangler nogle småfunktioner for det bliver helt perfekt. Jeg kunne godt tænke mig, at der bliver lavet en thumbnail som bliver gemt et sted og at selve det originale billede bliver skaleret ned inden det bliver uploadet. Hvordan gør jeg det?
Avatar billede detox Nybegynder
02. marts 2004 - 11:27 #1
Du kan ikke nedskalere et billede før upload, men når det er uploadet kan du bruge denne funktion til at, i dette eksempel, skalere ned ift. en maximum bredde:

function Thumb($sourcefile, $targetfile, $size) { // $size = maxbredde
    if (preg_match("/png$/i", $sourcefile)) {
        $im = imageCreateFromPNG($sourcefile);
    } elseif (preg_match("/jpe?g$/i", $sourcefile)) {
        $im = imageCreateFromJPEG($sourcefile);
    }
    $source_x = imagesx($im);
    $source_y = imagesy($im);
    $delta = $size/$source_x;
    $dest_x = round($source_x*$delta);
    $dest_y = round($source_y*$delta);
    $target_id = imagecreatetruecolor($dest_x, $dest_y);   
    imagecopyresampled($target_id, $im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
    if (preg_match("/png$/i", $sourcefile)) {
        imagePNG($target_id, $targetfile);
    } elseif (preg_match("/jpe?g$/i", $sourcefile)) {
        imageJPEG($target_id, $targetfile);
    }
}

Til nedskalering af et billede bruger du bare samme $sourcefile og $targetfile. Fx:

$pic = 'images/test.jpg';
Thumb($pic, $pic, 800);

Når du skal lave thumbnails kan du bruge fx:

$pic = 'images/test.jpg';
$thumb = 'images/thumb_test.jpg';
Thumb($pic, $thumb, 120);
Avatar billede durd Nybegynder
02. marts 2004 - 12:06 #2
Der er ik nogen funktion i php som hedder Thumb(), så jeg kan ik lave det på den måde.
Avatar billede durd Nybegynder
02. marts 2004 - 12:24 #3
lol havde ikke set den funktion. undskyld..

prøver det lige ;)
Avatar billede durd Nybegynder
02. marts 2004 - 13:17 #4
hvad skal $sourcefile og $targetfile være?
Avatar billede detox Nybegynder
02. marts 2004 - 13:39 #5
$sourcefile = '(evt. sti/)navn på dit billede'
$targetfile = '(evt. sti/)navn på dit nedskalerede billede' (evt. samme som billede, hvis det skal overskrives).
Se mine eksempler forneden i mit oprindelige indlæg.
Avatar billede durd Nybegynder
02. marts 2004 - 15:21 #6
jeg får fejl i første linie når jeg kører dit script. jeg kan ik få det til at virke :(
Avatar billede detox Nybegynder
02. marts 2004 - 15:50 #7
Hvordan gør du helt præcist?
Avatar billede durd Nybegynder
11. marts 2004 - 17:23 #8
Herunder er koden som jeg bruger til at uploade billeder med. Hvad skal jeg præcis tilføje til koden for billeder bliver resizet hvis de er for store og så gemt?

------------------------------------------------------------------

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
    <td><?
$userfile_name = str_replace("#", "", $userfile_name);
ini_set("safe_mode", "0");
//Laver et resultat af users
$result = mysql_query("SELECT * FROM users WHERE ID = '$row_login[ID]'");
//Kør løkke så længe der er rækker i databasen
while($row = mysql_fetch_array($result)){
    //Tjekker om variablerne er sat
    if (!$BilledeNavn || !$Beskrivelse || !$userfile){
        //Hvis ikke bliver der udskrevet fejlbeskeder
        if (!$userfile){
            echo "<font face='verdana' size='1'>Husk at vælge et billede.</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
        }
        if (!$BilledeNavn){
            echo "<font face='verdana' size='1'>Husk at give billedet et navn inden du uploader det.</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
        }
        if (!$Beskrivelse){
            echo "<font face='verdana' size='1'>Husk at lave en beskrivelse til billedet inden du uploader det.</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
        }
        echo "<input type='button' name='button' value='Tilbage' onClick='window.history.back(1)' style=\"font-size:10;border:1px solid #000000;background:#C1CCD9;cursor:hand\" onMouseover=\"change('#9DABBC')\" onMouseout=\"change('#C1CCD9')\">";
}else{
    //Tjek billede-størrelsen som maks må være 150 kb
    if ($userfile_size < 150000){
        //Tjek om billede-formatet er jpg
        if ($userfile_type == "image/pjpeg"){
            $billedenr = "1";
            if (!file_exists($_SERVER['DOCUMENT_ROOT']."/images/casemod/".$row['ID'])){
                //Opretter en mappe til brugerens billeder
                mkdir ($_SERVER['DOCUMENT_ROOT']."/images/casemod/".$row['ID'], 0777);
            }
            //Tjek om der allerede er uploadet en fil med det navn og kom med en fejlbesked hvis det er tilfældet
            if (!file_exists($_SERVER['DOCUMENT_ROOT']."/images/casemod/".$row['ID']."/".$userfile_name)){
                //Kopier filen som er valgt af brugeren til en mappe med brugerens ID nr som navn
                copy ($userfile, "$DOCUMENT_ROOT/images/casemod/".$row['ID']."/".$userfile_name);
                //Indsæt et felt i databasen med oplysningerne om billedet som lige er lagt op
                mysql_query("INSERT INTO casemod (BrugerID, BilledeFil, BilledeNavn, Beskrivelse, OpretTidspunkt) VALUES ('$row[ID]', '$userfile_name', '$BilledeNavn', '$Beskrivelse', '$Tidspunktmedmere')");
                echo "<center><font face='verdana' size='1'>Det valgte billede bliver nu uploadet!<br><br></font><img src='images/working.gif' width='170' height='20'></center>";
?>
</font>
<script>
setTimeout("window.location.href='index.php?menuid=0&pageid=12&ID=<?=$row_login[ID]?>'", 5000)
</script>
<?
                }else{
                    echo "<font face='verdana' size='1'>Du har allerede uploadet et billede med filnavnet \"$userfile_name\"!<br><br>Tjek om du allerede har uploadet et billede der er identisk med det du forsøger at uploade nu.<br><br>Hvis dette ikke er tilfældet kan du bare omdøbe den lokale fil til noget andet end \"$userfile_name\" og uploade den igen. Billedet skal selvfølgelig stadig være i jpg format.</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
                    echo "<br><input type='button' name='button' value='Tilbage' onClick='window.history.back(1)' style=\"font-size:10;border:1px solid #000000;background:#C1CCD9;cursor:hand\" onMouseover=\"change('#9DABBC')\" onMouseout=\"change('#C1CCD9')\">";
                }
            }else{
                echo "<font face='verdana' size='1'>Forkert filtype! Kun jpg filer!</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
                echo "<input type='button' name='button' value='Tilbage' onClick='window.history.back(1)' style=\"font-size:10;border:1px solid #000000;background:#C1CCD9;cursor:hand\" onMouseover=\"change('#9DABBC')\" onMouseout=\"change('#C1CCD9')\">";
            }
        }else{
            echo "<font face='verdana' size='1'>Filstørrelsen overgår 150 KB!</font><br><img src='images/en_pixel_transparent.gif' width='100%' height='4'>";
            echo "<input type='button' name='button' value='Tilbage' onClick='window.history.back(1)' style=\"font-size:10;border:1px solid #000000;background:#C1CCD9;cursor:hand\" onMouseover=\"change('#9DABBC')\" onMouseout=\"change('#C1CCD9')\">";
        }
    }
}
?>
</td>
</tr>
</table>
Avatar billede detox Nybegynder
11. marts 2004 - 19:23 #9
Ok, det kan jeg ikke umiddelbart overskue. Med den funktion jeg har lavet kan du enten resize et billede eller lave en thumbnail. Det skulle være til at forstå hvordan du kalder funktionen, ellers må du spørge. Jeg vil tro at ovenstående script skal omstruktureres lidt, før du kan gøre brug af funktionen.
Avatar billede jakob-s Nybegynder
29. maj 2004 - 20:21 #10
Hej jhonnydrud.
Jeg har brugt eksemplet "02/03-2004 11:27:27", og kunne heller ikke få det til at virke. Jeg fik de samme fejlmeddelelser. Men fandt ud af, at jeg ikke havde installeret GD i PHP, på min local-server. Hordan man gør det kan du se "www.webdesign101.dk/artikler/php_install.php".
Hvis du har installeret GD, har jeg læst at den nye version i GD ikke understøtter *.gif filer.
God fornøjelse jakob-s
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