Zuviele Farben für gd?

sYnopsis

Grünschnabel
Ich verkleinere so zu große Bilder:

PHP:
// Bild verkleinern wenn nötig
        $temp_new_name = "./files/temp/user_bilder/".$_SESSION['tmpuserid'].".jpg";
        $size = GetImageSize($temp_new_name);

        if(eregi("(jpg|jpeg)$",$temp_name) && $size['0'] > 413 || $size['1'] > 413)
		{
			$qual = 100;
			$imga = imagecreatefromjpeg($temp_new_name);
			if($size[0] > $size[1])
			{
				$width = 413;
				$new_height = $size[0]/$width;
				$height = $size[1]/$new_height;
				$height = round($height , 0);
			}
			elseif ($size[0] == $size[1])
			{
				$width = 413;
				$height = 413;
			}
			else
   			{
				$height = 413;
				$new_width = $size[1]/$height;
				$width = $size[0]/$new_width;
				$width = round($width , 0);
			}
			$imgb = imagecreatetruecolor($width,$height);
			imagecopyresized($imgb, $imga, 0,0, 0,0, $width,$height,$size[0],$size[1]);
			imagejpeg($imgb,$temp_new_name,$qual);
		}
		else
		{
		}

Jetzt gibt es ein problem, wenn ich große Bilder (1021x768) mit vielen farben habe erstellt mir php nur ein schwarzes Bild. Bei großen Bildern mit z.B. nur 4 Fabren ist es kein Problem.

Gibt es da eine Grenze und wenn ja wie hoch ist die?
 
Hm, wüsste nicht, dass es da eine Beschränkung gibt.

Allerdings hast du wohl einen logischen Fehler in deinem Script:
PHP:
if(eregi("(jpg|jpeg)$",$temp_name) && $size['0'] > 413 || $size['1'] > 413)
Müsste wohl eher so heißen:
PHP:
if(eregi("(jpg|jpeg)$",$temp_name) && ($size['0'] > 413 || $size['1'] > 413))
&& bindet nämlich stärker als ||.

Außerdem wäre es besser, den Bildtyp (JPEG) nicht über eregi, sondern über die Informationen, die [phpf]getimagesize[/phpf] zurückgibt, zu ermitteln.

Ansonsten wäre es nicht schlecht, wenn du mal ein Beispielbild angeben würdest, bei dem dein Script nicht klappt, damit wir es besser nachvollziehen können.
 
ah, des mit denn && (||) kenn ich eigentlich, habs vergessen :(

ich hab die Dateiendungsprüfung jetzt mal weg gemacht und siehe da:

is not a valid JPEG file in ... und zwar in dieser Zeile:
PHP:
$imga = imagecreatefromjpeg($temp_new_name);

Des Bild ist das hier (http://8ung.at/cw_mirror/2.jpg) mit anderen Bildern geht es.
 
Das liegt dann wohl daran, dass dein Bild einen formalen Fehler enthält. Man kann es zwar anzeigen lassen, aber GD verweigert seine Dienste. Mein PHP-Parser spuckt folgendes aus, wenn ich deine Datei per [phpf]imagecreatefromjpeg[/phpf] einlesen will:
Code:
Corrupt JPEG data: 2 extraneous bytes before marker 0xdb
Wenn ich die Datei allerdings z.B. in Photoshop öffne und neu als JPEG speichere, klappt alles wie erwartet...
 
Zurück