1

画像から RGB 値の配列を取得したいと考えています。例 (2 X 2 ピクセルの例)

[[[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 X 2 pix jpegになりました。

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

どんな助けでも大歓迎です!

4

4 に答える 4

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 ;
}
于 2013-10-17T15:00:43.500 に答える
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);
于 2013-10-17T15:04:47.503 に答える