[PHP] JPG Image upload/scale->db

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Keej... hieronder ziet u een phpscript. Ik ben newbie en uit de search/php.net/zend kwam ik allemaal niet... Kan iemand mij het verlossende duwtje in de rug geven??

Ik heb het volgende: Ik upload een jpg->de omvang wordt getjekt->als die groter dan 100 breed OF 100 hoog is, dan moet ie naar max 100x100 gescaled worden (zodat de verhoudingen dus blijven kloppen...)->Daarna moet ie het bestand met een randomize_filename(); opslaan in een map en de naam van het uiteindelijke bestandje in de db zetten.
Simpel toch? :? :? :P

de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?
<html>

<head>
    <title>Image uploader</title>
<?
if ($REQUEST_METHOD == "POST") 
{

    $uploaddir = "/de/absolute/dir";
    $pext = getFileExtension($imgfile_name);
    $pext = strtolower($pext);
    if (($pext != "jpg")  &amp;&amp; ($pext != "jpeg"))
    {
        print "<h1>Fout</h1><br>Bestandstype onbekend<br>";
    print "<p>Wilt u alstublieft alleen JPEG bestanden met de extensie .jpg of .jpeg versturen.<br><br>";
    print "Het bestand wat u zojuist verstuurd heeft had de extensie: $pext</p>\n";
        unlink($imgfile);
        exit();
    }

    $imgsize = GetImageSize($imgfile);
    if (($imgsize[0] > 100) || ($imgsize[1] > 100)) 
    {

        $tmpimg = tempnam("/tijdelijke/dir/met/chmod777", "MKUP");
        system("djpeg $imgfile >$tmpimg");
        system("pnmscale -xy 100 100 $tmpimg | cjpeg -smoo 10 -qual 50 >$imgfile");
        unlink($tmpimg);

    }

    $final_filename = randomize_filename();
    $newfile = $uploaddir . "/$final_filename";
    
   if (!copy($imgfile,"$newfile")) 
    {
        print "<P>Er heeft zich een fout opgetreden bij het uploaden van het bestand!<BR></P>";
        exit();
    }

    unlink($imgfile);
    print("[img]\"$final_filename\"[/img]");
    //maak de db connectie (staat in een include)
    //selecteer de bijbehorende db
    db_connect();
    db_select();
       
       $sql = "INSERT INTO images (Image) VALUES ('$final_filename')";
    if (mysql_query($sql))
      {
    echo("<P>Uw plaatje is succesvol toegevoegd. Vanaf nu wordt uw plaatje automatisch bij uw berichten geplaatst.</P>");
    echo("<BR> hieronder ziet u het door u doorgestuurde plaatje:<BR>");
    echo("[img]'$final_filename'[/img]");
      }
    else
  {
    echo("<P>Er heeft zich een fout voortgedaan. Email de webmaster.Vermeld daarbij de onderstaande code:<BR>");
    echo("<I>". mysql_error() . "</I><BR>");
    echo("Wij zullen het dan zo snel mogelijk oplossen.Klik hier om terug te keren naar de Website.</P>");
  }
}
?>


</head>
<body bgcolor="#FFFFFF">

    <h2>Verstuur uw plaatje</H2>
    
    <form action="<?=$SCRIPT_NAME; ?>" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="500000">
    <p>Verstuur plaatje: <input type="file" name="imgfile"><br>
    <font size="1">Klik om te verkennen en het plaatje te kiezen</font><br>
    <br>
    <input type="submit" value="Verstuur Plaatje">
    <p><B>N.B.</B>Let op dat alleen jpeg bestanden onder de 500KB worden toegelaten!</p>
    </form>

</body>
</html>

