Avatar billede madsens90 Praktikant
03. december 2007 - 09:27 Der er 31 kommentarer

Ved uploade af billede, skal billede "resize" til højst 900 * 700

Hej. Jeg har et upload script på min side.

Scriptet er fra jakobdo her på siden, og kan ses her:
http://www.eksperten.dk/artikler/1098

Det jeg gerne vil med "mit" upload script, er at når en person uploader et billede, og dette billede har en width på over 900 px
og en height på over 700 px, så skal den "resize" billede så det bliver til max disse breder, eller højder. :)

Kan dette ikke godt lade sig gøre? :D
Avatar billede 17196 Nybegynder
03. december 2007 - 10:58 #1
Sagtens. Du kan bruge denne, og så ændre den til dit behov:
        // get the temporary name (e.g. /tmp/php34634.tmp)
        $source = $objekt['tmp_name'];
        $origName = $objekt['name'];
       
        // Generate a new name for it
        $newName = "".(microtime(true)).'.jpeg';
       
        // print something to the user
        echo "<br />Behandler filen $origName...\n";
        // flush();
       
        // Generate pictures
        for ($i = 0; $i < 5; $i++){
            switch($i){
                case 0:
                    $src_img = @imagecreatefromjpeg($source);
                    break;
                case 1:
                    $src_img = @imagecreatefrompng($source);
                    break;
                case 2:
                    $src_img = @imagecreatefromwbmp($source);
                    break;
                case 3:
                    $src_img = @imagecreatefromgif($source);
                    break;
                case 4:
                    $src_img = @imagecreatefromxpm($source);
                    break;
            }
            if (!$src_img){
                $error = true;
                continue;
            } else {
                break;
            }
        }
       
        if (!$src_img){
            echo "<br />Kunne ikke behandle filen $origName\n";
            flush();
            continue;
        }
        $prefix = "../../../";
        // Where to save the file?
        $medium_target = 'user/medium/medium_' . $newName;
        $origw=imagesx($src_img);
        $origh=imagesy($src_img);
       
       
        // SCALE
        $maxw = 900;
        $maxh = 700;
        $wscale = $maxw / $origw;
        $hscale = $maxh / $origh;
        $scale = ( $hscale < $wscale ? $hscale : $wscale );
        $nw = round( $origw * $scale, 0 );
        $nh = round( $origh * $scale, 0 );
        $mediumPicture = imagecreatetruecolor( $nw, $nh );
        imagecopyresampled( $mediumPicture, $src_img, 0, 0, 0, 0, $nw, $nh, $origw, $origh );
        imagejpeg($mediumPicture, $prefix . $medium_target);
        imagedestroy($mediumPicture);
       
        // Now destroy original image.
        imagedestroy($src_img);
Avatar billede 17196 Nybegynder
03. december 2007 - 10:59 #2
I dit tilfælde vil det så hedde:
$source = $_FILES['myFile']['tmp_name']
$origName = $_FILES['myFile']['name']
Avatar billede madsens90 Praktikant
12. december 2007 - 15:03 #3
Hvad skal der stå her:

        $prefix = "../../../";
        // Where to save the file?
        $medium_target = 'user/medium/medium_' . $newName;

Når der i mit uploade script står dette i forvejen:

$uploadDir = 'uploade/profilbilleder/';

??

skal:        $medium_target = 'user/medium/medium_' . $newName;
så bare ændres til:

        $medium_target = 'uploade/profilbilleder/' . $newName;

??
Avatar billede fant0mas Nybegynder
12. december 2007 - 15:43 #4
Så vil det blive:
$medium_target = 'uploade/profilbilleder/medium_' . $newName

Og:
imagejpeg($mediumPicture, $medium_target); //prefix fjernet
Avatar billede minimadsens Nybegynder
12. december 2007 - 16:05 #5
Nu bliver der bare ved med at stå "Begandler billedet"..

Den bliver aldrig færdig med det? :P

Jeg ved ikke om det er fordi at jeg ikke har lavet sådan at hvis billedet er for stort, så skal den rezise det, og hvis ikke det er, skal den tilføje det normalt..

For lige nu står der når man tilføjer et billede der er for stort, så står der at den behandler billedet, og lige nedenunder står der at billedet er blevet tilføjet? :P

