imagecreatetruecolor(): Problem mit großen Dateien

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

  • imagecreatetruecolor(): Problem mit großen Dateien

    Hallo.

    Ich hab ein etwas komplexeres Upload-Script geschrieben, für meine eigene Bildergalerie.
    Ich hab des ganze so konzipiert, dass des hochgeladene Bild zweimal verkleinert wird. Einmal auf Thumbnail-Größe (max. 130px H o. B), und im zweiten Durchgang wirds auf 550px H o. B verkleinert, weil ich es in einem festen Design ausgeben will, und da kanns eben net sein, dass die Datei, die z.B. von der Digicam kommt, 2000x?? pixel groß ist.
    So, die Funktion unten, funktioniert auch einwandfrei, alles andere auch. Nur mit größeren Dateien hab ich Probleme.
    Ich weiß jetzt nicht genau ab welcher Schwellen-größe des Problem auftritt, Fakt ist, dass es mit Bilder die 800kb groß sind, einwandfrei funktioniert, und mit nem Bild von der Digicam, des 1,25MB hat, mit dem funktionierts nicht...
    Hab mal n bisschen ausgetestet, an was es liegen könnte, und bin zu dem Schluss gekommen, dass es an der Funktion imagecreatetruecolor() liegen muss. Dabei brichts immer ab, und verarbeitet das bild nicht mehr weiter. (=> Überprüft mit ner echo-ausgabe nach jeder zeile unten. des echo nach imagecreatetruecolor() wird nie ausgegeben, des vorher schon. also wirds wohl an der funktion liegen... :-/ )

    hier erstmal der script-schnippsel:
    PHP-Code:
    ...
    } else if(
    $orghoehe <= $orgbreite){
        
    $zielbreite $hoehebreite;
        
    $zielhoehe = ($orghoehe*$zielbreite)/$orgbreite;
        
    $bildziel imagecreatetruecolor($zielbreite,$zielhoehe);
        
    $imgcopy imagecopyresampled($bildziel,$bildsrc,0,0,0,0,$zielbreite,$zielhoehe,$orgbreite,$orghoehe);
        
    $ausgabe imagejpeg($bildziel,"pict_$id.jpg",90);
        
    imagedestroy($bildziel);
    } else {
    .... 

    weiß jemand vielleicht ne lösung?! ich will ja auch normale digicam bilder hochladen können, und die meisten haben nunmal mehr als 1MB...
    wär super wenn mir jemand weiterhelfen könnte!!

    gruß,
    toby

  • #2
    Hast du mal mittels echo phpinfo() nachgesehen ob allenfalls eine Grössenbeschränkung für den Upload da reinspielt ?
    imho wird es kaum an der Funktion imagecreatetruecolor() liegen, denn die macht ja nicht mehr als ein "leeres" Bild mit deinen angegebenen Grössen zu erzeugen.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      vom server her sollte eigentlich alles in ordnung sein...
      phpinfo() unter:
      => http://www.kepler-abi06.de/test.php


      speicherbegrenzungen:
      memory_limit 32M
      post_max_size 8M
      upload_max_filesize 32M




      hmmm...
      stimmt, haste recht, erstellt ja nur n leeres bild...
      aber warum brichts dann immer an der stelle die bearbeitung ab?!?
      warum machts net weiter mit der nächsten zeile?! :-/
      und warum funktionierts mit kleineren dateien einwandfrei?!

      Kommentar


      • #4
        Error reporting auf error_reporting(E_ALL) ?
        Werden irgendwelche weiteren Fehler angezeigt.
        Kannst auch mal
        PHP-Code:
        $bildziel imagecreatetruecolor($zielbreite,$zielhoehe);
        var_dump($bildziel); 
        probieren um zu schauen ob die Fkt den erwarteten Wert zurückgibt.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Error reporting auf error_reporting(E_ALL).

          keine fehlermeldungen...
          es kommt auch keine fehlermeldung, wenns da einfach abbricht...
          der browser schreibt unten in die statuszeile einfahc nur "Fertig" und macht nichts mehr...


          var_dump($bildziel) liefert leider gar keine Informationen, weils ja nach dem imagecreatetruecolor() aufgerufen wird.
          und wie gesagt, wenn ich davor oder danach n echo reinsetz und was ausgeben lass, dann wird nur des echo davor angezeigt, des nach der funktion nicht...

          echt zum verzweifeln... :-/

          Kommentar


          • #6
            Re: imagecreatetruecolor(): Problem mit großen Dateien

            *seufz*

            Zum x-ten Mal, für Leute, die offenbar keine Ahnung haben, wie so eine Bildverarbeitung vor sich geht:
            Original geschrieben von Jaws
            Ich weiß jetzt nicht genau ab welcher Schwellen-größe des Problem auftritt, Fakt ist, dass es mit Bilder die 800kb groß sind, einwandfrei funktioniert, und mit nem Bild von der Digicam, des 1,25MB hat, mit dem funktionierts nicht...
            Wie groß die Bilddatei ist, ist relativ egal - schließlich speichert eine Digicam das Bild auch komprimiert ab.

            Aber um es zu bearbeiten, muss PHP das Bild logischerweise entpacken, braucht also bei True Color Breite * Höhe * 3 Byte an Speicherplatz dafür.

            Dass da bei größeren Bildern schnell mal das memory limit erreicht ist, sollte eigentlich einleuchten ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Re: Re: imagecreatetruecolor(): Problem mit großen Dateien

              Aber um es zu bearbeiten, muss PHP das Bild logischerweise entpacken, braucht also bei True Color Breite * Höhe * 3 Byte an Speicherplatz dafür.

              Dass da bei größeren Bildern schnell mal das memory limit erreicht ist, sollte eigentlich einleuchten ...
              ich weiß schon, dass es bei größeren bildern mal probleme geben kann...
              aber mit der größe muss des trotzdem irgendwie zusammenhängen...


              einfach mal ein kleines rechenbeispiel mit zwei dateien.

              Datei1.jpg ( 2048x1536 pixel, 655kb )
              Datei2.jpg ( 2304x1712 pixel, 1.25MB )


              Datei1.jpg wird ohne Probleme hochgeladen,
              Datei2.jpg nicht...

              Und jetzt rechne ich einfach mal nach deiner Formel:
              Für Datei1 würde entpackt 2048 * 1536 * 3 Byte beanspruchen. Nach Adam Riese wären das 9437184 Bytes
              Und für Datei2 hätten wir entpackt 11833344 Bytes

              Beide male wäre der benötigte speicherplatz um einiges geringer als das memory_limit das ich weiter oben angegeben hab... => 32 MB nämlich....


              spielt die dateigröße nicht vielleicht doch eine rolle?!
              oder an was könnte es sonst noch liegen?!




              nachtrag: mit einem anderen script auf meinem server, kann ich die datei übrigens ohne probleme hochladen und verkleinern.
              allerdings wird da NUR auf Thumbnail-größe verkleinert, und nicht auf z.B. 550 px oder so wie oben beschrieben....
              da entpackts die datei auf die selbe art und weise, und scheinbar wird da des memory_limit nicht überschritten... :-/
              Zuletzt geändert von Jaws; 26.01.2006, 22:01.

              Kommentar


              • #8
                und nochmal einen nachtrag:
                es kann wirklich nicht am memory_limit liegen!!!

                jetzt hab ich mal die thumbnail-funktion davor ablaufen lassen, anstatt wie bisher danach....
                das thumbnail wird ohne probleme erstellt....
                aber bei dem imagecreatetruecolor hängter sich dann wieder auf....

                und wenns des thumbnail ohne probleme erstellt, wo is dann jetzt des problem?!?!
                sicher net beim auslesen des bildes.... :-/

                Kommentar


                • #9
                  Bist du sicher und zwar gaaaaaanz sicher, dass du an die Fkt korrekte Parameter übergibst ?
                  dumpe mal deine Zielbreite und Zielhöhe und schaue ob die korrekte Werte haben.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Original geschrieben von Jaws
                    es kann wirklich nicht am memory_limit liegen!!!
                    Doch, ich denke schon.
                    jetzt hab ich mal die thumbnail-funktion davor ablaufen lassen, anstatt wie bisher danach....
                    das thumbnail wird ohne probleme erstellt....
                    Gut, für das einlesen des ersten Bildes reicht der Speicher wohl.
                    aber bei dem imagecreatetruecolor hängter sich dann wieder auf....
                    Das ist ja schon wieder ein neues Bild, welches im Speicher Platz finden muss ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von jahlives
                      Bist du sicher und zwar gaaaaaanz sicher, dass du an die Fkt korrekte Parameter übergibst ?
                      dumpe mal deine Zielbreite und Zielhöhe und schaue ob die korrekte Werte haben.
                      habs ausprobiert.... paramter werden alle korrekt übergeben...


                      Original geschrieben von wahsaga
                      Gut, für das einlesen des ersten Bildes reicht der Speicher wohl.

                      quote:aber bei dem imagecreatetruecolor hängter sich dann wieder auf....


                      Das ist ja schon wieder ein neues Bild, welches im Speicher Platz finden muss ...
                      nein.... des thumbnail-dingens wurde ja schon per imagedestroy($thumbziel); rausgelöscht ausm speichern....
                      daran hab ich schon gedacht.... :-/

                      Kommentar

                      Lädt...
                      X