如何在 PHP 中替换图像中的像素?

发布于 2024-11-06 00:51:30 字数 115 浏览 0 评论 0原文

我想循环遍历图像中的每一行和每一列,并用不同的颜色替换某些像素。我愿意接受使用 GD 或 ImageMagick 的解决方案。谁能给我举个例子来说明如何做到这一点?我用谷歌搜索了几种不同的方法,但没有找到可靠的例子。

I'd like to loop through each row and column in an image and replace certain pixels with different colors. I am open to a solution using GD or ImageMagick. Can anyone give me an example of how to do this? I've Googled several different ways and haven't found a solid example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

豆芽 2024-11-13 00:51:30

您可以使用 GD 通过以下方式实现此目的:

您将把颜色处理为十六进制值

function replaceColor($img, $from, $to) {
    $r = hexdec(substr($to, 0, 2));
    $g = hexdec(substr($to, 2, 2));
    $b = hexdec(substr($to, 4, 2));

    // allocate $to color.
    $to = imagecolorallocate($img, $r, $g, $b);

    // pixel by pixel grid.
    for ($y = 0; $y < imagesy($img); $y++) {
        for ($x = 0; $x < imagesx($img); $x++) {

            // find hex at x,y
            $at = imagecolorat($img, $x, $y);
            $r = 0xFF & ($at >> 0x10);
            $g = 0xFF & ($at >> 0x8);
            $b = 0xFF & ($at);
            $hex = dechex($r).dechex($g).dechex($b);

            // set $from to $to if hex matches.
            if ($hex == $from) {
                imagesetpixel($img, $x, $y, $to);
            }
        }
    }
}

You can achieve this with GD by something like:

You will be handling colors as hex values

function replaceColor($img, $from, $to) {
    $r = hexdec(substr($to, 0, 2));
    $g = hexdec(substr($to, 2, 2));
    $b = hexdec(substr($to, 4, 2));

    // allocate $to color.
    $to = imagecolorallocate($img, $r, $g, $b);

    // pixel by pixel grid.
    for ($y = 0; $y < imagesy($img); $y++) {
        for ($x = 0; $x < imagesx($img); $x++) {

            // find hex at x,y
            $at = imagecolorat($img, $x, $y);
            $r = 0xFF & ($at >> 0x10);
            $g = 0xFF & ($at >> 0x8);
            $b = 0xFF & ($at);
            $hex = dechex($r).dechex($g).dechex($b);

            // set $from to $to if hex matches.
            if ($hex == $from) {
                imagesetpixel($img, $x, $y, $to);
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文