【问题标题】:Overlaying colour on a JPEG with PHP/GD?用 PHP/GD 在 JPEG 上叠加颜色?
【发布时间】:2009-05-04 18:43:51
【问题描述】:

我的服务器上存储了一组黑白 JPEG。这些图像是基于符号的,其中符号是白色背景上的黑色线条的集合。

我正在尝试使用 GD 根据传递的变量动态地将黑色替换为另一种颜色。目前,我是:

获取 JPEG 为:$image = imagecreatefromjpeg($imgURL), 通过 PHP 将 HEX 代码(例如#FF0000)转换为 RGB,

然后将这些变量输入:

private function colourize_image($image, $colour, $contrast = 0) {
    if (!$image) { return false; }

    imagealphablending($image, true);
    imagesavealpha($image, true);

    # Convert hex colour into RGB values
    $r = hexdec('0x' . $colour{0} . $colour{1});
    $g = hexdec('0x' . $colour{2} . $colour{3});
    $b = hexdec('0x' . $colour{4} . $colour{5});

    imagefilter($image, IMG_FILTER_COLORIZE, $r, $g, $b);
    imagefilter($image, IMG_FILTER_CONTRAST, $contrast);

    # Return the GD image object
    return $image;
}

由于某种原因,该功能根本不起作用(它不会覆盖新颜色)。

谁能告诉我哪里出错了?

非常感谢。

【问题讨论】:

  • $color 是如何传递的?我从未见过这种用于访问变量的 {0} 表示法。
  • 如果它是一个像“FFFFFF”这样的白色字符串,你应该使用方括号,而不是花括号。

标签: php gd


【解决方案1】:

如果颜色是唯一的问题,那么你可以试试这个:

<php> //剪辑 $color = preg_replace('/^#/','',$color); //如果有“#”就去掉 $r = hexdec("0x{$color[0]}{$color[1]}"); $g = hexdec("0x{$color[2]}{$color[3]}");
$b = hexdec("0x{$color[4]}{$color[5]}"); //剪辑 </php>

【讨论】:

    【解决方案2】:

    您可以使用imageistruecolor 函数来确定您刚刚加载的JPEG 是真彩色还是基于调色板的。如果不是真彩,可以新建一个等宽高的真彩图,把旧图复制过来:

    $width = imagesx($jpeg);
    $height = imagesy($jpeg);
    $image = imagecreatetruecolor($width, $height);
    imagecopy($jpeg, $image, 0, 0, 0, 0, $width, $height);
    

    然后您应该能够应用新颜色。

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多