我目前正在嘗試獲取影像中的所有像素資料,并在對陣列進行編碼后以 JSON 形式回傳它。但是,當我嘗試將 $y 資料插入陣列時,它總是插入 144。沒有中間值,總是 144。但是,當我回顯 $y 時,我得到“0、1、2 等”。
$x、$r、$g 和 $b 是正確的。
有任何想法嗎?這是我的代碼:
<?php
header('Content-Type: application/json');
class PixelData {
private $ar = array(
"pixeldata" => [
]
);
public function getPixel($x, $y, $im) {
echo $y; // echoes "0, 1, 2, 3, etc."
global $ar;
$ar["pixeldata"][$x]["x"] = $x;
$ar["pixeldata"][$x]["y"] = $y;
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$ar["pixeldata"][$x]["r"] = $r;
$ar["pixeldata"][$x]["g"] = $g;
$ar["pixeldata"][$x]["b"] = $b;
}
}
$src = "D:\Pictures\Test.png";
$im = imagecreatefrompng($src);
$size = getimagesize($src);
$width = imagesx($im);
$height = imagesy($im);
for($x = 0; $x < $width; $x )
{
for($y = 0; $y < $height; $y )
{
$pd = new PixelData();
$pd->getPixel($x, $y, $im);
}
}
$js = json_encode($ar);
echo $js;
?>
uj5u.com熱心網友回復:
進一步詳細說明我的評論:
您的陣列基本上是一維的,因為唯一可變的方面是
$ar['pixeldata'][$x]; 您永遠不會添加$y為另一個維度。因此,每次$y在最內部的 for 回圈中遞增以進入下一個級別時,$height都會覆寫先前的$x值。基本上,當你的腳本完成時,pixeldata 將只包含最上面一行像素的資料,因此它們總是144.
直到現在我也沒有注意到,但是如果您想將資料存盤在PixelData私有陣列中,則無法在for回圈內創建新實體,您需要在for回圈外執行此操作。
這可能就是你想要的。如您所見,我為您的 pixeldata 陣列添加了一個額外的維度,以便同時包含$x和$y維度。
<?php
header('Content-Type: application/json');
class PixelData {
private $ar = array(
"pixeldata" => [
]
);
public function getPixel($x, $y, $im) {
echo $y; // echoes "0, 1, 2, 3, etc."
// Instantiate an array for this pixel
$this->ar["pixeldata"][$x][$y] = [];
$this->ar["pixeldata"][$x][$y]["x"] = $x;
$this->ar["pixeldata"][$x][$y]["y"] = $y;
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$this->ar["pixeldata"][$x][$y]["r"] = $r;
$this->ar["pixeldata"][$x][$y]["g"] = $g;
$this->ar["pixeldata"][$x][$y]["b"] = $b;
}
public function getAr() {
return $this->ar;
}
}
$src = "D:\Pictures\Test.png";
$im = imagecreatefrompng($src);
$size = getimagesize($src);
$width = imagesx($im);
$height = imagesy($im);
$pd = new PixelData();
for($x = 0; $x < $width; $x )
{
for($y = 0; $y < $height; $y )
{
$pd->getPixel($x, $y, $im);
}
}
$js = json_encode($pd->getAr());
echo $js;
?>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352668.html
標籤:php
下一篇:laravel過濾器回傳所有記錄