<?
    function getFileExtension($str) {

        $i = strrpos($str,".");
        if (!$i) { return ""; }

        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);

        return $ext;

    }
    function randomize_filename(){ 
           $keys=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'); 
           for ($x=0; $x <= 7; $x++){ 
               $random=rand(0,35); 
               $random=round($random); 
               $value=$keys[$random]; 
               $fname[$x]=$value; 
           } 
           $value=$fname[0].$fname[1].$fname[2].$fname[3].$fname[4].$fname[5].$fname[6].$fname[7].".jpg"; 
           return $value; 
    }
?>

Gekkie is a proud member of TheBenny!


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Zou handig zijn als je vertelt wat er niet lukt, wat er fout gaat, wat er wel goed gaat. Welke "foutmeldingen" je ziet. e.d.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Zat ik me later ook te bedenken :)
- Het resizen/scalen doet ie niet...
- Als er geen bestand wordt opgegeven geeft ie een fout melding (deze kan ik niet "mooi" maken) (hiervoor moet dus een speciale if statement ofsow... nu komt ie namelijk met een "" extensie en dus ook een unlink probleem)

Maar dat laatste is maar een bijzaak .... Het voornaamste is het resizen/scalen

Gekkie is a proud member of TheBenny!


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 23 oktober 2001 13:17 schreef _Gekkie_ het volgende:
- Als er geen bestand wordt opgegeven geeft ie een fout melding (deze kan ik niet "mooi" maken)
$imgfile_name leeg.. dan geen file. Simpel IF statementje dus.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
hmmmzz... had ik geprobeerd, maar dan pakte die die if altijd? (ook als er dus wel een bestand geupload was...?)

Moet die if ($imgfile == ""){} dan buiten de if ($REQUEST_METHOD == "POST") nee toch?

Gekkie is a proud member of TheBenny!


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 23 oktober 2001 13:21 schreef _Gekkie_ het volgende:
hmmmzz... had ik geprobeerd, maar dan pakte die die if altijd? (ook als er dus wel een bestand geupload was...?)

Moet die if ($imgfile == ""){} dan buiten de if ($REQUEST_METHOD == "POST") nee toch?
Nee moet erbinnen. Wordt het altijd uitgevoerd is er geen file geupload met de variabele naam $imgfile :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Nee moet erbinnen. Wordt het altijd uitgevoerd is er geen file geupload met de variabele naam $imgfile
Hmnmzz.. maar goed ik neem aan dat je bedoelt dat ik m erbinnen moet zetten...
Thnx...

Nu nog het échte probleem.. hoe scale ik dat jpeg-je dan!??!

Gekkie is a proud member of TheBenny!


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

PHP:
1
2
3
4
<?
system("djpeg $imgfile >$tmpimg");        
system("pnmscale -xy 100 100 $tmpimg | cjpeg -smoo 10 -qual 50 >$imgfile");
?>
deze 2 programma's (djpeg en pnmscale) moeten natuurlijk wel aanwezig zijn op de server..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Tader
  • Registratie: September 2001
  • Laatst online: 13-08-2024

Tader

mx01.hotmail.com:~#

Of probeer het scalen eens met convert uit imagemagic...
system("convert -scale 100x100 groot.jpg klein.jpg");

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 23:05
Ik heb dit een keer geschreven. Is niet zo moeilijk.
Dit is bedoel om de [img]-tag om te zetten in een <a href=..>

Beetje aanpassen en je bent klaar.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
 function checkimage($file){
  $name=GeneratePWD();
  $fin=@fopen($file, 'r');
  $image=@fread($fin, 1024000);
  @fclose($fin);
  $fp=@fopen("images/$name.gif", 'wb');
  @fwrite($fp, $image);
  @fclose($fp);
  unset($image);
  $size=@GetImageSize("images/$name.gif");
  $bestand=filesize("images/$name.gif");
  $grootte=round($bestand / 1000, 2);
   $sizey = $size[0];
   $sizex = $size[1];
   if ($sizey>200){
   $deel= $sizey/200;
   $width = $sizey/$deel;
   $height = round($sizex/$deel);

   }else{
   $height = $sizex;
   $width = $sizey;
   }
   if ($height!="" || $width!=""){
   $url="<br clear=\"all\">[img]\"images/$name.gif\"[/img]";
   }
   return $url;
   }
