![]() |
Possible to change a certain color in a image with GD?
(Hypothetically)Say theres just a "solid" color in a image, say a white bg with a #FF0000 red square in the middle. Is it possible to use a GD function to change FF0000 to a different color? regardless what else is in the image. In a gif file.
|
Yes, it is certainly possible to look for pixels of a certain colour and change them to some other colour.
imagecolorat is a good starting point. |
So what if you know the "exact" color, how would I "change" that color all over the image, just that color throughout the image?
E.g...ajaxload.info |
Someone please correct me if there's an easier way, but I guess you have to traverse the image horizontally and vertically checking the color of each pixel.. if it matches the color you want to change you can do this using the function imagesetpixel.
|
Hmm..that might be fun.
|
I tried it :P
PHP Code:
|
It's not perfect because the image has different yellow tones near the edges and these pixels are not passing the colormatch function.
To make it better you'll need to implement a tolerance system.The tolerance can be a value from 0 to 255 and it defines a range in which the pixels pass or not the colormatch function. In your code you were trying to match the FCFF00 (252, 255, 0) pixels. You have some pixels that are clearer and some that are darker than this color. To match them let's say you set a tolerance of 30.First you calculate the color ranges. RED lower range: 252 - 30 = 222 upper range: 252 + 30 = 255 (because 255 is the maximum value for RGB colors) GREEN lower: 255 - 30 = 225 upper: 255 + 30 = 255 (same reason as red) BLUE lower 0 - 30 = 0 (because you can't have a negative value for RGB colors) upper: 0 + 30 = 30 FINAL COLOR lower: (222, 225, 0) = #DEE100 (reference) upper: (255, 255, 30) = #FFFF1E (reference) Now for each pixel in the image your colormatch function is going to check if the pixel color is between those two tones, if it is.. you change it's color. :-) One thing to note is that different tones are used in the image edges to achieve a smoothing effect. Using a tolerance system you can match those pixels, but if you change all of them to the same color you're still going to miss some quality at the edges. |
So wait, the edges, say I change it to a different color right? to have that "same" effect towards the edges, do I process the same style? To make the image seem smooth
|
| All times are GMT. The time now is 02:29 PM. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0