Bildupload - Thumbnail erzeugen - SCHWARZ

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

  • Bildupload - Thumbnail erzeugen - SCHWARZ

    Hallo,

    ich betreibe einen Seite, auf der User Bilder hochladen können. Aus dem Bild wird automatisch ein Thumbnail erzeugt und zwar mit folgender Funktion:

    PHP-Code:
    function CreateThumbnail($Ordner$Grafikdatei$ThumbnailBreite// Ordner mit Slash angeben!
    {
      
    $pfad $Ordner.$Grafikdatei;
      
    $Bilddaten getimagesize($pfad);
      
    $OriginalBreite $Bilddaten[0];
      
    $OriginalHoehe $Bilddaten[1];

      if(
    $OriginalBreite $ThumbnailBreite)
      {
        
    $ThumbnailBreite $OriginalBreite;
      }
      
      
    $Skalierungsfaktor $OriginalBreite/$ThumbnailBreite;

      
    $ThumbnailHoehe intval($OriginalHoehe/$Skalierungsfaktor);

      
      if(
    $Bilddaten[2] == 1// GIF
      
    {
        
    $Originalgrafik ImageCreateFromGIF($pfad);
        
    $Thumbnailgrafik ImageCreateTrueColor($ThumbnailBreite$ThumbnailHoehe);

        
    ImageCopyResampled($Thumbnailgrafik$Originalgrafik0000$ThumbnailBreite
          
    $ThumbnailHoehe$OriginalBreite$OriginalHoehe);
        
        
    ImageDestroy($Originalgrafik);
        
    ImageGIF($Thumbnailgrafik$Ordner."thumb_".$Grafikdatei);
        
    ImageDestroy($Thumbnailgrafik);
      }
      elseif(
    $Bilddaten[2] == 2// JPG
      
    {
        
    $Originalgrafik ImageCreateFromJPEG($pfad);
        
    $Thumbnailgrafik ImageCreateTrueColor($ThumbnailBreite$ThumbnailHoehe);
        
    ImageCopyResampled($Thumbnailgrafik$Originalgrafik0000$ThumbnailBreite
         
    $ThumbnailHoehe$OriginalBreite$OriginalHoehe);
        
    ImageDestroy($Originalgrafik);
        
    ImageJPEG($Thumbnailgrafik$Ordner."thumb_".$Grafikdatei);
        
    ImageDestroy($Thumbnailgrafik);
      }
      elseif(
    $Bilddaten[2] == 3// PNG
      
    {
        
    $Originalgrafik ImageCreateFromPNG($Grafikdatei);
        
    $Thumbnailgrafik ImageCreateTrueColor($ThumbnailBreite$ThumbnailHoehe);
        
    ImageCopyResampled($Thumbnailgrafik$Originalgrafik0000$ThumbnailBreite
          
    $ThumbnailHoehe$OriginalBreite$OriginalHoehe);
        
    ImageDestroy($Originalgrafik);
        
    ImagePNG($Thumbnailgrafik$Ordner."thumb_".$Grafikdatei);
        
    ImageDestroy($Thumbnailgrafik);
      }
     
      
      
      
    // Pfad zum Thumbnail zurueckgeben
      
    return $Ordner."thumb_".$Grafikdatei;


    Das Script funktioniert zu weiten Teilen sehr gut.
    Das Problem ist nur, dass manche Thumbnails komplett schwarz sind, obwohl die Originaldateien richtig kopiert werden (immer relativ große Bilddateien). Ich vermute stark, dass dieses Problem an meinem Hoster (1und1) liegt, der in der FAQ schreibt:

    Folgende Einschränkungen sind technisch für Skripte festgelegt, welche von Ihnen auf unseren Webservern ausgeführt werden:
    * Prozesse dürfen max. 10 Sekunden Rechenzeit beanspruchen
    * Prozesse dürfen max. 32 Megabyte Speicher belegen
    * Es dürfen max. 24 Prozesse gleichzeitig laufen

    Bei Überschreitung einer der oben genannten Einschränkungen wird das Script „getötet“. Dieses macht sich durch einen „Internal Server Error (HTTP 500)“ oder durch die Fehlermeldung „CGI Limits reached, please try later!“ bemerkbar.

    Die Rechenzeit von 10 Sekunden bezieht sich übrigens nicht auf die reale Laufzeit, sondern ist abhängig von der tatsächlichen Belastung des Servers.

    Bitte beachten Sie:
    Beansprucht ein Script 10% der Rechenleistung und läuft 2 Sekunden (und das ist schon sehr viel), beträgt die tatsächliche Rechenzeit nur 0,2 Sekunden.
    Allerdings kommt kein "Internal Server Error" und auch kein "CGI Limits reached", sondern, wie gesagt, die Thumbnails sind einfach nur schwarz.

    Was kann ich tun, damit die Thumbnails dennoch korrekt erzeugt werden können?

    Vielen Dank für eure Hilfe
    Boron
    Zuletzt geändert von Boron; 01.06.2006, 17:24.

  • #2
    Läuft das Script auf einem System ohne diese Einschränkungen mit den selben Bilddateien problemlos, solltest du mal die Laufzeit messen und ggf. optimieren. Wobei da wahrscheinlich nicht viel rauszuholen ist, die Image-Funktionen brauchen nunmal ihre Zeit, wenn es ein großes Bild ist.

    Als letztes könnte man einen Providerwechsel in Betracht ziehen, aber zuvor (wenn einfache Optimierungen nicht möglich sind oder nicht ausreichen) könnte man versuchen, die Transformation per system('convert ...'); vorzunehmen.

    Kommentar


    • #3
      Hi,

      danke für deine Antwort.

      Lokal wird das Thumbnail ohne Probleme erzeugt...

      Was könnte ich denn optimieren?

      Transformation per system('convert ...');
      Wo finde ich nähere Infos darüber?

      Providerwechsel ist hier in diesem Falle sehr sehr ungünstig.

      Kommentar


      • #4
        convert ist ein Teil von ImageMagick. Wir hatten letztens einen hier, der seine Thumbnails auch so erstellt hat. Such den Thread mal, da kannst du u.U. etwas Code entnehmen.
        system() sollte dir bekannt sein.

        Kommentar


        • #5
          - wie gross sind "grosse bilddateien" in pixel
          - was sagt die phpinfo() zum memory limit

          @onemorenerd
          ich kann mir kaum vorstellen, dass 1+1 imagemagick im shared hosting bereitstellt bzw. system() oder exec() erlaubt. oder täusche ich mich?
          Kissolino.com

          Kommentar


          • #6
            - wie gross sind "grosse bilddateien" in pixel
            mit denen es schwarz wird: 2816 x 2112 (halt direkt von der digicam, in bester qualität) aber ich will und kann von meinen Usern halt nicht erwarten, dass sie die Bilder vorher bearbeiten.......

            - was sagt die phpinfo() zum memory limit
            memory_limit 8M 8M


            ich glaube auch nicht, dass system() oder exec() erlaubt ist, aber ich weiß grad nicht, wo ich das sehe...

            auf der selben Seite, die ich oben zitiert habe, steht noch

            PHP


            PHP läuft bei 1&1 WebHosting als CGI. Damit funktioniert eine Authentifizierung per Script nicht (siehe: >> http://php3.de/manual/de/features.http-auth.php ).

            Magic Quotes GPC sind in der Version 3 (.php3) nicht eingeschaltet!
            In der Version 4 (.php4) sind sie aktiviert. session.use_trans_sid sind in der aktuellen PHP-Version deaktiviert.


            SSI


            Bei SSI sind die exec Befehle ausgeschaltet. Die Befehle <!--#exec cgi="cgi.pl"--> und <!--#include virtual="cgi.pl"--> funktionieren daher nicht.
            Ich muss system() heute Abend mal ausprobieren...

            Kommentar


            • #7
              @Wurzel: Ich war noch nie bei 1+1, aber vermutlich hast du recht.

              Kommentar


              • #8
                @boron
                bei 8MB geht die gd-library bei bildern > 1024 x 768 px schneller in die wicken als du gucken kannst (leidvolle erfahrung). wenn du bei 1&1 bleiben musst, ein upgrade nicht möglich ist und die bilddaten so gross sein müssen, bleibt dir nur der weg, die thumbnail-erzeugung auf einem anderen server zu machen und die daten auf den 1&1 server zu ziehen (ftp, fopen).

                @onemorenerd
                kunden zu haben, die bei 1&1 sind, reicht vollkommen
                Kissolino.com

                Kommentar


                • #9
                  Original geschrieben von Boron
                  mit denen es schwarz wird: 2816 x 2112 (halt direkt von der digicam, in bester qualität)
                  2718 x 2112 x 3 (true color) sind 17842176 Bytes, also über 17 MB.

                  Dass man da mit 8 MB memory_limit nicht weit kommt, sollte klar sein.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    *LOL* - soll was für nen Verein (darf ja wieder furchtbar viel kosten - und da darf man ja erwarten dass da alles funktioniert ) machen der auch bei 1und1 gehostet ist - dann kann ich denen ja gleich sagen, dass sie das streichen können
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      soll was für nen Verein [...] machen
                      Genau dasgleiche war's hier ^^
                      Nur dass die Domain schon vor meiner Zeit dort angemeldet war und ich die Homepagestaltung übernommen habe. Mal sehn, vielleicht rate ich dem Schatzmeister zum Providerwechsel

                      Kommentar


                      • #12
                        Gleiche Vorgeschichte bei mir - nervt mich eh, weil kaum was zu holen ist..

                        Original geschrieben von Boron
                        Mal sehn, vielleicht rate ich dem Schatzmeister zum Providerwechsel
                        bei mir schon geschehen
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar

                        Lädt...
                        X