如何遍历图像的所有像素?
Posted
技术标签:
【中文标题】如何遍历图像的所有像素?【英文标题】:How to loop through all the pixels of an image? 【发布时间】:2012-05-15 03:03:55 【问题描述】:我想遍历图像的所有像素,找到该像素的 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 是最好的选择吗? 你看过图像函数的php手册吗?对于这类事情,Php 可能不是最快的解决方案,尤其是在大图像上,但它更有能力做到这一点。 gd 像素操作很慢... @Dagon 为什么重要?有时我们必须使用手头的工具,而这不一定是最佳选择。 @RichardDesLonde 有时人们会说他们想要语言 X,因为这就是他们所知道的全部,或者没有考虑过替代方案。也称为乐器法则 【参考方案1】: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
变量中。
边界从:0 $x
【参考方案2】:
这是完整的答案,没有跳出错误
<?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);
【讨论】:
以上是关于如何遍历图像的所有像素?的主要内容,如果未能解决你的问题,请参考以下文章