Fehlfarben bei Größenänderung eines JPG

C-H

Erfahrenes Mitglied
Hallo!

Ich habe eine Funktion geschrieben, die mir die Größe eines Bildes benutzerdefiniert ändert. Es funktioniert auch alles so weit ganz gut, nur ist mir jetzt aufgefallen, dass bei JPG-Bilder teilweise falsche Farben, bzw. zu wenig Farben angezeigt werden.

Und wenn ich es speichern möchte (über den Browser, Rechtsklick -> Bild speichern unter) wird als Dateityp bmp angegeben (Unbenannt.bmp). Wenn ich die Dateiendung in jpg ändere, lässt es sich auch nicht mehr öfnen (Vorschau im Explorer, Photoshop). Was läuft da schief? Hier die relevanten Teile meines Codes:

PHP:
$size = getimagesize($_GET["img"]);
 $width_org = $size[0]; 
 $height_org = $size[1];
 $imagetype = $size[2];
 
 switch ($imagetype)
 {
  case 1: // GIF
   $img_org = imagecreatefromgif($_GET["img"]);
   break;
  case 2: // JPG
   $img_org = imagecreatefromjpeg($_GET["img"]);
   break;
  case 3: // PNG
   $img_org = imagecreatefrompng($_GET["img"]);
   break;
  default:
   if($_GET["save_image"] == "true")
    echo "Unsupported image format";
   else
    create_text_image("Unsupported image format.");
 }

Zwischendrin mach ich noch ein paar Berechnungen der Größe.

PHP:
$img_new = imagecreate($width_new, $height_new); 
   imagecopyresized($img_new, $img_org, 0, 0, 0, 0, $width_new, $height_new, $width_org, $height_org);
   
   header("Cache-Control: no-store, no-cache, must-revalidate");
   header("Cache-Control: post-check=0, pre-check=0", false);
   header("Pragma: no-cache");
   header("Expires: Mon, 28 Dec 1981 01:00:00 GMT");
   header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
   
   switch ($imagetype)
   {
    case 1: // GIF
     header("Content-type: image/gif");
     if($_GET["save_image"] == "true")
     {
      imagegif($img_new, FS_DOCUMENT_ROOT."/".$_GET["destination"]."/".$_GET["fn"]);
      echo "true";
     }
     else
      imagegif($img_new);
     break;
    case 2: // JPG
     header("Content-type: image/jpeg");
     if($_GET["save_image"] == "true")
     {
      imagejpeg($img_new, FS_DOCUMENT_ROOT."/".$_GET["destination"]."/".$_GET["fn"], 100);
      echo "true";
     }
     else
      imagejpeg($img_new, "", 100);
     break;
    case 3: // PNG
     header("Content-type: image/png");
     if($_GET["save_image"] == "true")
     {
      imagepng($img_new, FS_DOCUMENT_ROOT."/".$_GET["destination"]."/".$_GET["fn"]);
      echo "true";
     }
     else
      imagepng($img_new);
     break;
    default:
     if($_GET["save_image"] == "true")
      echo "Unsupported image format";
     else
      create_text_image("Unsupported image format.");
   }

Ich hoffe jemand findet den Fehler!! Danke schonmal!
 
Beim drüberschauen habe ich gerade festgestellt, dass ich die Funktion imagecreate statt imagecreatetruecolor verwende. Damit dürfte die Frage nach den "fehlennden Farben" geklärt sein ;-) Wieso das Bild aber als "Unbenannt.bmp" gespeichert werden möchte ist mir dennoch nicht ganz klar. Den Dateitypen entsprechende Header gebe ich ja mit. Oder mache ich da was falsch?
 
Zurück