Code:
$rImage = imagecreatefrompng('somefile.png');
if(imageistruecolor($rImage ))
{
// Grafik mit mehr als 8 Bit Farbinformationen
// -> 16 / 24 / 32 Bit
}
else
{
// 8 Bit Grafik
}
Damit kannst du herausfinden, ob es sich bei der Grafik um eine True Color Grafik handelt oder nicht. Jedoch solltest du nicht alle True Color Bilder verweigern, da JPEG beispielsweise fast immer im 16-Bit Format gespeichert werden und somit True Color Bilder sind!
Code:
GIF -> 8 Bit
JPEG -> 16 Bit
PNG -> VARIABEL: 8 Bit / 24 Bit / 32 Bit
Das mit dem Farben tauschen vor dem drehen ist zwar möglich, hätte aber vermutlich (habs nicht getestet
) keine Auswirkung auf das Ergebnis, da du ja dann die Farbe schwarz durch rot ersetzten würdest, wodurch die pixel in auge und mund, welche schwarz sind, auch rot gefärbt würden... Wenn du rot dann nach dem drehen als transparent definieren würdest, hättest du das gleiche Ergebnis als würdest du nach dem drehen schwarz als transparent definieren!
Für den Farbentausch kannst du folgenden Code verwenden...
(Ebenfalls nicht getestet...
)
Code:
// Transparente Farbe des Bildes ermitteln
if( ($index = imagecolortransparent($rImage)) == -1)
{
// Keine Transparente Farbe gesetzt!
// -> Hintergrundfarbe verwenden (Pixel in der linken oberen Ecke)
$index = imagecolorat($rImage, 1, 1);
}
// Farbe austauschen
// Die letzten drei Parameter dienen zur Definition der neuen Farbe (
RGB)
if(!imagecolorset($rImage, $index, 255, 0, 0))
{
die('Konnte Farben nicht tauschen');
}
Würde aber an deiner Stelle überlegen, ob du 24-Bit PNGs wirklich verweigern solltest, oder ob du sie einfach akzeptierst, sie aber nicht bearbeitest (drehst) und dem Benutzer in Roh-Form wieder zur Verfügung stellst...
Noch ne kleine Info am Rande, der Verlust der Transparenten Farbe beim drehen ist bekannt
bugs.php.net, sollte aber offiziell nicht als Bug angesehen werden!
Hoffe, dass bringt dich der Lösung des Problems ein Stückchen näher...