Avatar billede overgreat Forsker
10. september 2005 - 23:25 Der er 26 kommentarer og
1 løsning

uploade billede ved hjælp af gd og php

Hej

Er der en der har et eksempel-kodestump på hvordan man arbejder sig frem til at uploade et billede til serveren, hvor dens oprindleige store format i processen bliver gjort mindre.... Det skal gøres vha php og gd.

f.eks. fra 300x300px til 100x100

På forhånd tak.
Avatar billede jakobdo Ekspert
10. september 2005 - 23:28 #1
Denne funktion kan resize:

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}
Avatar billede overgreat Forsker
11. september 2005 - 09:17 #2
Vil det sige at jeg derefter uploader $result... eller?
Avatar billede overgreat Forsker
11. september 2005 - 09:18 #3
.... kan du oveni give en kort intro til hvordan størrelsen styres?
Avatar billede jakobdo Ekspert
11. september 2005 - 10:29 #4
Kort intro:

$filename = "test.jpg"; //f.eks. et billede som lige er uploadet.
$newfilename = "nyt_test.jpg"; //Det nye billede, som er resized.
$maxw = 100; Max bredde.
$maxh = 100; Max højde.
(hvis et billede f.eks. er 600*400, bliver det ikke resized til: 100*100, men den udregner forholdet, så det vil blive til: 100*67)
Avatar billede jakobdo Ekspert
11. september 2005 - 10:29 #5
PS: Du kan bruge funktionen i stedet for at bruge move_uploaded_file()
Den bruger du garanteret et sted i din kode.
Avatar billede overgreat Forsker
11. september 2005 - 11:36 #6
Hej Tak for introen.

Et sidste spørgsmål inden du velfortjent får pointene...

Det jeg ønsker er at lave en formular, hvor jeg uploader billedet.
Dvs det store billede ligger på min computer, hvorefter den inden den flytter billedet over på serveren skal resize den....

Hvordan ser det ud i en formular?
Avatar billede overgreat Forsker
11. september 2005 - 11:38 #7
Hej

Jeg har afsat lidt flere point... da jeg synes det er rimeligt...
Avatar billede jakobdo Ekspert
11. september 2005 - 11:42 #8
Har du en formular nu?
Eller har du slet ikke noget upload kode endnu?
Avatar billede overgreat Forsker
11. september 2005 - 11:50 #9
Jeg har en almindelig upload kode, jeg kan indsætte. En som bare uploader fil... skal jeg finde denne frem?
Avatar billede jakobdo Ekspert
11. september 2005 - 12:02 #10
Hvis jeg må se den, så kan den med stor sandsynlighed redigeres!
Dog skal vi lige blive enige om noget.
Skal det store / originale billede også gemmes?
Eller er det kun det resizede billede som skal gemmes på serveren?
Avatar billede overgreat Forsker
11. september 2005 - 12:09 #11
Jeg finder det lige frem...
Det store (originale) billede skal ikke med!
Avatar billede overgreat Forsker
11. september 2005 - 12:11 #12
<?
if($up==ja){

$konfiguration["upload_bibliotek"] = "./stemning";
$konfiguration["max_stoerrelse"] = "1000";

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}

/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
 
  echo "Billedet er opdateret<br>";

} else {
  copy($fra, $til);
}

}else{

?>

<FORM METHOD=POST ACTION='billedupload.php?up=ja' ENCTYPE="multipart/form-data">
<input type="file" name="upfil" /><INPUT TYPE=submit VALUE=upload>
</form>
</center>
<?
}
?>
Avatar billede jakobdo Ekspert
11. september 2005 - 12:14 #13
Denne gør det:

<?

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

