Transparenz in PNG mit PHP erstellen - Seltsames Problem

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

  • Transparenz in PNG mit PHP erstellen - Seltsames Problem

    Ich arbeite an einem Script wie dem hier: stylefruits.de | Trendige Outfits von Frauen für Frauen
    Ich bearbeite JPG Bilder und entferne die weiße Hintergrundfarbe und mache diese transparent.. so weit so gut.

    das ist das Script mit dem ich die weiße Farbe entferne und transparent mache
    PHP-Code:
    <?php
    $o 
    "original.jpg";

    $img imagecreatefromjpeg($o);

    $index imagecolorallocatealpha($img255255255127); 
    imagecolortransparent($img$index);

    imagepng($img"png_image.png");

    ?>
    <img src="png_image.png" />
    Ok, das Bild ist nun transparent, aber leider nur im Bowser direkt nach der Ausgabe! Wenn ich es nun mit Photoshop öffne, ist die Transparenz weg und im weiterem Code unten ist sie auch nicht mehr vorhanden!

    Das ist der Code, mit dem ich die PNGs übereinander lege, und so ein JPG mit mehreren PNGs erstelle.

    Das funktioniert mit diesem Bild http://tuxpaint.org/stamps/stamps/an...artoon/tux.png super und auch wenn ich ein transparentes PNG Bild in Photoshop erstelle, funktioniert es auch 100% !!! Nur leider nicht wenn das PNG Bild mit dem oberem Code erstellt wird.

    PHP-Code:
    $canvas imagecreatetruecolor(500500);

    $weiss imagecolorallocate($canvas255255255);
    imagefill($canvas00$weiss);

    imagealphablending($canvasfalse); 
    imagesavealpha($canvastrue);

    for(
    $i 0$i 2$i++)
    {
        
    $w 300$h 300;

        if(
    $i == 1){
        
    $left 200$top 200;
        }else {
        
    $left 100$top 100;
        }

        
    $source "http://tuxpaint.org/stamps/stamps/animals/birds/cartoon/tux.png"//works fine!!!!
        
    $source "png_image.png"//does not work

        
    $source imagecreatefrompng($source);          

        
    $c 0;
        
    $o_w imagesx($source);
        
    $o_h imagesy($source);

        
    imagecopyresampled($canvas$source$left$top00$w$h$o_w$o_h);        
    }

    $dir "./";
    imagejpeg($canvas"image.jpg"); 
    ich verstehe einfach nicht, wieso die erstellte PNG nicht mehr transparent ist.

    Bitte helft mit endlich damit das hier gelöst werden kann

    DANKE!!!!
    Zuletzt geändert von BananaJo; 25.04.2013, 16:50.

  • #2
    schreibfehler eingeschlichen als du die dateinamen für uns geändert hast oder ist das auch sonst der fall?

    PHP-Code:
    imagepng($img"image.png");

    ?>
    <img src="png_image.png" /> 
    Gruß
    Uzu

    private Homepage

    Kommentar


    • #3
      schreibfehler eingeschlichen als du die dateinamen für uns geändert hast oder ist das auch sonst der fall?
      Sorry war nur hier falsch.. hab ich geändert

      Kommentar


      • #4
        Transparenzproblem

        Hallo BananaJo,

        ersetze mal die Zeile

        PHP-Code:
        $index imagecolorallocatealpha($img255255255127); 
        durch

        PHP-Code:
        $index imagecolorexact($img255255255); 

        Kommentar


        • #5
          $index = imagecolorexact($img, 255, 255, 255);
          ich auch auch schon probiert.. das macht leider keinen unterschied

          Kommentar


          • #6
            Dabei fällt mir ein, was ich schon vor Wochen erledigen wollte und zwischendurch leider in Vergessenheit geriet (eine Beschreibung fertig zu machen). Nun gut, was ich in Deinem Code nicht sehe, den Bereich, den Du mit Transparenz füllen und so abspeichern möchtest. Irgendwo müsste doch da doch wohl imagefilledrectangle folgen, also der Bereich, der in diesem Fall so groß sein sollte, wie das Bild und den Du mit Transparenz füllen möchtest oder nicht? Zumindest hatte ich das so verstanden und bei meinen Scripts so gehandhabt. Imagefill geht wohl auch, wenn das ganze Bild mit Transparenz gefüllt werden soll, habe ich nur noch nicht probiert.

            Text in Bilder mit PHP und imagettftext einfügen

            Für was ist diese Zeile gut?

            HTML-Code:
            <img src="png_image.png" />
            Rufst Du das Bild zum Speichern bzw. im Browser nicht über das Script auf und setzt dabei einen Image-Header?

            PHP-Code:
            header("Content-type: image/png"); 
            Nicht das ich mich gut auskennen würde mit der Bildverarbeitung, nur hat es praktisch funktioniert, auch mit der Transparenz. Bei mir rufe ich die Bilder mit der Script-Seite images.php auf, die enthält einen Image-Header und HTML hat in dieser Script-Seite nichts verloren. Anschließend kann ich dann die gespeicherten Bilder wie normale Bilder verwenden und mit image.png aufrufen.
            Zuletzt geändert von Melewo; 25.04.2013, 18:29.

            Kommentar


            • #7
              PHP-Code:
              $c 255;
              $trans imagecolorallocatealpha($img$c$c$c127);
              imagecolortransparent($img$trans);
              imagefilledrectangle($img00$w$h$trans); 
              bring leider auch nicht viel... genau das selbe problem..

              das Bild transparent zu bekommen ist ja kein Problem, nur eben, wenn ich es wieder aufrufe um es weiter zu bearbeiten, dann ist die transparenz weg oder der Hintergrund ist schwarz.

              also ich schlage mich nun schon 2 Wochen mit diesem Problem rum und glaube langsam, dass es einfach nicht mit PHP möglich ist.

              Wie bereits gesagt, funktioniert es super, wenn ich eine PNG direkt in Photoshop erstelle und dann verarbeite, funktioniert alles super... nur leider nicht, wenn ich die PNG mit PHP erzeuge..

              Kommentar


              • #8
                Zitat von BananaJo Beitrag anzeigen
                PHP-Code:
                <?php
                $o 
                "original.jpg";

                $img imagecreatefromjpeg($o);

                $index imagecolorallocatealpha($img255255255127); 
                imagecolortransparent($img$index);

                imagepng($img"png_image.png");

                ?>
                Wo ich mir jetzt nicht sicher bin, Du öffnest ein jpg und erstellst ein jpg und speicherst es dann mit png. Ob das so geht, weiß ich nicht, da JPG und Transparenz irgendwie nicht zusammen passen. Weiß jetzt nicht was Photoshop alles kann, arbeite für meine Belange mit PSP, doch kenne es da gar nicht anders, als dass ich ein JPG-Bild nicht mit Transparenz speichern kann. Würde mal sagen, speichere ein Bild erst als PNG, öffne es dann mit imagecreatefrompng und nicht mit imagecreatefromjpeg, rufe die Script-Seite (ohne HTML) mit dem entsprechenden Image-Header im Browser auf, vielleicht bringt das mehr.

                Kommentar


                • #9
                  alo transparenzen sind nur bei PNG möglich.
                  Leider funktioniert das auch nicht... ich probiere es mal mit ImageMagic .. das soll das deutlich mehr drauf haben.. ich teste es einfach mal..

                  Kommentar


                  • #10
                    Nun gut, habe auch noch etwas experimentiert und nur mit imagefill nichts fertig bekommen, zumindest keine transparente Vorlage zur weiteren Verwendung. Problemlos lassen sich hingegen Bereiche auswählen, mit einer Farbe füllen und diese Farbe transparent schalten. Die Deckfähigkeit der gewählten Farbe wird sozusagen beeinflusst, doch die Ebenen gehen wohl nicht einzeln abzuspeichern oder ich wüsste gerade nicht wie.

                    PHP-Code:
                    <?php
                    header
                    ("Content-Type: image/png");

                    $bild "test.png";
                    $img  imagecreatefrompng($bild);

                    $trans imagecolorallocatealpha($img2550060);
                    imagefilledrectangle($img007070$trans);

                    imagepng($img);
                    imagepng($img"test_image.png");
                    imagedestroy($img);

                    // test.png (falls vorhanden) wird aufgerufen mit scriptname.php
                    ?>
                    Um ein Bild im Browser anzuzeigen und gleichzeitig zu speichern, muss es zweimal mit imagepng ausgegeben werden.

                    Kommentar


                    • #11
                      Wozu soll das alles überhaupt gut sein? Um Bilder transparent darzustellen oder einzufärben braucht man kein PHP. Das kann schon der Browser selber.

                      Kommentar


                      • #12
                        Wozu soll das alles überhaupt gut sein? Um Bilder transparent darzustellen oder einzufärben braucht man kein PHP. Das kann schon der Browser selber.
                        das steht doch am Anfang des threads wozu das ganze hier gemacht wird

                        Kommentar


                        • #13
                          Kannst du mal so ein Beispielbild zur Verfügung stellen?
                          Zuletzt geändert von h3ll; 25.04.2013, 21:06.

                          Kommentar


                          • #14
                            Also ich sage nur ImageMagic!!!!!!!

                            Damit hat es sofort funktioniert und besser als zuvor!!!! Ich bin begeistert!!!
                            Das resultat ist genau so wie mit Photoshop!! was besseres gibt es nicht!!!

                            Kommentar


                            • #15
                              hau mal den code raus falls andere auch das problem haben sollten ;-)
                              Gruß
                              Uzu

                              private Homepage

                              Kommentar

                              Lädt...
                              X