简体   繁体   中英

Convert an image color/hue using PHP GD library. The Catch? It has rounded corners

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
}

我真的不不是你为什么这样做,但也许看看phpTumb (和它的演示在这里 )。

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM