Hallo allemaal,
Sinds enige tijd ben ik met een redelijk omvangrijk script bezig, waarmee een aantal standaard bewerkingen (voornamelijk te gebruiken bij een fotogallery) wordt vermakkelijkt. Ik post het hele script niet, dat is 1000 regels groot en voornamelijk irrelevant.
Ik ben nu bezig met het implementeren van de volledige support van het alpha kanaal. Daatbij stuit ik op een probleem.
Ik heb een functie geschreven om een plaatje te mirroren. De belangrijke code ($this->m_img is het originele plaatje):
Wat ik hier doe:
1) ik maak een nieuw plaatje
2) ik zet een nieuwe alpha blending mode
3) kopieer de strookjes
4) zet alpha blending mode terug.
De reden dat ik alpha blending mode verander is simpel. Zou ik dat niet doen, en ik zou een transparant plaatje kopieren, dan krijg ik de originele kleur van het target terug ( immers: wit + transparant = wit). Met het veranderen van de mode krijg ik het voormekaar dat er wordt overschreven.
HET PROBLEEM
Ik heb ook een functie die roteerd. Deze is:
Het probleem is, dat image rotate de standaard blending mode gebruikt (degene die ik wil gebruiken), en dat ik niet in staat ben deze te veranderen. Op alle plekken die transparant zijn, krijg ik zwarte pixels (ook als ik heb aangegeven dat ik extra ruimte veroorzaakt door roteren wit wil hebben).
VRAAG
Hoe kan ik er voor zorgen dat imagerotate de juiste alpha blending mode gebruikt, en toch de doorzichtige stukken doorzichtig laat.
Sinds enige tijd ben ik met een redelijk omvangrijk script bezig, waarmee een aantal standaard bewerkingen (voornamelijk te gebruiken bij een fotogallery) wordt vermakkelijkt. Ik post het hele script niet, dat is 1000 regels groot en voornamelijk irrelevant.
Ik ben nu bezig met het implementeren van de volledige support van het alpha kanaal. Daatbij stuit ik op een probleem.
Ik heb een functie geschreven om een plaatje te mirroren. De belangrijke code ($this->m_img is het originele plaatje):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $width = ImageSX($this->m_img); $height = ImageSY($this->m_img); $new_img = ImageCreateTrueColor($width,$height); ImageAlphaBlending($new_img,false); for($i=0;$i<$height;$i++) { ImageCopy($new_img,$this->m_img, 0,($height-$i-1), 0,$i, $width,1); } ImageAlphaBlending($new_img,true); ImageDestroy($this->m_img); $this->m_img = $new_img; |
Wat ik hier doe:
1) ik maak een nieuw plaatje
2) ik zet een nieuwe alpha blending mode
3) kopieer de strookjes
4) zet alpha blending mode terug.
De reden dat ik alpha blending mode verander is simpel. Zou ik dat niet doen, en ik zou een transparant plaatje kopieren, dan krijg ik de originele kleur van het target terug ( immers: wit + transparant = wit). Met het veranderen van de mode krijg ik het voormekaar dat er wordt overschreven.
HET PROBLEEM
Ik heb ook een functie die roteerd. Deze is:
PHP:
1
2
3
| $img_new = imagerotate($this->m_img,$rotate_deg,$bg_color); ImageDestroy($this->m_img); $this->m_img = $img_new; |
Het probleem is, dat image rotate de standaard blending mode gebruikt (degene die ik wil gebruiken), en dat ik niet in staat ben deze te veranderen. Op alle plekken die transparant zijn, krijg ik zwarte pixels (ook als ik heb aangegeven dat ik extra ruimte veroorzaakt door roteren wit wil hebben).
VRAAG
Hoe kan ik er voor zorgen dat imagerotate de juiste alpha blending mode gebruikt, en toch de doorzichtige stukken doorzichtig laat.
[ Voor 7% gewijzigd door Bart B op 04-12-2003 00:02 ]