image erstellen - komprimierung zu hoch?
Roger
- php
moin!
ich schreibe in eine jpeg-grafik ein wort hinein, mit folgendem code:
$termine = imagecreatefromjpeg($termine_src);
$color1 = ImageColorAllocate($termine,0,0,0);
ImageTTFText($termine, $size, $degree, 3, 35, $color1, $font, $termine_text[0]);
imagejpeg($termine, $termine_dest);
die grafik ist fast einfarbig (mit einigen schatten), deswegen jpeg. die dateigröße vorher ist 2kb.
nach der "beschriftung" ist die datei auch noch knapp 2kb groß aber um die schrift sind sehr deutlich die häßlichen jpeg-artefakte zu sehen. wie kommen die da hin?
die originaldatei ist mit 100% abgespeichert worden (also keine/wenig kompression). die größe der datei ist zunächst zweitrangig. wie bekomme ich die artefakte weg (außer png zu nehmen, da kommt die größe wieder mit ins spiel - die datei wird dann 18kb groß)?
gruß.
roger.
Hi
Ich vermute dass das Bild nicht Truecolor ist:
$termine = imagecreatetruecolor($height, $width);
gruss nimble
moin!
Ich vermute dass das Bild nicht Truecolor ist:
welches bild? das originale? doch. außerdem wird ja kein neues erzeugt. aber ich hab das mal gemacht. ich hab das bild (b1) genommen, ein neues erzeugt (b2) und b1 in b2 kopiert. erfolglos. das ergebnis ist das gleiche.
gruß.
roger.
moin!
Ich vermute dass das Bild nicht Truecolor ist:
welches bild? das originale? doch. außerdem wird ja kein neues erzeugt. aber ich hab das mal gemacht. ich hab das bild (b1) genommen, ein neues erzeugt (b2) und b1 in b2 kopiert. erfolglos. das ergebnis ist das gleiche.
Das einzige was mir jetzt noch einfällt ist die Qualitätsangabe des Befehls, vieleicht kannst du damit was erreiche:
int imagejpeg ( resource im [, string filename [, int quality]] )
Oder wie schon gesagt wurde mit PNG versuchen, JPG ist für das Bild wohl wirklich nicht die richtige Lösung, obwohl sich PNG mit dem Verlauf auchschwer tun könnte...
------------------------------
lieber ein Pinguin der läuft
als ein Fenster das hängt
------------------------------
moin!
ich hab jetzt erst mal png genommen:
http://michelshoehe.de/right_termine.jpg
ist zwar 10kb groß, aber dafür ohne artefakte...
gruß.
roger.
moin!
sorry,
http://michelshoehe.de/right_termine.png
gruß.
roger.
Hey,
ich schreibe in eine jpeg-grafik ein wort hinein [...]
die grafik ist fast einfarbig (mit einigen schatten), deswegen jpeg.
JPEG ist für Fotos. Wenn's fast einfarbig ist und scharfe Kontraste hat, ist das Format definitiv die falsche Wahl. Kein Wunder, dass du dann sichtlich störende Artefakte hast.
Gib mir mal das Bild (verlustfrei), ich will damit experimentieren. Wenn's in JPEG mit geringer Kompression nur 2 KB hat und in PNG neun mal so viel, dann machst du was verkehrt.
moin!
hm, ok:
orginal:
http://michelshoehe.de/tmpl_right_termine.jpg
fertig:
http://michelshoehe.de/right_termine.jpg
gruß.
roger.
moin!
Gib mir mal das Bild (verlustfrei), ich will damit experimentieren. Wenn's in JPEG mit geringer Kompression nur 2 KB hat und in PNG neun mal so viel, dann machst du was verkehrt.
hast du schon experimentiert? würde mich über eine antwort freuen...
gruß.
roger.
Großartig. Ich hab Freitag eine Antwort geschrieben und bin ins Wochenende aufgebrochen, aber sie ist nicht hier. Der Teufel soll mich holen, wenn ich nochmal auf Vorschau statt Absenden drücke. *grr* Sorry. Also noch mal:
Die Dateien von dir:
Vorlage 6223 B http://michelshoehe.de/tmpl_right_termine.jpg
fertig als JPEG 2634 B http://michelshoehe.de/right_termine.jpg
fertig als PNG 10170 B http://michelshoehe.de/right_termine.png
Deine Software hat dich bezüglich der Qualität des JPEG gehörig verkackeiert. Ich muss right_termine.png mit Qualität 25(!) abspeichern, damit ich auf die ähnliche Größe von 2682 B komme. (Weitere Parameter sind: ohne EXIF, nicht-progressiv, Chromasubsampling egal - hat unerheblichen Einfluss auf die Größe.) Selbstverständlich gibt's dann dicke Artefakte, die Qualität ist einfach zu schlecht.
Analyse von right_termine.png
IHDR 13 critical PNG image header: 109x109, 8 bits/pixel, paletted, noninterlaced
PLTE 768 critical palette, 256 entries
IDAT 8192 critical PNG image data
IDAT 1129 critical PNG image data
IEND 0 critical end-of-image data
Die Software macht keine gravierenden Fehler: die Datei enthält keine unnützen Chunks, die Kompression ist stark und Interlacing wird nicht benutzt. Deswegen schaffe ich es auch nur, sie um 5% zu verkleinern, indem ich doppelte Paletteneinträge entferne, die Paletteneintragsreihenfolge verbessere und alle IDAT-Chunks zusammenfasse.
http://img138.imageshack.us/img138/5876/righttermineoptimiertwb8.png
IHDR 13 critical PNG image header: 109x109, 8 bits/pixel, paletted, noninterlaced
PLTE 759 critical palette, 256 entries
IDAT 8827 critical PNG image data
IEND 0 critical end-of-image data
Was du machen musst, ist die Farbtiefe abzusenken. Das ist zwar auch eine verlustbehaftete Operation, aber die dadurch erzeugten Farbbänder sind für das Auge weitaus unstörender als Klötzer. Die Klötzer nimmt man immer wahr, die Farbbänder meist nur im Vergleich mit dem Original im hoher Farbtiefe. Hier sieht man davon ein wenig in der dunklen Zone oben links.
http://img138.imageshack.us/img138/5193/righttermine4bitop5.png
IHDR 13 critical PNG image header: 109x109, 4 bits/pixel, paletted, noninterlaced
PLTE 45 critical palette, 15 entries
IDAT 3138 critical PNG image data
IEND 0 critical end-of-image data
Mit nur 4 Bit ist das Bild nur noch halb so groß wie die Vorlage. Sicherlich kann man noch ein bisschen mehr herausholen, aber das Ausgangsmaterial ist JPEG und wirkt leider nachteilig auf die PNG-Optimierung.