?>

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 23:05
Ik heb dit een keer geschreven. Is niet zo moeilijk.
Dit is bedoel om de [img]-tag om te zetten in een <a href=..>

Beetje aanpassen en je bent klaar.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
 function checkimage($file){
  $name=GeneratePWD();
  $fin=@fopen($file, 'r');
  $image=@fread($fin, 1024000);
  @fclose($fin);
  $fp=@fopen("images/$name.gif", 'wb');
  @fwrite($fp, $image);
  @fclose($fp);
  unset($image);
  $size=@GetImageSize("images/$name.gif");
  $bestand=filesize("images/$name.gif");
  $grootte=round($bestand / 1000, 2);
   $sizey = $size[0];
   $sizex = $size[1];
   if ($sizey>200){
   $deel= $sizey/200;
   $width = $sizey/$deel;
   $height = round($sizex/$deel);

   }else{
   $height = $sizex;
   $width = $sizey;
   }
   if ($height!="" || $width!=""){
   $url="<br clear=\"all\">[img]\"images/$name.gif\"[/img]";
   }
   return $url;
   }
?>

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Hmmmzz.. heb het geprobeerd, maar zie niet hoe ik dat nou kan veranderen zodat het wél werkt?? :?

Like i said, ben totaal geen php-bink...

Gekkie is a proud member of TheBenny!


  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
tjaap... kom er nog steeds niet uit hoor??

snap er niets van... wat moet ik nu met dat resizen?

Heeft iemand een andere oplossing voor het niet oneindig groot kunnnen uploaden van plaatjes?

Gekkie is a proud member of TheBenny!


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 14-09 22:46

Apache

amateur software devver

kan je niet gewoon op size checken?

is veeeel eenvoudiger en minder server belastend ... :)

If it ain't broken it doesn't have enough features


  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
kan ik wel, maar aangezien de meeste gebruikers totaaale digibeten zijn, wil ik een willekeurig jpgje om kunnen bouwen tot het "standaar" 100x100 plaatje :)

Tenzij dit gewoon té lastig is.... dan moet ik inderdaad maar die hele zooi eruit gooien :(

Gekkie is a proud member of TheBenny!


Verwijderd

Het is niet zo lastig (ik doe het namelijk ook op een site: ge-uploade plaatje in een dir en een thumbnail in een andere dir).

Kijk hier eens: http://nl.php.net/manual/nl/function.imagecopyresized.php

Om de verhouding goed te houden moet je dus eerst de hoogte en breedte van het plaatje weten. Als de hoogte altijd 100 moet zijn wordt het "x = hoogte / 100". De breedte waarnaar je 'm moet resizen is dan "breedte / x".

Verwijderd

exec("/usr/bin/djpeg -pnm -maxmemory 1m $filenaam | /usr/bin/pnmscale -xysize $width $height | /usr/bin/cjpeg -maxmemory 1m -optimize -progressive > $cache_foto", $output, $return_value);

Bovenstaad script werkt op een meeggeven breedte en hoogte. In het script waar ik het uit heb worden zogenaamde cache files gemaakt.

Op het moment dat een foto wordt geupload komt ie in een images dir te staan. Wordt daarna de foto opgevraagd, dan wordt deze geresized naar het juiste formaat en in een cachedir gezet. De volgende keer dat de foto opgehaald wordt pakt ie em dus uit de chache. Wordt de foto de volgende keer als een ander formaat opgehaald, dan wordt er weer een nieuwe chache foto gemaakt.

Ik kan hier het hele script posten als daar behoefte aan is, ik wil het ook wel meelen.

;)

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
als je m zou willen melen, thnx!! :)

Gekkie is a proud member of TheBenny!

Pagina: 1