Ausgangsgrafik zu groß, nurnoch schwarze Bilder?

Andreas Späth

Erfahrenes Mitglied
Hallo,

da ich nun überlegt habe bestimme Grafiken von PHP direkt auf dem zu "zerschneiden" lassen hab ich natürlich auch gleich versucht da ein Script zusammenzuwursten.

Hier erstmal der betreffende Teil des Scripts.
PHP:
<?
//Die Variablen sind nur für die Testvs, später wird das ja alles schön dynamisch
$ziel_x="0";
$ziel_y="0";
$original_x="700";
$original_y="700";
$original_w="100";
$original_h="100";
$ziel_name="bild";
 
//eine 5100x4100px große Grafike.
$original_bild = @ImageCreateFromJPEG ("bigmap.jpg");
$ziel_bild = @imagecreatetruecolor (100, 100);
ImageCopy ( $ziel_bild, $original_bild, $ziel_x, $ziel_y, $original_x, $original_y, $orginal_w, $original_h );
ImageJPEG ($ziel_bild ,"$ziel_name.jpg");
?>

Und dann hab ich am Ende ein schönes schwarzes 100x100 Pixel großes JPEG auf dem Server liegen. Das liegt auch garantiert nicht am gewählten Bildausschnitt :suspekt:

Ich hab es auch mit ImageCreateFromPNG und einem PNG als Quell und Zielbild probiert (die selbe riesige Grafik), selbes Ergebniss. (ok nur dass ich diesmal ein PNG hatte)

Nun hab ich gelesen dass ImageCopy bei großen Bildern Probleme mit dem Speicher machen könnte. Den hab ich in der php.ini jetzt allerdings schon bis zum Anschlag hochgedreht. An der Ausführungszeit kann es nicht liegen, sonst würde ja vermutlich erst garkein Bild abgespeichert.

Mit kleineren Bildern funktioniert das ganze Spielchen ja auch Problemlos.
Wie kann ich dieses Problem lösen? Oder gibt es einen anderen Weg der mir meine kleinen Bildauschnitte erstellt?
 
Ok nun hab ich das hier
PHP:
<?
$ziel_x="0";
$ziel_y="0";
$ziel_w="100";
$ziel_h="100";
$original_x="700";
$original_y="700";
$original_w="100";
$original_h="100";
$ziel_name="bild";
$original_bild = @ImageCreateFromJPEG ("$original_name");
$ziel_bild = @imagecreatetruecolor (100, 100);
imagecopyresized ( $ziel_bild, $original_bild, $ziel_x, $ziel_y, $original_x, $original_y,$ziel_w, $ziel_h, $orginal_w, $original_h );
ImageJPEG ($ziel_bild ,"$ziel_name.jpg");
imagedestroy ( $ziel_bild );
?>
Und nun bekomm ich diese Fehlermeldung
Warning: imagecopyresized() [function.imagecopyresized]: Invalid image dimensions in L:\htdocs\imagecutting\cut.php on line 27
Ich hab keine Ahnung wo die herkommen soll, oder soll mir das sagen mein Bild ist zu groß ? :D
 
Sorry, ich hatte überlesen, das du Bildausschnitte haben willst, imagecopyresized() skaliert die Größe eines Bildes. imagecopy() war für deine Wünsche also das richtige.

Mir ist auch grade aufgefallen, das du kein imagedestroy() verwendest, um den Speicher freizugeben. Ich bin grad zu faul das zu testen, aber es könnte dein Problem verursachen.
 
Das ist momentan die einzige Aktion die dieses Script ausführt.
imagedestroy() ist ja, glaube ich, nur nötig wenn man wärend der Scriptlaufzeit den Speicher freigeben will.
Hatte es vorher aber auch schon drinn, und da war das Ergebniss das selbe.
imagedestroy() wird dann ja aber auch erst ausgeführt nachdem das Bild gespeichert wurde, und hätte darauf dann vermutlich auch keinen Einfluss.
 
OK, dann bin ich fast mit meinem Latein am Ende, denn der Code sieht soweit ok aus. Ich kann mir höchtens noch vorstellen, dass das Original nicht geöffnet werden kann und da du die Fehlerausgabe unterdrückst (@-Zeichen vor dem Funktionsaufruf), bekommst du das nicht mit.
 
Hatte ich vergessen zu erwähnen, die Unterdrückung der Fehlerausgabe hab ich auch schon weggelassen, und es kam keine Fehlermeldung.
 
display_errors ist auf On?

Wenn nein, mit ini_set() bekommst du das hin. Setz auch mal den reporting-Level auf E_ALL | E_NOTICE.
 
Sorry, dann kann ich dir auch nicht mehr weiter helfen. Aber vielleicht noch einer der richtigen Spezialisten hier im Forum. Für mich sieht der Code in Ordnung aus, mal davon abgesehen, das ich das Bild nicht kenne. Kannst du es vielleicht hier mal anhängen? Ich würds gern ma testen.
 
Zurück