需求
客户商品管理系统,每个商品需要生成一个二维码以便手机直接扫描查看商品信息,而对应的,二维码下方必须有一串唯一码,它们存在于一张图片上,以方便用户另存打印贴纸(不相干细节省略)。
分析
将链接生成二维码不难,直接qrcode
即可解决。
剩下的对应唯一码,例如:WY998823, 按特定算法生成码后,需要与二维码图片重新合成为一张图片,PHP中的图片处理,不用说,首当其冲GD库。
过程
由于代码涉及较多,就不直接贴出来了。此处简述用到的方法及流程,供大家参考。
-
打开图片
将 Qrcode 生成的二维码图片按照 路径 打开,获取相关信息。 宽度类型等信息可以用 getimagesize() 获取 打开图片:$image = imagecreatefrompng($file); 如果事先不知道原图片格式的话,可以采用下面方法: $info = getimagesize($file); // 获取图片信息 $type = image_type_to_extension($info[2],false); // 获取图片扩展名 $fun = "imagecreatefrom{$type}"; // 构建处理图片方法名-关键是这里 $image = $fun($file); // 调用方法处理
-
处理图片
将字体文件准备好,设置好字体的颜色,然后创建文字: $font = ROOT_PATH.'public/static/fonts/msyh.ttf'; // 字体文件 $color = imagecolorallocate($image,0,0,0); // 文字颜色 imagettftext($image, 20, 0, 80, 292, $color, $font, $code); // 创建文字 这里我直接写在了二维码图片的下边框空白处
-
输出图片
到这里对于原图片的处理基本就结束了。 使用 header() 和 imagepng() 方法输出最终图片: header("Content-Type:image/png"); imagepng($image); 如果图片格式不确定,参照上面第一步中给出的例子处理,这里我没有保存到本地。
-
销毁图片
销毁生成的图片资源和Qrcode生成的图片文件。 header('Content-Type:image/png'); imagepng($image); imagedestroy($image);if (is_file($file)) unlink($file);
效果
生成后效果如图(信息考虑,二维码图像已打码)
总结
图像能否处理和处理得好,就看如何使用GD库了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。