共计 685 个字符,预计需要花费 2 分钟才能阅读完成。
/**
* 图片转点阵(黑白)* @param string $imgPath
* @return array
*/
function imgToLattice(string $imgPath): array
{$size = getimagesize($imgPath);// 失去图片的信息
$im = imagecreatefrompng($imgPath);// 創建一張圖片
// 贮存二进制数组
$lattice = [];
$white = [
'red' => 255,
'green' => 255,
'blue' => 255,
'alpha' => 0,
];
for ($i = 0; $i < $size[1]; ++ $i) {$lattice[$i] = '';
for ($j = 0; $j < $size[0]; ++$j) {$rgb = imagecolorat($im, $j, $i); // 获得某像素的色彩索引值
$rgbArr = imagecolorsforindex($im, $rgb);
if ($white === $rgbArr){$lattice[$i] .= 0;
}else{$lattice[$i] .= 1;
}
}
}
return [$lattice, $size];
}
注解:
$rgbArr = imagecolorsforindex($im, $rgb);
这里返回一个 RGB 数组,跟 $white 数组一样,我因为二维码只有黑白,所以这里只做了黑白判断,黑就是 1,白就是 0,如果你的图片反对三种级以上,这里能够做判断,拼接其余数字
if ($white === $rgbArr){$lattice[$i] .= 0;
}else{$lattice[$i] .= 1;
}
打印进去成果:
转成 HTML:
正文完