HP QR Code 二维码源码分析
HP QR Code下载和使用方法如下
<a href="http://newmiracle.cn/?p=85">http://newmiracle.cn/?p=85</a>
找到Common/phpqrcode.php 这个文件
找到QRimage类的 image函数 生成图片的核心逻辑就在这个函数
<pre>
/**
* @param $frame 二进制信息的数组
* @param int $pixelPerPoint 每个二进制数字生成的大小
* @param int $outerFrame 二维码外间距的白色
* @return resource
*/
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4)
{
$h = count($frame);
$w = strlen($frame[0]);
$imgW = $w + 2*$outerFrame;
$imgH = $h + 2*$outerFrame;
$base_image =ImageCreate($imgW, $imgH);
$col[0] = ImageColorAllocate($base_image,255,255,255);
$col[1] = ImageColorAllocate($base_image,0,0,0);
$col[2] = ImageColorAllocate($base_image,255,0,0);
imagefill($base_image, 0, 0, $col[0]);
//循环遍历二进制信息 1代表黑色 这个地方就可以自定义颜色
for($y=0; $y<$h; $y++) {
for($x=0; $x<$w; $x++) {
if ($frame[$y][$x] == '1') {
ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[2]);
}
}
}
$target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);
//重新给图片设置大小
ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);
ImageDestroy($base_image);
return $target_image;
}
</pre>
下面个版本是自定义图片哦
private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4)
{
$h = count($frame);
$w = strlen($frame[0]);
$imgW = $w*5 + 2*$outerFrame;
$imgH = $h*5 + 2*$outerFrame;
$base_image =ImageCreate($imgW, $imgH);
$col[0] = ImageColorAllocate($base_image,255,255,255);
$col[1] = ImageColorAllocate($base_image,0,0,0);
$col[2] = ImageColorAllocate($base_image,255,0,0);
imagefill($base_image, 0, 0, $col[0]);
//循环遍历二进制信息 1代表黑色 这个地方就可以自定义图片 左上 右上 左下因为要保持纯色 不能替换图片
$image1 = imagecreatefromjpeg(__DIR__.'/huaduo.jpg');
$image2 = imagecreatefromjpeg(__DIR__.'/huaduo1.jpg');
for($y=0; $y<$h; $y++) {
for($x=0; $x<$w; $x++) {
if ($frame[$y][$x] == '1') {
if($x>7 && $x<33){
imagecopymerge($base_image, $image1, $x*5+$outerFrame, $y*5+$outerFrame, 0, 0, 5, 5, 100);
}else if($y>7 && $y<33){
imagecopymerge($base_image, $image1, $x*5+$outerFrame, $y*5+$outerFrame, 0, 0, 5, 5, 100);
}else if($x>30 && $y>30){
imagecopymerge($base_image, $image1, $x*5+$outerFrame, $y*5+$outerFrame, 0, 0, 5, 5, 100);
}else{
imagecopymerge($base_image, $image2, $x*5+$outerFrame, $y*5+$outerFrame, 0, 0, 5, 5, 100);
}
// ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]);
}
}
}
return $base_image;
}
如果遇到什么不懂的地方直接关注公众号留言(本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。)
作者:newmiracle
出处:https://www.cnblogs.com/newmiracle/