乐趣区

关于php: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;
}

打印进去成果:

转成 HTML:

退出移动版