PHP imagecopyresampled funktioniert nicht

insp!re

Ensign
Registriert
Sep. 2006
Beiträge
142
imagecreatefromjpeg funktioniert nicht

Hallo,

mit einer Funktion möchte ich Bilder verkleinern, doch das funktioniert aus irgendeinem Grund nicht - doch den Fehler finde ich leider nicht.

Die Funktion sieht so aus:

PHP:
function to_thumbnail($bild)
{ 
	$file = getimagesize($bild); 
	if($file[2] == 1) 
	{
		$altesBild = ImageCreateFromGIF($bild); 
	}
	elseif($file[2] == 2) 
	{
		$altesBild = ImageCreateFromJPEG($bild); 
	}
	
	$breite = $file[0]; 
	$hoehe = $file[1]; 
	$neueBreite1 = 800; 
	$neueHoehe1 = intval($hoehe * $neueBreite1 / $breite); 
	
	if($breite > $neueBreite1)
	{
		if($file[2] == 1) 
		{ 
			# GIF 
			chmod("bildergalerie/".$_POST["id"]."/", 0777);
			$neuesBild = imagecreatetruecolor($neueBreite1, $neueHoehe1); 
			imagecopyresampled($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite1, $neueHoehe1, $breite, $hoehe); 
			ImageGIF($neuesBild, "bildergalerie/".$_POST["id"]."/".urlencode($_FILES['File'.$i]['name']));
		} 
		
		if($file[2] == 2) 
		{ 
			# JPG
			chmod("bildergalerie/".$_POST["id"]."/", 0777);
			$neuesBild = imagecreatetruecolor($neueBreite1, $neueHoehe1); 
			imagecopyresampled($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite1, $neueHoehe1, $breite, $hoehe); 
			ImageJPEG($neuesBild, "bildergalerie/".$_POST["id"]."/".urlencode($_FILES['File'.$i]['name']));
		} 
	} else
	{
		if($file[2] == 1) 
		{ 
			# GIF 
			chmod("bildergalerie/".$_POST["id"]."/", 0777);
			$neuesBild = imagecreatetruecolor($neueBreite1, $neueHoehe1); 
			imagecopyresampled($neuesBild, $altesBild, 0, 0, 0, 0, $breite, $hoehe, $breite, $hoehe); 
			ImageGIF($neuesBild, "bildergalerie/".$_POST["id"]."/".urlencode($_FILES['File'.$i]['name']));
		} 
		
		if($file[2] == 2) 
		{ 
			# JPG
			chmod("bildergalerie/".$_POST["id"]."/", 0777);
			$neuesBild = imagecreatetruecolor($neueBreite1, $neueHoehe1); 
			imagecopyresampled($neuesBild, $altesBild, 0, 0, 0, 0, $breite, $hoehe, $breite, $hoehe); 
			ImageJPEG($neuesBild, "bildergalerie/".$_POST["id"]."/".urlencode($_FILES['File'.$i]['name']));
		} 
	}
}


Die Anweisungen innerhalb von if($breite > $neueBreite1) funktionieren nicht, es wird kein Bild gespeichert. Eine Fehlermeldung bekomme ich auch nicht - es passiert einfach nichts weiter. In dem else-Teil funktioniert jedoch alles.

Ich vermute somit, das Problem liegt an imagecopyresampled - doch laut php.net stimmen alle Parameter...


Könnt ihr mir helfen?

Gruß
Martin
 
Zuletzt bearbeitet:
GIF wird in den neueren Versionen der GD-Bibliothek nicht mehr unterstützt, evt. liegt's daran
 
Sry, mit Gifs habe ich es gar nicht ausprobiert - nur mit JPGs...
 
ich erinnere mich dunkel, das ich komischerweise probleme hatte, wenn ich
bei imagejpeg ( resource $im [, string $filename [, int $quality ]] ) den filename innerhalb der function definiert hatte.

sprich
imagejpeg($bild, "../pics/{$bildname}i.jpg", 80); oder so ähnlich
ging nicht,

aber
$name="../pics/{$bildname}i.jpg";
imagejpeg($bild, "$name", 80);
ging
 
Hallo Lutz,
danke für die Idee, doch es hat nichts gebracht.

Ich habe eben rausgefunden, dass das Problem auch auftritt, wenn ich mehrere kleine Dateien hochladen will. Die Dateinamen werden mit $_FILES['File'.$i]['name'] übergeben.
Wie gesagt, es passiert nichts: kein Dateiupload - keine Fehlermeldung

:/
 
Hi,

du solltest wenigstens die Fehlermeldung bekommen, dass es diese Funktion nicht gibt - PHP ist case-sensitive und die Funktion heisst imagejpeg().

MfG, Christian.
 
Die Fehlermeldung erschien nicht - und auch mit Korrektur geht es nicht, sry :/
 
wie weit kommt das script denn?
lass dir doch in den if{}-bereichen die variablen einfach mal ausgeben.
ich seh' oftmals den wald vor lauter bäumen nicht, das hilft mir dann aber immer.
 
Guter Tipp, das hätte ich ja mal machen können^^

Erstmal habe ich oben das "ImageCreateFromGIF" zu "imagecreatefromjpeg" gemacht.

Bei großen Bildern bleibt die Funktion schon bei "$altesBild = imagecreatefromjpeg($bild);" hängen. Doch wieso?
 
Zuletzt bearbeitet:
hast Du MAX_FILE_SIZE im formular definiert, passt die angabe zu den php-server-einstellungen?
 
Wie meinst du das? Ich habe am Ende der .htaccess-Datei die Zeilen eingefügt:


php_value upload_max_filesize 8M
php_value post_max_size 16M

Doch dann spuckt der Server einen Fehler 500 aus.
 
Dann lass dir mal die phpinfo(); ausgeben, und gucke nach was das Limit ist, vielleicht liegt das Limit ja auch nur bei 2M und du willst Daten hochladen die größer sind als 2M?

test.inc.php
<?PHP
phpinfo();
?>
 
insp!re schrieb:
Hallo Lutz,
danke für die Idee, doch es hat nichts gebracht.

Ich habe eben rausgefunden, dass das Problem auch auftritt, wenn ich mehrere kleine Dateien hochladen will. Die Dateinamen werden mit $_FILES['File'.$i]['name'] übergeben.
Wie gesagt, es passiert nichts: kein Dateiupload - keine Fehlermeldung

:/

ich denke der fehler liegt woanders .. ich weis ja nicht wie du mehrere Files an die Funktion übergibst, jedoch so wie oben mit $_FILES['File'.$i]['name'] wird das nichts werden. benenne mal die input-felder um und zwar etwa so :
Code:
<input type="file" name="file[]" />

und nicht name="File1" etc. du erhälst dann ein Array mit den Dateinamen und Angaben zu den hochgeladenen Bildern. die musst du dann natürlich einzeln über eine for() schleife an die Funktion oben übergeben. die Variablen musst dann z.b. so übergeben:

Code:
$bildname = $_FILES['file'][name'][$i];

.. dann sollte es auch klappen ...
 
Zurück
Oben