Ankündigung

Einklappen
Keine Ankündigung bisher.

Bild hochladen --> verkleinern --&a

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bild hochladen --> verkleinern --&a

    Hallo zusammen,

    ich versuche verzweifelt ein bild zu laden .. es zu verkleinern.. und dann in die Datenbank zu speichern.

    Einlesen des Bildes: inserat.php
    Code:
    <form action=\"inserat-mysql.php\" method=\"post\" enctype=\"multipart/form-data\">
    
    <table border=\"0\" width=\"60%\">
    ...
    ...
    ...  
    <td width=\"28%\"><input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"100000000\"><input type=\"file\" name=\"bin_data\"></td>
    Hier soll das Bild im Speicher verkleinert werden und in die Datenbank geschrieben werden (als BLOB): inserat-mysql.php
    Code:
    ...
    if ($bin_data){ 	// wenn Bild hochgeladen wurde, dann soll das hier ausgeführt werden damit es in die Datenbank geladen werden kann
    
    	$data2 = addslashes(fread(fopen($bin_data, "r"), filesize($bin_data)));
    	echo" Dateiname: $bin_data_name
     Dateigröße: $bin_data_size
     Dateityp: $bin_data_type
    ";
    }
    
    // funktion zum verkleinern
       function createIMG($img_src, $img_width , $img_height, $des_src) {
          $im = imagecreatefromjpeg($img_src);
          list($src_width, $src_height) = getimagesize($img_src);
          echo "$src_width";
          echo "$src_height";
          if($src_width >= $src_height) {
             $new_image_width = $img_width;
             $new_image_height = $src_height * $img_width / $src_width;
          }
          if($src_width < $src_height) {
             $new_image_height = $img_width;
             $new_image_width = $src_width * $img_height / $src_height;
          }
          $new_image = imagecreate($new_image_width, $new_image_height);
         //imagecopyresized($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
      imagecopyresampled ($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
    
    
        $des_src =  imagejpeg($new_image, 60 );
    }
    // --------------- bild verkleinern---------------------
    
                                      // zu verkleinernde Datei : data2  
       $data;  	                  // veränderte datei
       $groesse_x = "300";            // maximale Seitenlänge x
       $groesse_y = "300";            // maximale seitenlänge y
      createIMG($data2, $groesse_x, $groesse_y, $data);   // verkleinern
    
    if (isset($inserieren) AND ($modell)) {
    
    $sql = "INSERT INTO autos (kurzbeschreibung,marke,modell,kategorie,kraftstoff,leistung,baujahr,kilometer,farbe,hsn,tsn,ausstattung,zustand,plz,ort,telefon,handy,email,bin_data,filename,filesize,filetype,ip,host) VALUES ('kurzbeschreibung','$marke','$modell','$kategorie','$kraftstoff','$leistung','$baujahr','$kilometer','$farbe','$hsn','$tsn','$ausstattung','$zustand','$plz','$ort','$telefon','$handy','$email','$data','$bin_data_name','$bin_data_size','$bin_data_type','$ip','$host')";
      
    mysql_query ($sql) or die("Problem beim laden in DB: " . mysql_error());
    
    }
    if (!$inserieren){ echo "Das geht fai nicht, gell?!!";}
    mysql_close();

    Leider erhalte ich folgende Fehlermeldungen:

    Dateiname: PICT0013.JPG
    Dateigröße: 1214156
    Dateityp: image/pjpeg

    Warning: imagecreatefromjpeg(ÿØÿáØEExif\0\0II*\0\0\0\0 \0\0 \0\0\0ž\0\0\0\0\0\0\0¾\0\0\0\0 \0\0\0Ü\0\0\0\0\0\0\0\0\0\0\0\0\0\0ê\0\0\ 0\0\0\0\0ò\0\0\0(\0\0\0\0\0\0\01\0\0\0\ 0ú\0\0\02\0\0\0\0\0\0\0\0\0\0\0\0\0i‡\0 \0\0\0V\0\0¥Ä\0(\0\0\0.\0\0\0\0KONICA MINOLTA DIGITAL CAMERA \0Konica Minolta Camera, Inc.\0\0\0DiMAGE Xg\0\0\0\0\0H\0\0\0\0\0\0H\0\0\0\0\0\0DiMAGE Xg Ver1.02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\02004:07:31 19:10:27\0PrintIM\00250\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0%\0š‚\0\0\0\0\0\0‚\0\0\0 \0 \0\0\"ˆ\0\0\0\0\0\0\0\'ˆ\0\0\0\02\0\0\0\0\ 0\0\0\00220\0\0\0\0(\0\0\0\0\0\0<\0\0‘ \0\0\0\0\0‘\0\0\0\0P\0\0’ \0\0\0\0X\0\0’ \0\0\0\0`\0\0’\0\0\0\0h\0\0’\0\0\0\0\0\0 \0’\0\0\0\0\0\0\0\0 ’\0\0\0\0 \0\0\0 ’\0\0\0\0p\0\0’\0\0\0\0x\0\0|’\0ø\0\0‚\0 \0†’\0}\0\0\0€\0\0\0 \0\0\0\00100 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0d\0\0\0£\0\0\0\0\0\0\0£\0\0\0\0\ 0\0\0¤\0\0\0\0\0\0\0\0¤ in /var/www/html/web181/html/inserat-mysql.php on line 22

    Warning: getimagesize(ÿØÿáØEExif\0\0II*\0\0\0\0 \0\0 \0\0\0ž\0\0\0\0\0\0\0¾\0\0\0\0 \0\0\0Ü\0\0\0\0\0\0\0\0\0\0\0\0\0\0ê\0\0\ 0\0\0\0\0ò\0\0\0(\0\0\0\0\0\0\01\0\0\0\ 0ú\0\0\02\0\0\0\0\0\0\0\0\0\0\0\0\0i‡\0 \0\0\0V\0\0¥Ä\0(\0\0\0.\0\0\0\0KONICA MINOLTA DIGITAL CAMERA \0Konica Minolta Camera, Inc.\0\0\0DiMAGE Xg\0\0\0\0\0H\0\0\0\0\0\0H\0\0\0\0\0\0DiMAGE Xg Ver1.02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\02004:07:31 19:10:27\0PrintIM\00250\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0%\0š‚\0\0\0\0\0\0‚\0\0\0 \0 \0\0\"ˆ\0\0\0\0\0\0\0\'ˆ\0\0\0\02\0\0\0\0\ 0\0\0\00220\0\0\0\0(\0\0\0\0\0\0<\0\0‘ \0\0\0\0\0‘\0\0\0\0P\0\0’ \0\0\0\0X\0\0’ \0\0\0\0`\0\0’\0\0\0\0h\0\0’\0\0\0\0\0\0 \0’\0\0\0\0\0\0\0\0 ’\0\0\0\0 \0\0\0 ’\0\0\0\0p\0\0’\0\0\0\0x\0\0|’\0ø\0\0‚\0 \0†’\0}\0\0\0€\0\0\0 \0\0\0\00100 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0d\0\0\0£\0\0\0\0\0\0\0£\0\0\0\0\ 0\0\0¤\0\0\0\0\0\0\0\0¤\0\0\0 in /var/www/html/web181/html/inserat-mysql.php on line 23

    Warning: Division by zero in /var/www/html/web181/html/inserat-mysql.php on line 28

    Warning: imagecreate(): Invalid image dimensions in /var/www/html/web181/html/inserat-mysql.php on line 34

    Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/html/web181/html/inserat-mysql.php on line 36

    Warning: imagejpeg(): supplied argument is not a valid Image resource in /var/www/html/web181/html/inserat-mysql.php on line 39



    kann mir jemand sagen worann das liegen kann ??

    danke im vorraus

    andi

  • #2
    kann mir jemand damit weiterhelfen ?

    ich will ja nicht nerven aber ich hab echt ein problem .. und würde mich echt freuen wenn mir jemand einen tipp geben könnte.

    Kommentar


    • #3
      1. Poste mal die wichtigen Teile des fehlerhaften Codes.

      2. Lass es mit dem Speichern von Grafiken in Datenbanken. Das ist unfein und unsinnig. Sowas gehört ins Filesystem und in der Datenbank sollte nur eine Referenzierung stehen. Kostet unnötig Speicher in der Datenbank und ist langsamer als das Direkte Anzeigen vom Filesystem aus. So mußt du es IMMER über ein Script jagen, was die Daten aus der Datenbank zieht, sie aufbereitet zum Anzeigen und dann zum Client schickt.

      Kommentar


      • #4
        welche teile des codes fehlen dir ? auf einer seite lade eich ein bild.. übergebe es an eine andere seite ... und will es dann verkleinern um es im format 300x300 in die Datenbank zu legen

        Das mit der datenbank ist mir schon klar .. aber ich würd es eben trotzdem gern machen die bilder werden ja nur maximal 15k groß

        Kommentar


        • #5
          Mir sagt die Fehlermeldung so nichts. Ich muß den Zusammenhang mit dem Source haben.

          Ich könnte jetzt wild drauflos raten, aber ich ziehe dann doch eine Analyse vor.

          Egal wie groß die Bilder sind, sowas gehört halt nicht in eine Datenbank. Du belastest den Server nur unnötig. Hach, manchmal sehne ich die Zeiten herbei wo 16 KB sehr viel waren und die CPUs mit 1,70 Mhz liefen. Da lernte man noch mit Resourcen umzugehen Ist jetzt nichts gegen dich, sondern zeigt nur eine in meinen Augen negative Entwicklung auf in der heutigen Zeit.

          Kommentar


          • #6
            Nach langer Zeit das gleiche Problem

            Das Problem ist bei mir das gleiche wie bei dem Threadersteller oben. Da ich den ganzen Tag herumgesucht und nur diesen unbeantworteten Thread gefunden habe, schreibe ich nochmal in diesen alten Thread hinein.

            Um mein Problem (und das vom ersten User ) genauer zu spezifizieren:

            PHP-Code:
            //Ich nutze die GD-Funktion imgcreate() oder imgcreatetruecolor, um ein neues Image zu generieren:
            $thumb ImageCreateTrueColor($thumbbreite,$thumbhoehe);

            // In dieses kopiere ich nun ein Bild, was ich genau wie der Kollege oben aus einem Formular erhalten habe (welches ich hier nicht poste. Es funktioniert auf jeden Fall). Zunächst das Original:

            $Bilddatei addslashes(fread(fopen(($_FILES['Bilddatei']['tmp_name']), "r"), 
            filesize($_FILES['Bilddatei']['tmp_name'])));

            //Dann Original nochmal zum Bearbeiten in ein kreiertes Image
            $originalbild ImageCreateFromJPEG($_FILES['Bilddatei']['tmp_name']);

            //Größe des Originals ermitteln
            $breite ImageSX($originalbild);
            $hoehe ImageSY($originalbild);

            // und passe dabei die Größe an:

            $thumbbreite 250;
                    
            //Berechnen Thumbhoehe
            $thumbhoehe intval($hoehe $thumbbreite $breite);
                    
            ImageCopyResized($thumb,$originalbild,0,0,0,0,$thumbbreite,$thumbhoehe,$breite,$hoehe);


            //Dieses möchte ich nun mit dem vorher geladenen Original in ein BLOB meiner Datenbank schreiben (Ja, wirklich, in die db, trotz Ressourcenverbrauch, Danke für alle Hinweise dazu, das ist nicht die Frage ;-) )

            ///HIER brauche ich nun Hilfe, siehe unten nach dem Code


            //Ab hier funktioniert wieder alles, außer dem Nachbeschriebenen
            $qryInsert "INSERT INTO tanzbilder (Datei,Thumb) ".
                    
            "VALUES ('$Bilddatei','$thumb')"
            Durch Test mit imagejpeg($thumb) weiß ich, das $thumb wirklich mit einem Bild gefüllt ist.
            Aber lasse ich den Code so wie oben, schreibt es mir nur "Resource-ID#6" in das BLOB-Feld und nicht die Binärdaten selbst. Die hochgeladene Bilddatei wird korrekt übertragen.

            Bei dem unbeholfenen Versuch, mit $thumbblob = imagejpeg($thumb) die Daten in $thumbblob zu bekommen und die Variable dann zu speichern, ignoriert php das und gibt die Binärdaten auf dem Bildschirm aus. Der Effekt ist bei dem ersten Post oben zu sehen.

            Also: Wie bekomme ich den Inhalt von $thumb in die Datenbank, statt nur die ID?

            Ich danke im Vorraus

            Kommentar


            • #7
              18 Stunden gesucht, hier gefragt - und nach 10 Minuten selbst Antwort gefunden...

              Das Problem war ja, irgendwie an den Inhalt vom Image $thumb zu kommen.
              Nun habe ich herausgefunden wie es geht und erfolgreich getestet:

              Eingefügt werden muss zwischen dem kompletten Image-Erzeugen und vor dem SQL-String noch dies:

              PHP-Code:
              //Thumb in ein Objekt schreiben
                      
              ob_start();
                      
              imageJPEG($thumb);
                      
              $thumbtmp=ob_get_contents();
                      
              ob_end_clean();  

              //Das "Objekt" noch SQL-lesbar machen        
                      
              $thumbblob addslashes($thumbtmp); 
              Damit geht es wunderbar, also schnell den alten Thread wieder zugemacht, Danke, das Ihr im Geiste bei mir wart

              Kommentar

              Lädt...
              X