Hvordan laver jeg så den tjekker om billedet er for stort, inden den begynder at rezise det?
Avatar billede minimadsens Nybegynder
12. december 2007 - 16:05 #6
I øvrigt. fant0mas... Det hjalp på mit andet problem. ;) Tak! :)
Avatar billede enya Nybegynder
12. december 2007 - 16:14 #7
>minimadsens: Husk lige at bruge den rigtige profil.. Du svarer med én og har oprettet spørgsmålet med en anden..
Det er altså ikke helt "lovligt" med 2 profiler på Eksperten..! Mvh. enya
Avatar billede enya Nybegynder
12. december 2007 - 16:16 #8
NB: Du kan ret faktisk risikere at blive "smidt ud" af Eksperten på det grundlag.. :(
Avatar billede minimadsens Nybegynder
12. december 2007 - 16:18 #9
Ej man? :O Det er fordi jeg har hjulpet gennem min lillebrors profil? og så var jeg logget ind på den.. og så er jeg bare begyndt at bruge den i al admindelighed.. :O

Men skal nok lade være hvis man kan det. :S Jeg så ikke lige det store problem i det. :/
Avatar billede enya Nybegynder
12. december 2007 - 16:22 #10
Uanset hvad, så er det ikke tilladt at have 2 profiler på E., så du må vælge den ene og få lukket den anden.. Bare et godt råd herfra.. :)
Avatar billede minimadsens Nybegynder
12. december 2007 - 16:23 #11
Det er min lillerbors den her.. Så det ville da være dumt at få hans bruger lukket? og jeg bruger jo også min egen??
Avatar billede enya Nybegynder
12. december 2007 - 16:27 #12
Tja - men så er det jo "hans" spørgsmål, som du besvarer..? Men det er stadig ikke "lovligt" at DU bruger 2 profiler... Mvh. enya
Avatar billede minimadsens Nybegynder
12. december 2007 - 16:28 #13
Nej okay.. Må bare lade være med at bruge den her profil mere... Over and out. :P
Avatar billede madsens90 Praktikant
12. december 2007 - 16:34 #14
havde tænkt mig noget i retningen af:

if((maxw > 900) || (maxh > 700)){

Her kommer så hvor den laver det om..

}else{
Bare uploade billedet almindeligt
}

Men hvad skal der stå i stedet for maxw & maxh??
Avatar billede fant0mas Nybegynder
12. december 2007 - 16:35 #15
Den skalerer kun hvis billedet er over de bestemte mål.
Prøv med et mindre billede.

Du kan også tilføje
$fs = filesize($src_img);
if($fs > 500000){
echo 'for stort';
}
Avatar billede madsens90 Praktikant
12. december 2007 - 16:40 #16
det står også:

Behandler filen eks.jpeg

selvom at billedet ikke er for stort? :S

Skriver lige hele min kode her:
Avatar billede madsens90 Praktikant
12. december 2007 - 16:41 #17
<?php
//Bibliotek hvor filer uploades til - husk chmod 777
$uploadDir = 'uploade/profilbilleder/';

//Hvilke filer vil vi acceptere bliver uploadet?
$allowedFileTypes = array('jpg','gif','png');

//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload'])){ 

