Steffen: Thumbnails erstellen

ich möchte über php automatisch thumbnails erzeugen lassen - allerdings bin ich mit der qualität nicht zufrieden.
ich habe schon imagemagick ausprobiert, nur das läuft auf meinem testserver nicht (wahrscheinlich, weil ich keinen x-server hab, weshalb es auch auf dem internet server nicht laufen dürfte).
bei meinem provider (hosteurope) ist nur gd 1.6 verfügbar.
wer hätte da eine lösung für mich (ich kann ja die programme über kommandozeile aufrufen (sollte aber nicht ewig viel speicherplatz verschlingen ;-))

mfg, steffen

  1. Holladiri

    ich möchte über php automatisch thumbnails erzeugen lassen - allerdings bin ich mit der qualität nicht zufrieden.

    In den Benutzerkommentaren zu imagecopyresized() http://www.php.net/manual/en/function.imagecopyresized.php findest Du eine Funktion für bikubische Grössenänderung:

    ------------------------------------------------
    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 (updated 4/21/02) -- original code
    (in C, for the PHP GD Module) by jernberg@fairytale.se
    */
    {
     $palsize = ImageColorsTotal ($src_img);
     for ($i = 0; $i < $palsize; $i++) {  // get palette.
      $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 = (int) ($scaleX / 2);
     $scaleY2 = (int) ($scaleY / 2);

    for ($j = $src_y; $j < $dst_h; $j++) {
      $sY = (int) ($j * $scaleY);
      $y13 = $sY + $scaleY2;

    for ($i = $src_x; $i < $dst_w; $i++) {
       $sX = (int) ($i * $scaleX);
       $x34 = $sX + $scaleX2;

    $color1 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, $sX,
    $y13));
       $color2 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, $sX,
    $sY));
       $color3 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, $x34,
    $y13));
       $color4 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, $x34,
    $sY));

    $red = ($color1['red'] + $color2['red'] + $color3['red'] +
    $color4['red']) / 4;
       $green = ($color1['green'] + $color2['green'] + $color3['green'] +
    $color4['green']) / 4;
       $blue = ($color1['blue'] + $color2['blue'] + $color3['blue'] +
    $color4['blue']) / 4;

    ImageSetPixel ($dst_img, $i + $dst_x - $src_x, $j + $dst_y - $src_y,
    ImageColorClosest ($dst_img, $red, $green, $blue));
      }
     }
    }
    ------------------------------------------------

    Ciao,

    Harry