【问题标题】:How to change the color in a image using PHP如何使用 PHP 更改图像中的颜色
【发布时间】:2011-10-22 01:45:19
【问题描述】:

我有一张条形码图像,我想将黑色更改为任何其他颜色更丰富的颜色。如何在 PHP 中做到这一点?

【问题讨论】:

  • 图片是什么格式的?有半色调吗?
  • 不确定这是否是同一个问题,但答案可能会帮助您弄清楚:stackoverflow.com/questions/1548534/…
  • 常用格式是jpeg。如果是其他格式,我觉得可以改成jpeg。谢谢你这么快的回答!
  • @johnvip:它有 jpeg 引起的伪影吗?

标签: php image gd imagefilter


【解决方案1】:

如果您的图像是单色的,那么您可以使用imagefilter() 函数:

$image = imagecreatefromjpeg('filename.jpg');
imagefilter($image, IMG_FILTER_COLORIZE, 0, 0, 255); // make it blue!
imagejpeg($image, 'filename.jpg');

【讨论】:

  • 很好的解决方案。我还建议对条形码使用 gif 或 png,因为 jpg 可能包含可能导致代码无法扫描的伪影。还要确保您测试条形码,因为您使用的颜色可能不会在所有扫描仪上注册。条形码通常是黑白的,因为它对比度高(打印成本低)
【解决方案2】:

结合本网站的代码并在我自己的代码中添加一点,我已经想通了。享受。

function updateThumb($image, $newColor) {
    $img = imagecreatefrompng($image);

    $w = imagesx($img);
    $h = imagesy($img);

    // Work through pixels
    for($y=0;$y<$h;$y++) {
        for($x=0;$x<$w;$x++) {
            // Apply new color + Alpha
            $rgb = imagecolorsforindex($img, imagecolorat($img, $x, $y));

            $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
            imagesetpixel($img, $x, $y, $transparent);


            // Here, you would make your color transformation.
            $red_set=$newColor[0]/100*$rgb['red'];
            $green_set=$newColor[1]/100*$rgb['green'];
            $blue_set=$newColor[2]/100*$rgb['blue'];
            if($red_set>255)$red_set=255;
            if($green_set>255)$green_set=255;
            if($blue_set>255)$blue_set=255;

            $pixelColor = imagecolorallocatealpha($img, $red_set, $green_set, $blue_set, $rgb['alpha']);
            imagesetpixel ($img, $x, $y, $pixelColor);
        }
    }

    // Restore Alpha
    imageAlphaBlending($img, true);
    imageSaveAlpha($img, true);

    return $img;
}

function makeThumb($path, $top, $bottom=FALSE) {
    $width = imagesx($top);
    $height = imagesy($top);

    $thumbHeight = $bottom != FALSE ? $height * 2 : $height;

    // Create Transparent PNG
    $thumb = imagecreatetruecolor($width, $thumbHeight);
    $transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127);
    imagefill($thumb, 0, 0, $transparent);

    // Copy Top Image
    imagecopy($thumb, $top, 0, 0, 0, 0, $width, $height);

    // Copy Bottom Image
    if ($bottom != FALSE) {
        imagecopy($thumb, $bottom, 0, $height, 0, 0, $width, $height);
    }

    // Save Image with Alpha
    imageAlphaBlending($thumb, true);
    imageSaveAlpha($thumb, true);
    header('Content-Type: image/png');
    imagepng($thumb, $path); // save image as png

}

$thumbTop = updateThumb('input/path', array(240,105,15));

【讨论】:

  • 此解决方案是否要求图像为 png 格式?
  • 你能解释一下你的解决方案吗?此解决方案是否要求图像为 png?第二个参数是十六进制值吗?这会创建一个新图像并使用新颜色保存它,还是不会修改现有图像而仅以不同颜色显示给当前用户?你能举个例子吗?
  • 只是 rgb 使用数组来存储 rgb 值。但是,您可以修改它以制作 rgba。 Atm,我已将其设置为保留您更改颜色的图像的 alpha。我最初用它来改变绘制字符的颜色,并更高级地将眼睛的虹膜改变为不同的颜色。
  • 我也为此使用了 png,但如果删除 alpha 位,您可能可以使用 jpeg
猜你喜欢
  • 2011-11-28
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多