molily: Thumbs ohne Cache

Beitrag lesen

Hallo, Dennis.

Ich würde jetzt noch gerne die Qualität der Bilder einstellen - geht das mit dem Script? Kann man diese Funktion noch hinzufügen?

Als Parameter erwartet das Script die Höhe (GET-Parameter 'x'), die Breite ('y') und/oder optional 'aspectratio. Wenn aspectratio den Wert 1 hat (Standard) und x und y gesetzt sind , wird je nach den Ausmaßen des Bildes die kürzere Seite (IIRC) anhand des jeweils anderen Parameters gemäß dem Seitenverhältnis des Originalbildes berechnet und der übergebene x- bzw. y-Wert ignoriert. Wenn aspectratio den Wert 0 (null) trägt, werden die übergebenen Parameter nicht gegen das Seitenverhältnis geprüft und das Bild wird ggf. unverhältnismäßig vergrößert oder gestaucht.

Angenommen bildname.jpg hat die Ausmaße 640x480:
  thumbnail.php?image=bildname.jpg&x=320&y=320 (&aspectratio=1)
würde ein Bild 320x200 produzieren, da das Seitenverhältnis berücksichtigt würde.
  thumbnail.php?image=bildname.jpg&x=320&y=320&aspectratio=0
würde ein Bild mit den angegebenen Ausmaßen 320x320 liefern.

Aber das meintest du wohl gar nicht mit Qualität... :)

Momentan verwendet das Script die Funktion imagecopyresized() http://de.php.net/manual/de/function.imagecopyresized.php zum skalieren, d.h. es ist wahrscheinlich eine Pixelskalierung ohne Interpolation und "Smoothing" oder wie immer man das nennt. Ich kenne mich mit der GD-Library nicht sonderlich aus, aber ich habe letztens ein wenig gestöbert, da ich ähnliches vorhatte. Eventuell kannst du imagecopyresized() durch imagecopyresampled() http://de.php.net/manual/de/function.imagecopyresampled.php ersetzen bzw. das Script dementsprechend abändern. Wie es aussieht ist das die bessere Funktion dafür: "imagecopyresampled() copies a rectangular portion of one image to another image, smoothly interpolating pixel values so that, in particular, reducing the size of an image still retains a great deal of clarity." Sicherlich dauert diese Art des Resamplen aber enorm länger als bei der Verwendung von imagecopyresized().

In bin momentan ein bisschen verwirrt, weil das Script (die imagecopy*-Funktion, das Script macht alles richtig AFAIK) bei bestimmten Bildern nur ein schwarzes oder blaues Bild liefert, oder völlig verzerrte Farben.

Mathias
P.S. Wenn jemand mitliest, der öfter mit der GD-Bibliothek arbeitet und sich mehr als ich auskennt, soll dieser Jemand bitte einmal kommentieren, wieso die genannten Fehler auftreten.