Spike Tarul: Thumbnail erzeugen

Ich hab da ein kleines Problem :

Wenn ich über "imagecopyresized" versuche eine Grafikdatei im jpeg-Format in der Größe zu verändern und damit eine neue zu erzeugen, bekomme ich zwar die Grafik geändert wiedergegeben, nur haben sich die Farben total verändert.

Um das Ganze vielleicht etwas deutlicher zu machen, hier der Quelltext:

-----------------------------------------------------
// Orginalbild
$bild="einBild.jpg";
// Bilddaten feststellen
$size=getimagesize("$bild");
$breite=$size[0];
$hoehe=$size[1];
$neueBreite=120;
$neueHoehe=intval($hoehe*$neueBreite/$breite);

$altesBild=ImageCreateFromJPEG("$bild");
$neuesBild=ImageCreate($neueBreite,$neueHoehe);
ImageCopyResized($neuesBild,$altesBild,0,0,0,0,
$neueBreite,$neueHoehe,$breite,$hoehe);
ImageJPEG($neuesBild,"TN"."$bild");
---------------------------------------------------------

Die erzeugte Thumbnail-Grafikdatei "TNeinBild.jpg" hat zwar jetzt die Größe wie ich Sie haben möchte, nur sind die Farben verfälscht.
Fast so als wenn es eine Gif-Grafik wäre.

Kann mir jemand helfen ?

  1. hi,
    also ich habe noch nicht wirklich erfahrungen mit der gd, aber das was ich benutzt habe funzt zumindest. hier mein quelltext (weiß nicht, ob der dir weiterhelfen kann..)

    $RootPicPath = "cms_img/".$daten[bil_name];
    $newName = "cms_img/thumbnails/thumb_".$daten[bil_name];

    // WENN BILD ÜBERHAUPT EXISTIERT
    if(file_exists($RootPicPath))
    {
     $oldSize=getimagesize($RootPicPath);
     $width=$oldSize[0];
     $height=$oldSize[1];
     $newWidth = 100;
     $newHeight=intval($height*$newWidth/$width);
     $oldImage=ImageCreateFromJPEG($RootPicPath);
     $newImage=ImageCreate($newWidth,$newHeight);
     ImageCopyResized($newImage,$oldImage,0,0,0,0,$newWidth,$newHeight,$width,$height);
     ImageJPEG($newImage,$newName);
    }

    1. nimm meinen ;-) der is mit imagecopyresampled

      $src_img = imagecreatefromjpeg ($dir.$filename);
          if ($src_img != "")
          {
           //Größe des Originalbildes bestimmen
          $imageinfo = getimagesize($dir.$filename);
          if($imageinfo[0]==$imageinfo[1])
          {
              $new_w = $x;
              $new_h = $x;
          }
          elseif($imageinfo[0]>$imageinfo[1])
          {
              $new_w = $x;
              $ratio = $imageinfo[0]/$x;
              $new_h = $imageinfo[1]/$ratio;
          }
          elseif($imageinfo[0]<$imageinfo[1])
          {
              $new_h = $x;
              $ratio = $imageinfo[1]/$x;
              $new_w = $imageinfo[0]/$ratio;
          }

      $dst_img = imagecreatetruecolor($new_w,$new_h);
           imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_w,$new_h, imagesx($src_img), imagesy($src_img));
           imagejpeg ( $dst_img , $dir . "thumb/thumb_".$filename);
           imagedestroy($src_img);
           imagedestroy($dst_img);

      1. Danke für die schnellen Antworten, nur leider haben sie mich nicht weitergebracht. Die Farben der erzeugten Grafik sind immer noch verfälscht.

        Und ich weiss jetzt auch warum : Durch die Funktion "imagecolorstotal" habe ich rausbekommen, dass die erzeugte Grafik immer nur 256 Farben hat, obwohl es eine JPEG-Datei ist.

        Muss man für dieses Problem vielleicht etwas in der php.ini verändern ?

        1. hi,
          probiers mal mit imageCreateTrueColor anstatt von imageCreate..
          hab gehört das funzt..

          mfg
          comunicout