if($up==ja)
{

    $konfiguration["upload_bibliotek"] = "./stemning";
    $konfiguration["max_stoerrelse"] = "1000";

    /* Hvor flytter vi fra og til */
    $fra = $_FILES["upfil"]["tmp_name"];
    $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

    /* Check PHP-version */
    list($major, $minor, $rev) = explode(".", phpversion());
    if($major < 4)
    {
        die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
    }

    /* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
    if($minor < 1)
    {
      $_FILES = $HTTP_POST_FILES;
      $_POST = $HTTP_POST_VARS;
      $_SERVER = $HTTP_SERVER_VARS;
    }

    /* Accepterer vi filens stoerrelse? */
    $fil_stoerrelse = filesize($fra)/1024;
    if($fil_stoerrelse > $konfiguration["max_stoerrelse"])
    {
      die("Desværre - filen er for stor. Jeg accepterer kun " .
        $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
        ceil($fil_stoerrelse, 1) . " kb");
    }

    /* Saa koerer vi */
    resize($fra, $til, 100,100);
}
else
{

?>

<FORM METHOD=POST ACTION='billedupload.php?up=ja' ENCTYPE="multipart/form-data">
<input type="file" name="upfil" /><INPUT TYPE=submit VALUE=upload>
</form>
</center>
<?
}
?>

HUSK At ret 100,100 til hvad du måtte ønske!
Avatar billede overgreat Forsker
11. september 2005 - 13:12 #14
Hej

Lavede en mappe der hedder test, lagde tes1.php ned i denne mappe. I test-mappe lavede jeg prove mappe hvor billedet skulle uploades til.

Når jeg uploader billedet kører den igennem og giver resultatet fint, men har ikke flyttet filen op på serveren.

Kan du se hvad der går galt?

<?

if($up==ja){

$konfiguration["upload_bibliotek"] = "./prove";
    $konfiguration["max_stoerrelse"] = "1000";

    /* Hvor flytter vi fra og til */
    $fra = $_FILES["upfil"]["tmp_name"];
    $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];



/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}



/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}




/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til, 100,100);




echo "fint";




} else {
  copy($fra, $til);

}





}else{

?>

<FORM METHOD=POST ACTION='test1.php?up=ja' ENCTYPE="multipart/form-data">
<input type="file" name="upfil" />
<INPUT TYPE=submit VALUE=upload>
</form>

<?
}
?>
Avatar billede coderdk Praktikant
11. september 2005 - 13:25 #15
/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til, 100,100);

Skal nok være:

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til, 100,100);
  resize($til, $til, 100, 100);

Bemærk at på nogle servere kan du ikke gøre noget ved uploadede filer, før du har flyttet dem med move_uploaded_file :)
Avatar billede coderdk Praktikant
11. september 2005 - 13:25 #16
Aj ok, det skulle jo have været:

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
  resize($til, $til, 100, 100);
Avatar billede overgreat Forsker
11. september 2005 - 13:26 #17
Sorry glem lige det sidste indlæg......

Mangler din sidste tilbagemelding ikke en form for move_uploaded_file ?

Din kører igennem som normalt men uploader ikke noget billede. Kan du hjælpe ? (hjælp ud fra dit eget indlæg... mit indlæg var noget rod!)
Avatar billede overgreat Forsker
11. september 2005 - 13:37 #18
Hej alle

Dette er hvad jeg er nået frem til.... Jeg har indkoporeret

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
  resize($til, $til, 100, 100);

men det giver stadig problemer... Den kører igennem. Siger at billedet er opdateret. Men den har ikke uploadet filen... ææææv

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

<?

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