if(is_uploaded_file($_FILES['myFile']['tmp_name']))
{
$navn = $_POST["navn_txt"];
if(!empty($navn)){

        $origw=imagesx($src_img);
        $origh=imagesy($src_img);


        // get the temporary name (e.g. /tmp/php34634.tmp)
$source = $_FILES['myFile']['tmp_name'];
$origName = $_FILES['myFile']['name'];
       
        // Generate a new name for it
        $newName = "".(microtime(true)).'.jpeg';
       
        // print something to the user
        echo "<br />Behandler filen $origName...\n";
        // flush();
       
        // Generate pictures
        for ($i = 0; $i < 5; $i++){
            switch($i){
                case 0:
                    $src_img = @imagecreatefromjpeg($source);
                    break;
                case 1:
                    $src_img = @imagecreatefrompng($source);
                    break;
                case 2:
                    $src_img = @imagecreatefromwbmp($source);
                    break;
                case 3:
                    $src_img = @imagecreatefromgif($source);
                    break;
                case 4:
                    $src_img = @imagecreatefromxpm($source);
                    break;
            }
            if (!$src_img){
                $error = true;
                continue;
            } else {
                break;
            }
        }
       
        if (!$src_img){
            echo "<br />Kunne ikke behandle filen $origName\n";
            flush();
            continue;
        }
        $prefix = "../../../";
        // Where to save the file?
        $medium_target = 'uploade/profilbilleder/medium_' . $newName;
        $origw=imagesx($src_img);
        $origh=imagesy($src_img);
       
       
        // SCALE
        $maxw = 900;
        $maxh = 700;
        $wscale = $maxw / $origw;
        $hscale = $maxh / $origh;
        $scale = ( $hscale < $wscale ? $hscale : $wscale );
        $nw = round( $origw * $scale, 0 );
        $nh = round( $origh * $scale, 0 );
        $mediumPicture = imagecreatetruecolor( $nw, $nh );
        imagecopyresampled( $mediumPicture, $src_img, 0, 0, 0, 0, $nw, $nh, $origw, $origh );
        imagejpeg($mediumPicture, $medium_target); //prefix fjernet
        imagedestroy($mediumPicture);
       
        // Now destroy original image.
        imagedestroy($src_img);   

//Filendelse   
$extension = strtolower(pathinfo($_FILES['myFile']['name'],PATHINFO_EXTENSION)); 
   
//Er filen en af de filer vi gerne vil have?   
if(in_array($extension,$allowedFileTypes))    {     

//Vi flytter filen fra tmp til vores UPLOADDIR
if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name']))) {

$navn = $_POST["navn_txt"];
$sti = $_FILES['myFile']['name'];
$bruger = $_POST["bruger_txt"];

if($_POST["billedeterafmig"] != 1){
  $_POST["billedeterafmig"] = 0;
}

$billedeterafmig = $_POST["billedeterafmig"];

MYSQL_QUERY("INSERT INTO galleri (navn,sti,bruger,mig)".
    "VALUES ('$navn', '$sti', '$bruger', '$billedeterafmig')");

echo '<h4 style="color:green;">Filen ('.basename($_FILES['myFile']['name']).') blev tilføjet!</h4>';
}     
else {       
echo '<h4 style="color:red;">Fejl - Kunne ikke uploade billedet!: '.basename($_FILES['myFile']['name']).'</h4>';
}
}   
else    {     
echo '<h4 style="color:red;">Fejl - De tilladte filtyper er: ('.implode(',',$allowedFileTypes).')</h4>';
}
}
else {
echo '<h4 style="color:red;">Du skal lieg give filen et navn! :)</h4>';
}

else { 
echo '<h4 style="color:red;">Du skal lige vælge en fil fra din computer. ;)</h4>';  }}
Avatar billede madsens90 Praktikant
12. december 2007 - 16:41 #18
Det er hele uploade scriptet, med den del jeg havde i forvejen også..
Avatar billede madsens90 Praktikant
12. december 2007 - 16:42 #19
Sorry.. det er mig der har roddet med noget i starten af filen hvor der står:

        $origw=imagesx($src_img);
        $origh=imagesy($src_img);

Men det er ikke det der laver fejlen..
Avatar billede fant0mas Nybegynder
12. december 2007 - 17:33 #20
Du har blandet det godt og grundigt sammen. Dette er ikke testet:

