【问题标题】:Colorize a PNG image using PHP GD使用 PHP GD 为 PNG 图像着色
【发布时间】:2011-03-11 22:56:02
【问题描述】:

我有一个透明背景和白色圆圈的 PNG 图像。我正在尝试将白色圆圈着色为特定颜色,但我在使用此代码时遇到了困难:

$src = imagecreatefrompng('circle.png');

$handle = imagecolorclosest($src, 255,255,255);
imagecolorset($src,$handle,100,100,100);

$new_image_name = "new_image.png";
imagepng($src,$new_image_name);
imagedestroy($src)

任何建议都会很有帮助。提前谢谢你。

【问题讨论】:

  • 我相信您忘记描述这里出了什么问题。你能提供示例输入和输出图像吗?

标签: php png gd


【解决方案1】:

我假设您的 PNG 图像具有 alpha 透明度,这使得 imagecolorset() 无用,因为您只会删除透明度(或最终出现锯齿状边缘)。

如果你只有一个圆圈,你最好用 GD 创建一个新图像,然后用imagefilledellipse() 画你的圆圈。

但是,如果“圆”比圆更复杂一点,那会使您的代码变得非常复杂。但是,您可以使用 GD 抽象库(例如 WideImage)来显着简化该任务。因此,要为透明“蒙版”着色,您只需使用 WideImage 执行以下操作:

// 1. Load Image
$original = WideImage::load('circle.png');

// 2. Get Transparency Mask
$mask = $original->getMask();

// 3. Dispose Original
$original->destroy();

// 4. Create New Image
$colorized = WideImage::createTrueColorImage($mask->getWidth(), $mask->getHeight());

// 5. Colorize Image
$bg = $colorized ->allocateColor(255, 0, 0);
$colorized->fill(0, 0, $bg);

// 6. Apply Transparency Mask
$colorized->applyMask($mask);

// 7. Dispose mask
$mask->dispose();

// 8. Save colorized
$colorized->save($new_image_name);

// 9. Dispose colorized
$colorized->dispose();

除了第 2 步和第 6 步之外,上述 9 个步骤中的大部分都可以使用 GD 轻松完成...仍然可以通过循环、一些数学运算以及大量调用 imagecolorat()imagecolorset() 来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2014-01-10
    • 1970-01-01
    • 2015-01-27
    • 2015-12-28
    • 2012-03-11
    • 2013-03-17
    • 2012-09-25
    相关资源
    最近更新 更多