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;

}

 

posted @ 2019-11-12 14:29  newmiracle宇宙  阅读(293)  评论(0编辑  收藏  举报