<?php
//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload'])){

    // get the temporary name (e.g. /tmp/php34634.tmp)
    $source = $_FILES['myFile']['tmp_name'];
    $origName = $_FILES['myFile']['name'];
    $userfile_size = $_FILES['myFile']['size'];

    if ($userfile_size > 500000) {
        die("Billedet er for stort:&nbsp;".$userfile_size);
    }
    // Generate a new name for it
    $newName = "".(microtime(true)).'.jpeg';

    // print something to the user
    echo "<br />Behandler filen $origName...\n";
    // flush();

    // Generate pictures
    for ($i = 0; $i < 5; $i++){
        switch($i){
            case 0:
                $src_img = @imagecreatefromjpeg($source);
                break;
            case 1:
                $src_img = @imagecreatefrompng($source);
                break;
            case 2:
                $src_img = @imagecreatefromwbmp($source);
                break;
            case 3:
                $src_img = @imagecreatefromgif($source);
                break;
            case 4:
                $src_img = @imagecreatefromxpm($source);
                break;
        }
    }

    if (!$src_img){
        die("<br />Kunne ikke behandle filen ".$origName);
    }
    // Where to save the file?
    $medium_target = 'uploade/profilbilleder/medium_' . $newName;
    $origw=imagesx($src_img);
    $origh=imagesy($src_img);


    // SCALE
    $maxw = 900;
    $maxh = 700;
    $wscale = $maxw / $origw;
    $hscale = $maxh / $origh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $origw * $scale, 0 );
    $nh = round( $origh * $scale, 0 );
    $mediumPicture = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $mediumPicture, $src_img, 0, 0, 0, 0, $nw, $nh, $origw, $origh );
    imagejpeg($mediumPicture, $medium_target); //prefix fjernet
    imagedestroy($mediumPicture);

    // Now destroy original image.
    imagedestroy($src_img);

        $navn = $_POST["navn_txt"];
        $bruger = $_POST["bruger_txt"];

        if($_POST["billedeterafmig"] != 1){
            $_POST["billedeterafmig"] = 0;
        }

        $billedeterafmig = $_POST["billedeterafmig"];

        mysql_query("INSERT INTO galleri (navn,sti,bruger,mig) values ('$navn', '$medium_target', '$bruger', '$billedeterafmig')")or die(mysql_error());

        echo '<h4 style="color:green;">Filen ('.$medium_target.') blev tilføjet!</h4>';
}
?>
Avatar billede minimadsens Nybegynder
12. december 2007 - 17:44 #21
jeg lagde bare det ind jeg fik af dig i toppen af filen..

Ville alt sammen ikke virke hvis man bare lavede dette:

if((maxw > 900) || (maxh > 700)){

Her reziser den billedet hvis det er større end det må være.

}else{
Her uploader den bare billedet normalt, hvis det ikke er for stort.
}

??
Avatar billede fant0mas Nybegynder
12. december 2007 - 17:49 #22
Jo, men det giver ingen mening, når det du beskriver allerede er opfyldt.
Virker det ovenstående ikke?
Avatar billede minimadsens Nybegynder
12. december 2007 - 17:55 #23
nej.. :S det virker ikke..

Det var derfor jeg tænkte at det andet måske virkede..
Avatar billede fant0mas Nybegynder
12. december 2007 - 17:59 #24
Smid lige din form, så tester jeg det lige...
Avatar billede minimadsens Nybegynder
12. december 2007 - 18:01 #25
echo "<form action=uploade.php?user=$username&page=2 method=post enctype=multipart/form-data>";

echo '<input type="file" name="myFile"><br />';
echo '<input name="navn_txt" maxlength="12"> <b><span id="12"><-- Indtast navn!</span></b><br /><br>';
?>
<input type="checkbox" name="billedeterafmig" value="1"> <b><span id="12"><-- Billedet er af mig!</span></b><br><br>
<b><span id="12">Ved at krydse feltet herover af, bliver du samtidigt tilmeldt "Hot or Not"! (Kommer snart!!)</span></b><br><br>
<input type="hidden" name="bruger_txt" value="<? echo "$username"; ?>">
<?
echo '<input type="submit" name="myUpload" value="Upload file"><br><br>';
echo 'Tilladte filtyper du kan bruge: ('.implode(',',$allowedFileTypes).')';
echo '</form>';?>
Avatar billede fant0mas Nybegynder
12. december 2007 - 18:08 #26
Det her virker hos mig:

