I’m writing code this week to dynamically change the color of images. As long as the image is square or rectangle, the code below works perfectly. However, I have an image that has rounded corners (filled with a spot color and the background outside the corners is white.)
Can someone tell me if there’s a simple way to color an image that has rounded corners using the imagecolorset function (or any other php method)?
I only want the non white areas of the image to be colored (In case you’re wondering, I’m disallowing the color white to be applied to the image).
Note, perhaps a better way to do this would be to use a PNG image that has transparent background (rather than my gif image). If you think that’s a better approach, please advise.
Here’s the function that I’m working with…
function set_theme_color_header($hex)
{
$info = hexToRGB($hex); //calls a helper function which translates the hex to RGB
$img = imagecreatefromgif('header-template.gif'); //again, this could be a PNG image, but we always start with this image, then create a color copy
$color = imagecolorallocate($img, $info["red"], $info["green"], $info["blue"]);
imagecolorset($img, 0, $info["red"], $info["green"], $info["blue"]);
imagegif($img, 'header.gif'); //only problem is that the imagecolorset function creates a messy fill at the corners
}
GD does not handle gif’s very well. I recommend creating a png image with your rounded corners, then use GD’s imagefilter($img, IMG_FILTER_COLORIZE, $info[“red”], $info[“green”], $info[“blue”], $alpha) function. Then save the image as a gif.
Alternatively, use php’s imagick library to literally draw the image. imagick is about a billion times better than GD. Poorly documented, but…the basic stuff isnnt too hard. See the tut link below.
Search php.net for “imagick” to see all the functions.
imagick tutorial