if($up==ja)
{

    $konfiguration["upload_bibliotek"] = "./prove";
    $konfiguration["max_stoerrelse"] = "1000";

    /* Hvor flytter vi fra og til */
    $fra = $_FILES["upfil"]["tmp_name"];
    $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

    /* Check PHP-version */
    list($major, $minor, $rev) = explode(".", phpversion());
    if($major < 4)
    {
        die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
    }

    /* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
    if($minor < 1)
    {
      $_FILES = $HTTP_POST_FILES;
      $_POST = $HTTP_POST_VARS;
      $_SERVER = $HTTP_SERVER_VARS;
    }

    /* Accepterer vi filens stoerrelse? */
    $fil_stoerrelse = filesize($fra)/1024;
    if($fil_stoerrelse > $konfiguration["max_stoerrelse"])
    {
      die("Desværre - filen er for stor. Jeg accepterer kun " .
        $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
        ceil($fil_stoerrelse, 1) . " kb");
    }

  /* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
  resize($til, $til, 100, 100);
 
  echo "Billedet er opdateret<br>";

} else {
  copy($fra, $til);
}

}
else
{

?>

<FORM METHOD=POST ACTION='test2.php?up=ja' ENCTYPE="multipart/form-data">
<input type="file" name="upfil" /><INPUT TYPE=submit VALUE=upload>
</form>
</center>
<?
}
?>
Avatar billede coderdk Praktikant
11. september 2005 - 13:39 #19
Du skal lige være sikker på at webserveren har skriverettigheder til der hvor du vil placere billedet...
Avatar billede jakobdo Ekspert
11. september 2005 - 13:50 #20
coderdk, resize() kan erstatte move_uploaded_file()
Ingen grund til at flytte filen, og så resize bagefter!
Du kan jo bare resize den temporære fil og gemme den hvor du ønsker den resizede fil.
Avatar billede coderdk Praktikant
11. september 2005 - 14:07 #21
jakobdo, På nogle serveropsætninger kan du ikke gøre noget ved den uploadede fil, før du har flyttet den til et andet sted (open_basedir er det vist)... Så du er nødt til at move_uploaded_file og derefter resize - Det er i hvert tilfælde hvad jeg har fundet ud af :)
Avatar billede jakobdo Ekspert
11. september 2005 - 14:10 #22
CoderDK: Ok, jeg har en server hvor jeg springer move_uploaded_file() let og elefant over!
Avatar billede coderdk Praktikant
11. september 2005 - 14:11 #23
jakobdo, Du har ret, det kan man også i de fleste tilfælde - Men hvis der er sat en open_basedir så kommer den og brokker sig - Du kan ikke engang bruge copy() du skal bruge move_uploaded_file :)
Avatar billede overgreat Forsker
11. september 2005 - 17:30 #24
Hej alle

Dette virker!!!!! Var lidt ude i den dejlige sol og se noget mindre fornøjeligt fodbold!!!!

Jakobdo sender du ikke et velfortjent svar.... Af en eller anden mærkelig grund virker det bedre når move_uploaded_file ikke var med.... som i begge snakkede om!


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

<?

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

if($up==ja)
{

    $konfiguration["upload_bibliotek"] = "./prove";
    $konfiguration["max_stoerrelse"] = "1000";

    /* Hvor flytter vi fra og til */
    $fra = $_FILES["upfil"]["tmp_name"];
    $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

    /* Check PHP-version */
    list($major, $minor, $rev) = explode(".", phpversion());
    if($major < 4)
    {
        die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
    }

    /* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
    if($minor < 1)
    {
      $_FILES = $HTTP_POST_FILES;
      $_POST = $HTTP_POST_VARS;
      $_SERVER = $HTTP_SERVER_VARS;
    }

    /* Accepterer vi filens stoerrelse? */
    $fil_stoerrelse = filesize($fra)/1024;
    if($fil_stoerrelse > $konfiguration["max_stoerrelse"])
    {
      die("Desværre - filen er for stor. Jeg accepterer kun " .
        $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
        ceil($fil_stoerrelse, 1) . " kb");
    }

    /* Saa koerer vi */
 
   
    if(function_exists("move_uploaded_file")) {

  resize($fra, $til, 100,100);
  echo "Billedet er opdateret<br>";

} else {
  copy($fra, $til);
}

}
else
{

?>

<FORM METHOD=POST ACTION='test2.php?up=ja' ENCTYPE="multipart/form-data">
<input type="file" name="upfil" /><INPUT TYPE=submit VALUE=upload>
</form>
</center>
<?
}
?>
Avatar billede jakobdo Ekspert
11. september 2005 - 17:49 #25
Svar!
Avatar billede jakobdo Ekspert
11. september 2005 - 17:49 #26
og en kommentar! :o)
Avatar billede jakobdo Ekspert
11. september 2005 - 18:51 #27
Takker for point!
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