2013-10-17 43 views
1

我想从图像中获取RGB值的数组。例如。 (2 X 2 PIX例子。)PHP - JPEG图像到RGB值阵列

[[[R, G, B], [R, G, B]], [[R, G, B], [R, G, B]]] 

我现在有代码:

<?php 
// open an image 
$image = imagecreatefromjpeg('image.jpg'); // imagecreatefromjpeg/png/ 
// get image dimension, define colour array 
$width = imagesx($image); 
$height = imagesy($image); 
$colors = []; 
for ($y = 0; $y < $height; $y++) 
{ 
    for ($x = 0; $x < $width; $x++) 
    { 
     $rgb = imagecolorat($image, $x, $y); 
     $r = ($rgb >> 16) & 0xFF; 
     $g = ($rgb >> 8) & 0xFF; 
     $b = $rgb & 0xFF; 
    } 
} 
print_r($colors); 
?> 

上述不工作。 我现在的形象仅仅是一个2×2 PIX JPEG应该输出:

[[[0, 255, 0], [255, 0, 0]], [[0, 0, 255], [255, 255, 255]]] 

任何帮助,不胜感激!

+0

您不向''颜色'数组添加'$ r $ g $ b' ......我会从那里开始。 '$ colors [] = array($ r,$ g,$ b);' – cmorrissey

+0

你忘了把$ r,$ g和$ b放到你的$ colors数组中吗?我没有看到你在上面的代码中做了什么。 – Will

+0

是的。谢谢,已添加。现在只需要输出“Array()”。 – Tom

回答

2

好的,钉上它。谢谢大家。

<?php 
$image = imagecreatefromjpeg('image.jpg'); // imagecreatefromjpeg/png/ 

$width = imagesx($image); 
$height = imagesy($image); 
$colors = array(); 

for ($y = 0; $y < $height; $y++) { 
$y_array = array() ; 

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

    $x_array = array($r, $g, $b) ; 
    $y_array[] = $x_array ; 
} 
$colors[] = $y_array ; 
} 

print_r($colors); 
?> 

评论没有错,新增了$ r,$ g,$ b。重组@jari答案,现在得到一个很好的输出。

干杯!

+0

嘿,你知道如何将这个数组转换回图像吗? – Jez

0

我通过创建子数组并向其添加元素来修复您的代码,因为它应该是。

for ($y = 0; $y < $height; $y++) 
{ 
    $height_arr = array() ; 

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

     $width_arr = array($r, $g, $b) ; 
     $height_array[] = $width_arr ; 
    } 

    $colors[] = $height_arr ; 
} 
0

这个怎么样?

[...] 
$colors = []; 
for ($y = 0; $y < $height; $y++) { 
    for ($x = 0; $x < $width; $x++) { 
     $rgb = imagecolorat($image, $x, $y); 
     $r = ($rgb >> 16) & 0xFF; 
     $g = ($rgb >> 8) & 0xFF; 
     $b = $rgb & 0xFF; 
     $colors[$y][$x] = array($r,$g,$b); // or, $colors[$x][$y] = array($r,$g,$b); 
    } 
} 
print_r($colors); 
1
function getArrayOfPixelsFromFile($source) { 
$image = imagecreatefromjpeg($source); // imagecreatefromjpeg/png/ 

$width = imagesx($image); 
$height = imagesy($image); 
$colors = array(); 

for ($y = 0; $y < $height; $y++) { 
    $y_array = array(); 
    for ($x = 0; $x < $width; $x++) { 
     //Seleciona a cor localizada em ($x, $y) 
     $rgb = imagecolorat($image, $x, $y); 
     //echo $rgb." = ".decbin($rgb),"<br>"; 
     //Seleciona os primeiros dois bytes que representam vermelho 
     $r = ($rgb >> 16) & 0xFF; 
     //Seleciona os dois bytes do meio que representam o verde 
     $g = ($rgb >> 8) & 0xFF; 
     //Seleciona os dois últimos bytes que representam o azul 
     $b = $rgb & 0xFF; 
     $x_array = array($r, $g, $b); 
     $y_array[] = $x_array; 
    } 
    $colors[] = $y_array; 
    } 
    return $colors; 
}