PHP掃描圖片轉點陣 二維碼轉點陣

zmxyzmxy1234 發表於 2020-08-09
PHP
    /**
     * 圖片轉點陣(黑白)
     * @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;
}

列印出來效果:
PHP掃描圖片轉點陣 二維碼轉點陣
轉成HTML:
PHP掃描圖片轉點陣 二維碼轉點陣

本作品採用《CC 協議》,轉載必須註明作者和本文連結