| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

15-04-2004, 05:27
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
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
Zitat:
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
|
__________________
|

15-04-2004, 09:42
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
probier mal header() + readfile() statt image*()
__________________
-
|

15-04-2004, 14:28
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
Das Bild wird vor der Ausgabe ja noch weiter bearbeitet  .
Wie gesagt... nur ein Schnipsel...
Muss es also irgendwie als ImageHandle bekommen...
Gruß,
Christian
__________________
|

15-04-2004, 14:51
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.077
|
|
imagecreatetruecolor()?
|

15-04-2004, 14:52
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
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?
__________________
-
|

15-04-2004, 15:04
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
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...
__________________
|

15-04-2004, 15:22
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
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 ...
__________________
-
|

15-04-2004, 15:36
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
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
__________________
|

15-04-2004, 15:57
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
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
Zitat:
|
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.
__________________
-
|

15-04-2004, 16:07
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
a) -> schon alle Variationen probiert
b) 1 -> Letzte Möglichkeit... werds testen Schlechte Qualität! 
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
__________________
Geändert von harakiri (15-04-2004 um 16:13 Uhr)
|

15-04-2004, 16:18
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von harakiri
b) 1 -> Letzte Möglichkeit... werds testen Schlechte Qualität! 
|
?? hast du als 3. parameter mal 100 eingesetzt ... kompression steht default-mässig auf 80, ist nicht so toll
__________________
-
|

15-04-2004, 16:30
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
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($fontsize, 0, $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 ($im, 255, 153, 0); // Schriftfarbe
$textcolor2 = ImageColorAllocate ($im, 66, 116, 182); // Konturfarbe
// Kontur
ImageTTFText($im, $fontsize, 0, $x-2, $y+2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-1, $y+2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x, $y+2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+1, $y+2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+2, $y+2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-2, $y+1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-1, $y+1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x, $y+1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+1, $y+1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+2, $y+1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-2, $y, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-1, $y, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x, $y, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+1, $y, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+2, $y, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-2, $y-1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-1, $y-1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x, $y-1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+1, $y-1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+2, $y-1, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-2, $y-2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x-1, $y-2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x, $y-2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+1, $y-2, $textcolor2, $fontfile, $cattitle);
ImageTTFText($im, $fontsize, 0, $x+2, $y-2, $textcolor2, $fontfile, $cattitle);
// Schriftzug
ImageTTFText($im, $fontsize, 0, $x, $y, $textcolor1, $fontfile, $cattitle);
// Speichern
ImageJPEG($im, $cturl, 100);
}
// Ausgabe
ImageJPEG($im, '', 100);
?>
__________________
|

15-04-2004, 16:43
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
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 ??
__________________
-
|

15-04-2004, 16:54
|
|
Guido
Member
|
|
Registriert seit: Jan 2001
Beiträge: 324
|
|
In der GD-Lib ab 2.0.1 probiere mal imagecreatetruecolor
|

16-04-2004, 00:00
|
|
harakiri
Member
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 261
|
|
Zitat:
Original geschrieben von Wurzel
dein server oder deine gd sind besoffen ... ich kann keinen grund
erkennen, warum du farbfehler haben solltest ...
|
Zitat:
Original geschrieben von Wurzel
btw: *1* str_replace() kennt auch arrays ... und die kontur würd' ich mit for-
schleifen lösen ... *2* 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
__________________
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|