Tag !
Ich bin allerdings mit dem Ergebnis nicht zufrieden.
Verständlich :-) Das was diese Funktion produziert kannste auch grob in der Pfeife rauchen.
Die Bilder werden offenbar ranzig konvertiert. Die eingestellte
Ich habe die Größenangaben für die Bilder versuchsweise herausgenommen, um zu testen ob es an den Größenangaben liegt... leider Fehlanzeige.
Nein, das ist die Funktion, die die Thumbnails erzeugt, die ist einfach miserabel.
Schau Dir mal unter http://www.php.net/manual/en/function.imagecopyresized.php die Kommentare an, da steht relativ ein Kommentar von rze@counter-strike.net, der dort eine Funktion vorstellt, die wesentlich bessere Ergebnisse produziert, dafür aber ziemlich langsam ist.
Wenn Du Dir Dein PHP/GD selber kompilierst schlage ich Dir den ebenfalls in den Kommentaren erwähnten Weg von aleczapka@gmx.net vor, nämlich eine extra Funktion im Quellcode einzufügen und die dann mit rein zu kompilieren.
Weiss irgend jemand Rat oder ist die Konvertierfunktion in der GD Bibliothek so schlecht ?
Die PHP-Funktion für bikubische Filterung (von rze@counter-strike.net):
------------------------------
function ImageCopyResampleBicubic ($dst_img, $src_img, $dst_x, $dst_y,
$src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
/*
port to PHP by John Jensen July 10 2001 -- original code (in C, for the
PHP GD Module) by jernberg@fairytale.se
*/
{
for ($i = 0; $i < 256; $i++) { // get pallete. Is this algoritm
correct?
$colors = ImageColorsForIndex ($src_img, $i);
ImageColorAllocate ($dst_img, $colors['red'], $colors['green'],
$colors['blue']);
}
$scaleX = ($src_w - 1) / $dst_w;
$scaleY = ($src_h - 1) / $dst_h;
$scaleX2 = $scaleX / 2.0;
$scaleY2 = $scaleY / 2.0;
for ($j = $src_y; $j < $dst_h; $j++) {
$sY = $j * $scaleY;
for ($i = $src_x; $i < $dst_w; $i++) {
$sX = $i * $scaleX;
$c1 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX,
(int) $sY + $scaleY2));
$c2 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX,
(int) $sY));
$c3 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX
- $scaleX2, (int) $sY + $scaleY2));
$c4 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX - $scaleX2, (int) $sY));
$red = (int) (($c1['red'] + $c2['red'] + $c3['red'] + $c4['red']) /
4);
$green = (int) (($c1['green'] + $c2['green'] + $c3['green'] +
$c4['green']) / 4);
$blue = (int) (($c1['blue'] + $c2['blue'] + $c3['blue'] + $c4['blue'])
/ 4);
$color = ImageColorClosest ($dst_img, $red, $green, $blue);
ImageSetPixel ($dst_img, $i + $dst_x, $j + $dst_y, $color);
}
}
}
-------------------------------------
Ciao,
Harry