Moin!
Truecolor vs. indexed Colors ist meiner Ansicht nach die Hauptursache fuer die schlechte Qualitaet, da hilft das Ersetzen von imagecopyresampled nicht sehr. Troztdem vielen Dank fuer Deine Antwort.
Natürlich hast du ein Problem mit Bildern, die wirklich 16 Millionen Farben einsetzen. Allerdings läßt sich der Farbauswahlprozeß doch erheblich optimieren, würde ich meinen. Die gdlib wählt nach meinem Eindruck nämlich einfach die ersten 256 Farben, die in dem Bild vorkommen, aus. Und das sind mit Pech die unwichtigsten Farben - und du kriegst tolle Falschfarbendarstellung.
Hast du mal getestet, was passiert, wenn du das eingelesene JPG direkt wieder ausgibst? Sind dann die Farben extrascheiße, oder nur normalscheiße (wegen 256 Farben vs. Truecolor)? Dann würde vielleicht imagepalettecopy() helfen, wenn sie nur "normalscheiße" sind. Damit kriegst du die durch das JPEG-Laden ausgewählten 256 Farben 1:1 in das Zielbild übertragen. Und die werden dann dort zum kleinskalieren herangezogen, und nicht neu ausgedacht.
Alternativ kannst du dir natürlich eine Skalierungsfunktion komplett selber schreiben bzw. eine aus dem Fundus an Funktionen ziehen, die in den Kommentaren von imagecopyresized() drinstehen. Wie gesagt: Die ungünstige Farbwahl ist mit Sicherheit Schuld, aber das ist ein gemeinsames Problem von imagecreate(), der Palette und imagecopyresized(), welches man auf jeden Fall nachbessern kann.
- Sven Rautenberg