ImageCopyResize erzeugt gelegentlich schwarzes Bild
Jens Büttner
- php
Tag beisammen,
ich habe folgendes Problem: Ich habe eine Funktion geschrieben, die mir aus einem Bild ein verkleinertes JPG schreibt, das funktionierte auch eigentlich ganz gut. Nur tauchen jetzt auf einmal gelegentlich Bilder auf, mit denen es nicht klappt. Dann wird nur ein schwarzes JPG geschrieben. Zwar in der korrekten Größe, was aber wenig hilfreich ist. Kann mir nicht erklären, woran das liegen soll. Es sind alles RGB-JPGs. Habe mich schon durch einige Foren gelesen, daraufhin, imagecopyresize durch -resampled ersetzt, die Bildgröße verändert, mit Photoshop neu abgespeichert. Nichts brachte was ... Also wenn jemand eine Idee hat, wäre ich sehr dankbar.
Hier die Funktion
function imageresize2jpg ($input_file, $output_file, $neue_breite, $quality)
{
if (!extension_loaded('gd'))
{die ("Die notwendige GD-Bibliothek ist nicht installiert!");}
if (!file_exists($input_file))
{die ("Die angegeben Input-Datei existiert nicht!");}
if ($quality>100 || $quality<10 || !is_integer($quality))
{die ("Geben Sie für die Qualität einen Wert zwischen 10 und 100 an.");}
if (!is_integer($neue_breite))
{die ("Geben Sie für die neue Breite eine Ganzzahl an.");}
if (strtolower(substr($output_file,-4))!=".jpg" && strtolower(substr($output_file,-5))!=".jpeg")
{die ("Geben Sie eine Output-Datei mit jpg-Endung an.");}
$bildgroesse=getimagesize($input_file);
$breite=$bildgroesse[0];
$hoehe=$bildgroesse[1];
if ($breite>$neue_breite)
{
$neue_hoehe=intval($hoehe*$neue_breite/$breite);
if($bildgroesse[2]==1) // GIF
{
$altes_bild=ImageCreateFromGIF($input_file);
$neues_bild=ImageCreateTruecolor($neue_breite,$neue_hoehe);
ImageCopyResized($neues_bild,$altes_bild,0,0,0,0,$neue_breite,$neue_hoehe,$breite,$hoehe);
ImageJPEG($neues_bild,$output_file,$quality);
}
if($bildgroesse[2]==2) // JPG
{
$altes_bild=ImageCreateFromJPEG($input_file);
$neues_bild=ImageCreateTruecolor($neue_breite,$neue_hoehe);
ImageCopyResized($neues_bild,$altes_bild,0,0,0,0,$neue_breite,$neue_hoehe,$breite,$hoehe);
ImageJPEG($neues_bild,$output_file,$quality);
}
if($bildgroesse[2]==3)// PNG
{
$altes_bild=ImageCreateFromPNG($input_file);
$neues_bild=ImageCreateTruecolor($neue_breite,$neue_hoehe);
ImageCopyResized($neues_bild,$altes_bild,0,0,0,0,$neue_breite,$neue_hoehe,$breite,$hoehe);
ImageJPEG($neues_bild,$output_file,$quality);
}
}
else
{
@copy($input_file,$output_file);
}
}
Nachdem ich das Foto jetzt mal um die Hälfte verkleinert habe und es mit ImageReady "fürs Web" abgespeichert habe funktioniert es, aber das kann ja nicht der Sinn der Sache sein. Wenn also jemand den Grund für dieses Verhalten in der Funktion fände, wäre ich sehr dankbar.