<?php
//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload'])){

    // get the temporary name (e.g. /tmp/php34634.tmp)
    $source = $_FILES['myFile']['tmp_name'];
    $origName = $_FILES['myFile']['name'];
    $userfile_size = $_FILES['myFile']['size'];

    if ($userfile_size > 500000) {
        die("Billedet er for stort:&nbsp;".$userfile_size);
    }
    // Generate a new name for it
    $newName = "".(microtime(true)).'.jpeg';

    // print something to the user
    echo "<br />Behandler filen $origName...\n";
    // flush();

    // Generate pictures
    for ($i = 0; $i < 5; $i++){
        switch($i){
            case 0:
                $src_img = @imagecreatefromjpeg($source);
                break;
            case 1:
                $src_img = @imagecreatefrompng($source);
                break;
            case 2:
                $src_img = @imagecreatefromwbmp($source);
                break;
            case 3:
                $src_img = @imagecreatefromgif($source);
                break;
            case 4:
                $src_img = @imagecreatefromxpm($source);
                break;
        }
        if (!$src_img){
            $error = true;
            continue;
        } else {
            break;
        }
    }

    if (!$src_img){
        die("<br />Kunne ikke behandle filen ".$origName);
    }
    // Where to save the file?
    $medium_target = 'uploade/profilbilleder/medium_' . $newName;
    $origw=imagesx($src_img);
    $origh=imagesy($src_img);


    // SCALE
    $maxw = 900;
    $maxh = 700;
    $wscale = $maxw / $origw;
    $hscale = $maxh / $origh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $origw * $scale, 0 );
    $nh = round( $origh * $scale, 0 );
    $mediumPicture = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $mediumPicture, $src_img, 0, 0, 0, 0, $nw, $nh, $origw, $origh );
    imagejpeg($mediumPicture, $medium_target); //prefix fjernet
    imagedestroy($mediumPicture);

    // Now destroy original image.
    imagedestroy($src_img);

        $navn = $_POST["navn_txt"];
        $bruger = $_POST["bruger_txt"];

        if($_POST["billedeterafmig"] != 1){
            $_POST["billedeterafmig"] = 0;
        }

        $billedeterafmig = $_POST["billedeterafmig"];


        echo '<h4 style="color:green;">Filen ('.$medium_target.') blev tilføjet!</h4>';
        }
echo "<form action=uploade.php?user=$username&page=2 method=post enctype=multipart/form-data>";

echo '<input type="file" name="myFile"><br />';
echo '<input name="navn_txt" maxlength="12"> <b><span id="12"><-- Indtast navn!</span></b><br /><br>';
?>
<input type="checkbox" name="billedeterafmig" value="1"> <b><span id="12"><-- Billedet er af mig!</span></b><br><br>
<b><span id="12">Ved at krydse feltet herover af, bliver du samtidigt tilmeldt "Hot or Not"! (Kommer snart!!)</span></b><br><br>
<input type="hidden" name="bruger_txt" value="<? echo "$username"; ?>">
<?
echo '<input type="submit" name="myUpload" value="Upload file"><br><br>';
echo '</form>';?>
Avatar billede fant0mas Nybegynder
12. december 2007 - 18:12 #27
Jeg fjernede lige der hvor der bliver indsat i databasen, det skal selvfølgelig tilføjes igen - efter $billedeterafmig = $_POST["billedeterafmig"];

mysql_query("INSERT INTO galleri (navn,sti,bruger,mig) values ('$navn', '$medium_target', '$bruger', '$billedeterafmig')")or die(mysql_error());
Avatar billede madsens90 Praktikant
12. december 2007 - 18:55 #28
mit galleri virker overhovedet ikke mere efter jeg har skiftet til det du har lavet. :/

Og skærmen står bare og flimrer når man tilføjer et billede.. og den reziser det ikke. :S :S

Så tror bare jeg skifter tilbage til det gamle. :/
Avatar billede fant0mas Nybegynder
12. december 2007 - 20:12 #29
Jamen sætter du det jeg postede ind i en fil for sig, f.eks. upload.php og ændrer:
echo "<form action=upload.php method=post enctype=multipart/form-data>";

Så virker det altså. Hvordan du så lige for det sat ind i din eget kode, det må du altså selv rode lidt med. Det er meningen du skal lære og ikke bare have en færdig løsning.
Avatar billede madsens90 Praktikant
29. november 2010 - 18:44 #30
Jeg mindes at få det til at virke til sidste, så kommer du med et svar fant0mas? ;)
Avatar billede madsens90 Praktikant
20. juni 2011 - 14:44 #31
Et svar tak? :) Ellers accepterer jeg mit eget.
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