如何循环遍历图像的所有像素?

6
我希望能够遍历图像的所有像素,找到该像素的rgba值,并对这些像素进行处理。

示例

假设我有一个100x100像素的图像。我想使用我已经创建的函数找到每个像素的值:

function getPixel($image, $x, $y) {

  $colors = imagecolorsforindex($image, imagecolorat($image, $x, $y));
  $inrgba = 'rgba(' . $colors['red'] . ',' . $colors['green'] . ',' . $colors['blue'] . ',' . $colors['alpha'] . ')';
  return $inrgba;
}

将这些值与图像的尺寸存储在数组中,或者是数组的数组中。最终结果将用于html页面。如何实现?

PHP是最好的选择吗? - user557846
@Dagon 为什么这很重要?有时候我们必须使用手头的工具,而这些工具不一定是最佳选择。 - richard
有时候人们会说他们之所以只会一种语言X,是因为那是他们唯一了解的语言,或者他们没有考虑其他选择。这也被称为“工具定律”。 - user557846
@Dagon 真的没错!我想你可能是以这种精神提问的,但我还是决定为楼主辩护一下。 :-) - richard
好的,但也许不必理会一年前已经回答过的问题;-) - user557846
显示剩余3条评论
2个回答

9
for($x=1;$x<=$width;$x++)
{
    for($y=1;$y<=$height;$y++)
    {
        $pixel=getPixel($image, $x, $y);
        //do something
    }
}

这将会找到每个列中的每个像素。
i=iteration
pixel coordinate = (x,y)

对于一个 5 x 5 的图像,迭代过程如下:
i1 = (1,1)
i2 = (1,2)
i3 = (1,3)
i4 = (1,4)
i5 = (1,5)
i6 = (2,1)
i7 = (2,2)
i8 = (2,3)
i9 = (2,4)
i10 = (2,5)
i11 = (3,1)
i12 = (3,2)
i13 = (3,3)
i14 = (3,4)
i15 = (3,5)
i16 = (4,1)
i17 = (4,2)
i18 = (4,3)
i19 = (4,4)
i20 = (4,5)
i21 = (5,1)
i22 = (5,2)
i23 = (5,3)
i24 = (5,4)
i25 = (5,5)

它不是一个函数,因此它不返回任何东西。但在每次迭代中,它将x坐标放在“$x”变量中,并将y坐标放在“$y”变量中。 - bluegman991
1
Bounds从0开始:0 $x< [...] $y< - user956584

4
这里是完整的答案,不会出现越界错误。
<?php

    $src    = '2fuse.jpg';
    $im     = imagecreatefromjpeg($src);
    $size   = getimagesize($src);
    $width  = $size[0];
    $height = $size[1];

    for($x=0;$x<$width;$x++)
    {
        for($y=0;$y<$height;$y++)
        {
            $rgb = imagecolorat($im, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            var_dump($r, $g, $b);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接