需求
客户商品管理系统,每个商品需要生成一个二维码以便手机直接扫描查看商品信息,而对应的,二维码下方必须有一串唯一码,它们存在于一张图片上,以方便用户另存打印贴纸(不相干细节省略)。
分析
将链接生成二维码不难,直接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库了。