ImageCreateFromPNG - Farbverfälschung(en)

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

  • ImageCreateFromPNG - Farbverfälschung(en)

    Nachdem ich eine PNG Datei mit ImageCreateFromPNG() bearbeite und wieder ausgebe, ändern sich (ein wenig) die Farben. Für den Einsatzzweck, den ich da habe, ist das seeehr unschön .

    Original:


    Kopie:


    Nebeneinander (um den Unterschied zu sehen):


    Zum Nachvollziehen folgender (relevanter) Code (sind natürlich eigentlich ziiig Codezeilen im Skript, habe aber schon diese Zeilen als "Übeltäter" entlarven können):

    PHP-Code:
    <?php
    header 
    ("Content-type: image/png");
    $im ImageCreateFromPNG("cat-title-bg-1.png");
    ImagePNG($im);
    ?>
    Wie komme ich um den unschönen Effekt herum?!

    Gruß,
    Christian

    Aus phpinfo();

    gd

    GD Support - enabled
    GD Version - bundled (2.0 compatible)
    FreeType Support - enabled
    FreeType Linkage - with freetype
    T1Lib Support - enabled
    GIF Read Support - enabled
    JPG Support - enabled
    PNG Support - enabled
    WBMP Support - enabled

  • #2
    probier mal header() + readfile() statt image*()
    Kissolino.com

    Kommentar


    • #3
      Das Bild wird vor der Ausgabe ja noch weiter bearbeitet .

      Wie gesagt... nur ein Schnipsel...

      Muss es also irgendwie als ImageHandle bekommen...

      Gruß,
      Christian

      Kommentar


      • #4
        imagecreatetruecolor()?

        Kommentar


        • #5
          Original geschrieben von harakiri
          Wie gesagt... nur ein Schnipsel...
          tolle wurst ... wie kannst du da eine hilfreichere antwort erwarten? .... wie sieht denn der rest vom "schnipsel" aus?
          Kissolino.com

          Kommentar


          • #6
            Der Rest vom Schnipsel ist irrelevant ? Hab ich doch geschrieben, dass alles an der ImageCreateFromPNG Funktion hängt... Und wenn ich schreibe, dass da noch etliche Zeilen ins Script gehören, kannst dir doch denken, dass ich nicht einfach nur ein Bild ausgeben möchte .

            Folgendes: Habe ein Hintergrund-Bild. Dieses wird via eben dieser Funktion geladen und soll dann via ImageCopy mit diversen anderen Objekten versehen werden.

            Die Verfälschung - worum es mir hier geht - findet aber statt, in dem Moment, wo ich ImageCreateFromPNG(); nutze!

            Habe mal folgendes Script ON gestellt: (http://www.team-atm.de/download/phpsr1.php)
            PHP-Code:
            <html>
            <?php
            $im 
            ImageCreateFromPNG("cat-title-bg-1.png");
            ImagePNG($im"temp/cat-title-bg-2.png");
            ?>
            <img src="cat-title-bg-1.png" border="0" alt="0"><img src="temp/cat-title-bg-2.png" border="0" alt="0">
            </html>
            Da wird nochmal live das ganze für euch "kopiert" und verglichen...


            @Tobiaz: Kann ich mit ImageCreateTrueColor() ein vorhandenes Bild laden?! Damit erstelle ich doch nur ein komplett neues...

            Kommentar


            • #7
              Original geschrieben von harakiri
              Und wenn ich schreibe, dass da noch etliche Zeilen ins Script gehören, kannst dir doch denken, dass ich nicht einfach nur ein Bild ausgeben möchte .
              ... nee, meine glaskugel ist grad in der wäsche :P


              a) kann es sein, dass du ein 24bit png als basis hast ... könnte die farbverschiebung erklären

              plan b)
              - öffne deine ausgangs-datei mit imagecreatefrompng() und schreib sie als duplikat auf die platte
              - erzeuge nochmal deine gegenüberstellung
              -- original vs imagecreatefrompng(original)
              -- duplikat vs imagecreatefrompng(duplikat)
              ---- wenns hier keinen unterschied gibt, lass halt überall mal imagecreatefrompng() drüberlaufen und arbeite mit den dups weiter

              ... wenn du eh noch manipulationen vornimmst kannst du ohn kopie uU ein farbpalettenproblem bekommen ...
              Kissolino.com

              Kommentar


              • #8
                Done: http://www.team-atm.de/download/phpsr1.php

                Aber:

                Ich möchte jetzt nicht alle Dateien "verfälscht" nutzen (nur als Notlösung... kam mir auch schon in den Sinn). Wir streben ja alle nach Perfektion .

                Hast du sonst noch eine Idee, wie ich das Bild:

                a) Abspeichern muss

                oder

                b) sonst noch ohne Farbverlust bearbeiten kann?

                Gruß,
                Christian

                Kommentar


                • #9
                  Original geschrieben von harakiri
                  Hast du sonst noch eine Idee, wie ich das Bild:
                  a) Abspeichern muss
                  probier mal, aus dem photoshop => für web speichern => png-8
                  b) sonst noch ohne Farbverlust bearbeiten kann?
                  1. auf jpeg umsteigen ....
                  2. mit imagemagick arbeiten (fänd ich suboptimal)
                  3. hintergrund-bild nicht bearbeiten sondern andere elemente mit transparenz und css-layern drüberlegen

                  ... ansonsten bin ich ratlos.
                  Kissolino.com

                  Kommentar


                  • #10
                    a) -> schon alle Variationen probiert

                    b) 1 -> Letzte Möglichkeit... werds testen [color=red]Schlechte Qualität! [/color]
                    2 -> kommt nicht in Frage
                    3 -> Solange PNG nicht 100% Unterstützung findet: No way

                    Danke auf jeden Fall für die Ratschläge!

                    Gruß,

                    Christian
                    Zuletzt geändert von harakiri; 15.04.2004, 15:13.

                    Kommentar


                    • #11
                      Original geschrieben von harakiri
                      b) 1 -> Letzte Möglichkeit... werds testen [color=red]Schlechte Qualität! [/color]
                      ?? hast du als 3. parameter mal 100 eingesetzt ... kompression steht default-mässig auf 80, ist nicht so toll
                      Kissolino.com

                      Kommentar


                      • #12
                        ARG

                        Dafür hab ich jetzt wieder die Farbverluste...

                        Ich stell hier mal das Script rein:

                        PHP-Code:
                        <?php
                        header 
                        ("Content-type: image/JPEG");

                        // Text
                        // $cattitle = "Small Talk";

                        $ctfilename str_replace("ä","ae",$cattitle);
                        $ctfilename str_replace("ü","ue",$ctfilename);
                        $ctfilename str_replace("ö","oe",$ctfilename);
                        $ctfilename str_replace("ß","ss",$ctfilename);
                        $ctfilename str_replace("ú","u",$ctfilename);
                        $ctfilename str_replace("ù","u",$ctfilename);
                        $ctfilename str_replace("á","a",$ctfilename);
                        $ctfilename str_replace("à","a",$ctfilename);
                        $ctfilename str_replace("é","e",$ctfilename);
                        $ctfilename str_replace("è","e",$ctfilename);
                        $ctfilename str_replace("ó","o",$ctfilename);
                        $ctfilename str_replace("ò","o",$ctfilename);
                        $ctfilename str_replace("í","i",$ctfilename);
                        $ctfilename str_replace("ì","i",$ctfilename);
                        $ctfilename str_replace("@","a",$ctfilename);
                        $ctfilename str_replace("€","E",$ctfilename);
                        $ctfilename str_replace("ç","c",$ctfilename);
                        $ctfilename str_replace("©","c",$ctfilename);
                        $ctfilename str_replace("®","r",$ctfilename);
                        $ctfilename str_replace("£","L",$ctfilename);
                        $ctfilename str_replace(".","",$ctfilename);
                        $ctfilename str_replace(":","-",$ctfilename);
                        $ctfilename str_replace(" ","_",$ctfilename);
                        $ctfilename strtolower($ctfilename);

                        $cturl 'images/cat-titles/'.$ctfilename.'.jpg';

                        $im = @ImageCreateFromJPEG($cturl);

                        IF(!
                        $im) {

                            
                        // Font Datei / Größe
                            
                        $fontfile "/www/htdocs/fonvdrei/fonts/grinched.ttf";
                            
                        $fontsize "24";
                            
                            
                        $bgfile "images/cat-titles/cat-title-bg.jpg";
                            
                            
                        // Überprüfen der Textlänge/Breite
                            
                        $bbox ImageTTFBBox($fontsize0$fontfile$cattitle);
                            
                            
                        $width $bbox[2]+(0-$bbox[6]);
                            
                        $height $bbox[3]+(0-$bbox[7]);
                            
                            
                        $x 3;
                            
                        $y 35;
                            
                            
                        // Bild für Text erstellen
                            
                        $im ImageCreateTrueColor($width+4,40);
                            
                            
                        // Hintergrund laden
                            
                        $background ImageCreateFromJPEG($bgfile);
                            
                            
                        // Verschmelzen
                            
                        ImageCopy($im,$background,0,0,0,0,$width+4,40);
                            
                            
                            
                        // Hintergrund und Textfarben einstellen

                            
                        $textcolor1  ImageColorAllocate ($im2551530); // Schriftfarbe
                            
                        $textcolor2  ImageColorAllocate ($im66116182); // Konturfarbe
                            
                            // Kontur
                            
                        ImageTTFText($im$fontsize0$x-2$y+2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x-1$y+2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x$y+2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+1$y+2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+2$y+2$textcolor2$fontfile$cattitle);
                            
                            
                        ImageTTFText($im$fontsize0$x-2$y+1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x-1$y+1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x$y+1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+1$y+1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+2$y+1$textcolor2$fontfile$cattitle);
                            
                            
                        ImageTTFText($im$fontsize0$x-2$y$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x-1$y$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x$y$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+1$y$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+2$y$textcolor2$fontfile$cattitle);
                            
                            
                        ImageTTFText($im$fontsize0$x-2$y-1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x-1$y-1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x$y-1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+1$y-1$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+2$y-1$textcolor2$fontfile$cattitle);
                            
                            
                        ImageTTFText($im$fontsize0$x-2$y-2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x-1$y-2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x$y-2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+1$y-2$textcolor2$fontfile$cattitle);
                            
                        ImageTTFText($im$fontsize0$x+2$y-2$textcolor2$fontfile$cattitle);
                            
                            
                        // Schriftzug
                            
                        ImageTTFText($im$fontsize0$x$y$textcolor1$fontfile$cattitle);
                            
                            
                        // Speichern
                            
                        ImageJPEG($im$cturl100);
                            
                        }

                        // Ausgabe

                        ImageJPEG($im''100);
                        ?>

                        Kommentar


                        • #13
                          dein server oder deine gd sind besoffen ... ich kann keinen grund
                          erkennen, warum du farbfehler haben solltest ...

                          btw: str_replace() kennt auch arrays ... und die kontur würd' ich mit for-
                          schleifen lösen ... und wofür schreibst du es auf die platte, wenn du es doch danach wieder ausgibst ??
                          Kissolino.com

                          Kommentar


                          • #14
                            In der GD-Lib ab 2.0.1 probiere mal imagecreatetruecolor

                            Kommentar


                            • #15
                              Original geschrieben von Wurzel
                              dein server oder deine gd sind besoffen ... ich kann keinen grund
                              erkennen, warum du farbfehler haben solltest ...


                              Original geschrieben von Wurzel
                              btw: [color=red]*1*[/color] str_replace() kennt auch arrays ... und die kontur würd' ich mit for-
                              schleifen lösen ... [color=red]*2*[/color] und wofür schreibst du es auf die platte, wenn du es doch danach wieder ausgibst ??
                              1: I Know Der Ersetzungsalgorhythmus ist auch uralt und nur schnell aus nem alten Script von mir kopiert...

                              2: Ganz einfach: Wenn das Bild schonmal erstellt wurde, dann kommt er gar nicht in die "Erstellen+Speichern" Schleife rein, sondern ruft dieses Bild nur auf... spart im späteren Einsatz Zeit/CPU-Last uvm .

                              @Guido: Thread durchgelesen? Oder wenigstens meinen 1. Post ??

                              Gruß,
                              Christian

                              Kommentar

                              Lädt...
                              X