Thumbnail Erstellung / Crop - Schwarzer Hintergrund

Gesperrt
kaY
Beiträge: 2
Registriert: Mo 8. Dez 2008, 18:23
Kontaktdaten:

Thumbnail Erstellung / Crop - Schwarzer Hintergrund

Beitrag von kaY » Mo 8. Dez 2008, 18:37

Hallo!

Folgendes merkwürdiges Verhalten ist mir aufgefallen. Wenn aus einem Bild
ein Thumbnail erstellt werden soll und das sogenannte Crop / Cropping zum
Einsatz kommt, wird das Thumbnail ordentlich erstellt, aber der Hintergrund
in dem skaliertern Bild ist schwarz.

Das tritt natrürlich nur dann auf, wenn ein Bild zb. 150x480px auf ein Thumb-
nail von 140x110Px skaliert bzw. skaliert und "gecropt" wird.

Siehe Bild:
Bild

Die Datei die dafür zuständig ist -> "functions.api.images.php" aus
dem Verzeichnis serverpfad/contenido/includes/.

In Zeile 407 ist folgender Code:

Code: Alles auswählen

if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreatetruecolor($maxX, $maxY);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
		} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreatetruecolor($targetX, $targetY);
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
Per default erzeugt der Befehl "imagecreatetruecolor" immer ein schwarzes Bild.

Nun habe ich folgenden Code probiert:

Code: Alles auswählen

if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreatetruecolor($maxX, $maxY);
		$background = imagecolorallocate($targetImage, 255, 255, 255);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
		imagefill($targetImage, 0, 0, $background);	
	} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreatetruecolor($targetX, $targetY);
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
Hier passiert nix. Das Bild bleibt unverändert. Auch wenn ich "imagefill"
vor "imagecopy" setze.

Auch testweise "imagefilledrectangle" bringt keine Besserung.

Irgendwelche Ideen dazu?

kaY
Beiträge: 2
Registriert: Mo 8. Dez 2008, 18:23
Kontaktdaten:

Beitrag von kaY » Di 9. Dez 2008, 17:09

Keiner eine Idee?! :cry:

sly
Beiträge: 19
Registriert: Fr 6. Mär 2009, 23:00
Kontaktdaten:

Re: Thumbnail Erstellung / Crop - Schwarzer Hintergrund

Beitrag von sly » Fr 6. Mär 2009, 23:10

Bin grad über das gleiche Problem gestolpert und habe deinen Beitrag gefunden. Nachdem dort keine Lösung war, habe ich selber nachgedacht. Der Fehler liegt m.E. in dem abschließenden imagecopy-Befehl. Es wird dort vom verkleinerten Ausgangsbild ein rechteckiger Bereich kopiert, der in einer Dimension größer ist als das Ausgangsbild. Dieser fehlende Bereich wird mit schwarz aufgefüllt. Das Zielbild wird komplett damit gefüllt. Deshalb kann von der vorher gefüllten Farbe nichts mehr zu sehen sein.
Ich habe das Bild jetzt mit weiß gefüllt (weil die entsprechende Homepage einen weißen Hintergrund hat) und habe es gleich automatisch in die Mitte gesetzt. Anschließend wird mit imagecopy nur das Ausgangsbild in seiner rechteckigen Größe an die richtige Stelle hineinkopiert.

Bei mir funzt es - viel Erfolg! :)
Stefan

Code: Alles auswählen

   /* Create the target image with the max size, crop it afterwards. */
   $targetImage = imagecreatetruecolor($maxX, $maxY);
		
   // ab hier eingefügt
   $gdColor = imagecolorallocate($targetImage, 255, 255, 255);  // weiße Farbe bestimmen
   imagefilledrectangle($targetImage, 0, 0, $maxX, $maxY, $gdColor);  // Bild mit der Farbe füllen
   $newposX = round(($maxX-$targetX)/2);  // Bild ggf. zentrieren  
   $newposY = round(($maxY-$targetY)/2); 
   // imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);   <---- Diese Zeile ist fehlerhaft 
   imagecopy($targetImage, $imageHandle, $newposX, $newposY, 0, 0, $targetX, $targetY);

Gesperrt