+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Bildhochladen und in zwei versionen speichern

  1. #1
    Verbringt hier viel Zeit Avatar von Viril
    Registriert seit
    28.07.2005
    Ort
    my home: www
    Alter
    29
    Beiträge
    551
    Bedankte sich
    26
    Erhielt 53 Danksagungen
    in 50 Beiträgen

    Standard Bild hochladen und in zwei versionen speichern

    Hallo zusammen,

    ich habe ein Problem beim abspeichern eines JPG in zwei Versionen (big und thumbnail) nach upload.

    Als erstes hole ich mir das JPG aus dem Form:
    PHP-Code:
    if (!empty($_FILES)) {
    $tempNormal $_FILES['Filedata']['tmp_name'];
    $targetPath $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

    $targetNormal str_replace('//','/',$targetPath) . $name_normal
    Dann nutze ich eine eigene Funktion um das JPG auf meine gewünschte Größe zu verkleinern, ein Wasserzeichen hinzuzufügen etc.:
    PHP-Code:
    makenormal($tempNormal,$tempNormal); 
    anschließend wird das JPG an gewünschter stelle abgespeichert.
    PHP-Code:
    move_uploaded_file($tempNormal,$targetNormal); 
    Bis hierher funktioniert alles einwandfrei.

    move_uploaded_file funktioniert nur einmal. Ich möchte aber noch ein Thumbnail erzugen und dieses unter anderem namen im selben Ordner abspeichern.

    so habe ich es jetzt mal versucht, nur leider funktioniert das nicht:
    PHP-Code:
    $thumb $targetPath."tn".$name_normal;
    $tempThumb imagecreatefromjpeg($tempNormal);
    makethumb($tempThumb$thumb ); 
    meine Funktion makethumb sieht so aus:
    PHP-Code:
    // Thumbnail
    function makethumb($image,$new){
    $im imagecreatefromjpeg($image);

    if(
    imagesy($im)>='150' || imagesx($im)>='150'){
    if(
    imagesy($im)>=imagesx($im)){
    $y '150';
    $x = ($y*imagesx($im))/imagesy($im);
    }else{
    $x '150';
    $y = ($x*imagesy($im))/imagesx($im);
    }
    }else{
    $x imagesx($im);
    $y imagesy($im);
    }
    $yyy=0;
    $xxx=0;
    $imw imagecreatetruecolor($x,$y);

    imagecopyresampled($imw$im$xxx,$yyy,0,0,$x,$y,imagesx($im), imagesy($im));

    imagejpeg($imw$new85);
    imagedestroy($imw);
    return 
    true;


    Was mache ich denn Falsch ??
    das imagejpeg($imw, $new, 85); sollte das JPG doch eignetlich unter dem Pfas $new abspeichern (=Pfad in $thumb)
    Geändert von Viril (13.09.2010 um 10:26 Uhr)
    1. Suche benutzen
    2. Thread als "gelöst" markieren
    3. Danke-Button kommt immer gut ;-)

  2. #2
    Neu an Board
    Registriert seit
    02.09.2010
    Beiträge
    23
    Bedankte sich
    0
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Hi, ich bin ein wenig unsicher, aber $name_normal hat die Dateiendung enthalten (sieht man nicht aus dem Source-Happen)? Bin ich selbst schon drauf reingefallen ...

    Warum übergibst Du $tempThumb, wenn $im in der function() das nochmal macht - nämlich auf $tempThumb (jetzt $image)? In meinen Augen ist der Schritt zu viel; ergo "nur" in der Funktion wäre wunderbar.

    Was passiert, wenn Du ein Image ohne Upload thumbnailen willst - macht er das?

    Weiterhin gefällt mir $_REQUEST in Deinem Source nicht: "Die Variablen in $_REQUEST werden dem Skript mittels der GET-, POST- und COOKIE-Inputmechanismen zur Verfügung gestellt. Daher kann der Inhalt durch einen entfernten Benutzer modifiziert worden sein und ist daher als nicht vertrauenswürdig zu betrachten."

    Meld Dich, wenn weitere Hilfe nötig ...

  3. #3
    Verbringt hier viel Zeit Avatar von Viril
    Registriert seit
    28.07.2005
    Ort
    my home: www
    Alter
    29
    Beiträge
    551
    Bedankte sich
    26
    Erhielt 53 Danksagungen
    in 50 Beiträgen

    Standard

    Hi,

    erstmal danke für Deine Hilfe.

    Den Dateinamen än dere ich zufür durch:
    PHP-Code:
    $rand mt_rand(10000000,999999999);
    $name "pg_".$rand.".jpg";
    $thumb "tnpg_".$rand.".jpg"
    Ich habe jetzt noch unzählige Ändeurngen vorgenommen und alles mögliche ausprobiert...

    Hier mal eine etwas schlankere Version:
    PHP-Code:
    if (!empty($_FILES))
    {
         
    $temp $_FILES['Filedata']['tmp_name'];
         
    $targetPath $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

         
    $target str_replace('//','/',$targetPath) . $name;
         
    $thumb str_replace('//','/',$targetPath) . $thumb;

         
    // Normales Foto bearbeiten und speichern
         
    makenormal($temp$temp);
         
    move_uploaded_file($temp$target);

         
    // Thumbnail bearbeiten und speichern
         
    makethumb($target$thumb);


    Was mich total verwirrt ist, wenn ich nach dem "move_uploaded_file"
    PHP-Code:
     copy($target$thumb); 
    mache, habe ich das "normale" foto im richtigen ordner mit dem richtigen namen...
    also sollte doch mein $thumb passen - oder nicht !?

    Warum klappt das dann nicht mit meiner Funktion?
    Geändert von Viril (13.09.2010 um 09:39 Uhr)
    1. Suche benutzen
    2. Thread als "gelöst" markieren
    3. Danke-Button kommt immer gut ;-)

  4. #4
    Verbringt hier viel Zeit Avatar von Viril
    Registriert seit
    28.07.2005
    Ort
    my home: www
    Alter
    29
    Beiträge
    551
    Bedankte sich
    26
    Erhielt 53 Danksagungen
    in 50 Beiträgen

    Standard

    Beim schreiben meiner letzten Antwort habe ich mir gedacht ich versuch nochmal was anderes:

    PHP-Code:
    if (!empty($_FILES))
    {
         
    $temp $_FILES['Filedata']['tmp_name'];
         
    $targetPath $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

         
    $target str_replace('//','/',$targetPath) . $name;
         
    $thumb str_replace('//','/',$targetPath) . $thumb;

         
    // Normales Foto bearbeiten und speichern
         
    makenormal($temp$temp);
         
    move_uploaded_file($temp$target);

         
    copy($target$thumb);
         
    makethumb($thumb$thumb);

    Nun funktionier es! ...auch wenn ich nicht so recht verstehe warum ich das copy(); hier benötige...
    Kann es sein, dass $temp nach dem "move_uploaded_file" nicht mehr verfügbar ist ?!
    1. Suche benutzen
    2. Thread als "gelöst" markieren
    3. Danke-Button kommt immer gut ;-)

  5. #5
    Neu an Board
    Registriert seit
    02.09.2010
    Beiträge
    23
    Bedankte sich
    0
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Ich hab jetzt nochmal reingeschaut in meine Docs bzgl. "move_uploaded_file" - vom Funktionsnamen macht es Sinn, dass das File danach nicht mehr zur Verfügung steht. In der Doku ist es aber nicht erwähnt ...

    Somit wirst Du das Copy wirklich brauchen ... !

  6. #6
    War schon öfter hier
    Registriert seit
    23.09.2009
    Beiträge
    235
    Bedankte sich
    0
    Erhielt 62 Danksagungen
    in 59 Beiträgen

    Standard

    move_uploaded_file

    (PHP 4 >= 4.0.3, PHP 5)

    move_uploaded_file — Verschiebt eine upgeloadete Datei an einen neuen Ort
    Quelle: http://de.php.net/manual/de/function...oaded-file.php

    User Contributed Notes
    move_uploaded_file
    18-Aug-2010 03:42
    You can only move the uploaded file once. You can use copy() if you need the file in more than one place.
    ...
    JRequest/JFile/JFolder/JPath/JFilter/Joomla! Konstanten?
    In deinem Code befindet sich keine Validierung. Darf man davon ausgehen, dass eine vorhanden ist?
    Geändert von Barnum (13.09.2010 um 14:57 Uhr)
    Tell 'em what they want to hear. That will keep them coming back for more. I 've got some for everyone.

  7. #7
    Neu an Board
    Registriert seit
    02.09.2010
    Beiträge
    23
    Bedankte sich
    0
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Irgendwie scheint meine CHM zu alt zu sein ... ^^

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein