[PHP/GD] Kleuren kapot na imagecolortransparant

Pagina: 1
Acties:

Onderwerpen


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik ben met PHP aan het prutsen om een dynamish icon te maken. Dat is vrij aardig gelukt. Het scriptje maakt een gradient achtergrond aan, daaroverheen plaats ik met imagecopymerged() een plaatje van een gecko. Tot slot voeg ik afgeschuinde hoekjes toe. Dat werk prima: Afbeeldingslocatie: http://erik.kabel.utwente.nl/got/img (voor de mensen die externe icons niet aan hebben).

Nu dacht ik dat het wel aardig zou zijn om het overlay-plaatje te veranderen op speciale dagen. Bijv. een kerstmannetje voor kerst. Met andere plaatjes dan de gecko gaat het echter mis. De hoekjes worden niet altijd meer zwart en erger nog: in sommige gevallen wordt er teveel van het overlay-image transparant gemaakt.

Het probleem lijkt veroorzaakt te worden in de volgende regels code:
PHP:
1
2
3
4
$overlay_img = imagecreatefrompng($overlaypic);

$red = imagecolorallocate ($overlay_img, 255, 0, 0);
imagecolortransparent($overlay_img , $red);

Wanneer ik de imagecolortransparant uitschakel dan is het hoekjesprobleem opgelost. Dan heb ik echter helemaal geen transparantie meer op de overlay: Dan zie je een rood vierkantje en dat is niet de bedoeling.

Mijn vraag is of iemand een idee heeft om dit op te lossen, of aanwijzing waar het probleem ligt. Een testpagina met probleemgevallen en de volledige source van het script is hier te vnden

Regeren is vooruitschuiven


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Over welke versie van PHP hebben we het?
Is het geen optie om voor de overlay GIF images te gebruiken in plaats van PNG? Dan hoef je volgens mij namelijk niet met een transparante kleur te werken, omdat dat al in de GIF zelf is opgeslagen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
We hebben het over "PHP Version 4.3.0RC4" met GD version: bundled (2.0 compatible).

Gif wordt denk ik niet ondersteund met het oog op patentwetgeving, maar is eigenlijk ook niet wenselijk omdat gif slechts 256 kleuren ondersteund. Nu maakt dat op zich weer niet uit voor een 60x60 icon. De rest van het script is echter geschreven om ook grotere plaatjes te kunnen genereren. Dan zijn meer kleuren wel wenselijk.
Overigens ondersteund PNG ook transparantie (beter dan gif eigenlijk nog).

Regeren is vooruitschuiven


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

T-MOB schreef op 23 september 2004 @ 00:30:
We hebben het over "PHP Version 4.3.0RC4" met GD version: bundled (2.0 compatible).

Gif wordt denk ik niet ondersteund met het oog op patentwetgeving, maar is eigenlijk ook niet wenselijk omdat gif slechts 256 kleuren ondersteund. Nu maakt dat op zich weer niet uit voor een 60x60 icon. De rest van het script is echter geschreven om ook grotere plaatjes te kunnen genereren. Dan zijn meer kleuren wel wenselijk.
Overigens ondersteund PNG ook transparantie (beter dan gif eigenlijk nog).
De manier waarop PNG transparantie ondersteunt is essentieel anders. Ik gok dan ook daar het probleem zit. Probeer eens of het met GIFs wel werkt, zo ja, dan zit het hem in de alpha channels van de PNG, zo nee, dan moeten we nog maar bezien waar het aan ligt. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Fatal error: Call to undefined function: imagecreatefromgif() in E:\mywww\got\testimg.php on line 69
Helaas geen gif support...

Maar het gif verhaal zet me wel aan het denken, aangezien het geckoplaatje origineel een gifje was. De anderen waren jpeg, mss dat er iets mis gaat met het aantal kleuren. ff tellen....

Degene die wél goed gaat heeft 4 kleuren, de twee die fout gaan bestaan respectievelijk uit 649 en 817 kleuren. De laatste daarvan wordt het lelijkst...

[ Voor 20% gewijzigd door T-MOB op 23-09-2004 00:59 ]

Regeren is vooruitschuiven


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Converteer ze eens naar indexed color, zodat je een palet van 256 kleuren krijgt, en save ze dan eens als PNG? Wat gebeurt er dan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Dan krijg ik verkeerde hoekjes en een rode achtergrond achter de overlay :|.

Regeren is vooruitschuiven


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
hmm... even googlen leverde op dat kleurproblemen vaak worden veroorzaakt door een image met imagecreate() aan te maken ipv imagecreatetruecolor().
* T-MOB heeft een klassieke fout begaan 8)7 :X 8)7 :X 8)7

Regeren is vooruitschuiven

Pagina: 1