需求

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

分析

将链接生成二维码不难,直接qrcode即可解决。

剩下的对应唯一码,例如:WY998823, 按特定算法生成码后,需要与二维码图片重新合成为一张图片,PHP中的图片处理,不用说,首当其冲GD库。

过程

由于代码涉及较多,就不直接贴出来了。此处简述用到的方法及流程,供大家参考。

  1. 打开图片

    将 Qrcode 生成的二维码图片按照 路径 打开,获取相关信息。
    
    宽度类型等信息可以用 getimagesize() 获取
    
    打开图片:$image = imagecreatefrompng($file);
    
    如果事先不知道原图片格式的话,可以采用下面方法:
    
    $info = getimagesize($file); // 获取图片信息
    $type = image_type_to_extension($info[2],false); // 获取图片扩展名
    $fun  = "imagecreatefrom{$type}"; // 构建处理图片方法名-关键是这里
    $image = $fun($file); // 调用方法处理
    
  2. 处理图片

    将字体文件准备好,设置好字体的颜色,然后创建文字:
    
    $font = ROOT_PATH.'public/static/fonts/msyh.ttf'; // 字体文件
    $color = imagecolorallocate($image,0,0,0); // 文字颜色
    imagettftext($image, 20, 0, 80, 292, $color, $font, $code); // 创建文字
    
    这里我直接写在了二维码图片的下边框空白处
    
  3. 输出图片

    到这里对于原图片的处理基本就结束了。
    
    使用 header() 和 imagepng() 方法输出最终图片:
    
    header("Content-Type:image/png"); 
    imagepng($image);
    
    如果图片格式不确定,参照上面第一步中给出的例子处理,这里我没有保存到本地。
    
  4. 销毁图片

    销毁生成的图片资源和Qrcode生成的图片文件。
    
    header('Content-Type:image/png');
    imagepng($image);
    imagedestroy($image);if (is_file($file)) unlink($file);
    
    

效果

生成后效果如图(信息考虑,二维码图像已打码)

clipboard.png

总结

图像能否处理和处理得好,就看如何使用GD库了。


青叶
1.5k 声望112 粉丝

一个phper