本文首发于我的个人博客,更多 Python 和 django 开发教程,请访问 追梦人物的博客。

支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码:

有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件,但图片处理软件不利于批处理,且学习也需要一定成本。本文将教你使用 Python 的图像处理库 pillow,轻松批量提取图片中间的方形二维码部分。

提取思路

以微信支付收款码图片为例:

分析图片我们可以看到,二维码位于白色背景中,而白色背景又位于绿色背景上。我们以图片左上角为坐标原点,横向为 x 轴(向右为正方向),纵向为 y 轴(向下为正方向)。我们的目标是需要确定白色背景部分 4 个角的坐标。

从图片左边正中向右横向穿过,当背景色从绿色变为白色时,该点所在位置的横坐标即为左上角和左下角的横坐标,记为 x_left。

同理从图片右边正中向左横向穿过,当背景色从绿色变为白色时,该点所在位置的横坐标即为右上角和右下角的横坐标,记为 x_right。

则白色背景宽度和高度为 h = x_right - x_left。

再从绿色背景转为白色背景时的点向上(或者向下,此处以向上为例)出发,当背景色从白色又变为绿色时,该点所在位置的纵坐标即为左上角和右上角的纵坐标,记为 y_top。

则可以计算出左下角和右下角的纵坐标为 (y_top + h)。

由此,白色背景部分 4 个角的坐标均确定,分别为(从左上角开始顺时针):(x_left, y_top)、(x_right, y_top)、(x_right, y_top+h)、(x_left, y_top+h)。

代码实现

有了上述思路,我们就可以轻松写出 Python 脚本了。代码中给出了详细注释,其基本思路就是导入图片,将其转为一个二维矩阵,矩阵的元素为图片对应像素点的 RGBA 值,然后根据 RGBA 值的变化(即颜色的变化)确定待裁剪边界即可。

import glob
from PIL import Image
​
if __name__ == '__main__':filenames = glob.glob('*.png')  # 微信支付收款码导出为 png 格式filenames.extend(glob.glob('*.jpg'))  # 支付宝收款码导出为 jpg 格式
​for filename in filenames:with Image.open(filename) as img:img.convert('RGBA')pix_data = img.load()
​# 图片左上角为原点,横向为 x 轴(向右为正方向),纵向为 y 轴(向下为正方向)width, height = img.size  # 图片宽和高mid_height = height // 2  # 图片正中纵坐标
​# 确定左边界横坐标:x_left = 0for x in range(width):rgba = pix_data[x, mid_height]if rgba[:3] == (255, 255, 255):x_left = xbreak
​# 确定右边界横坐标:x_right = width - 1  # 右边界for x in range(width - 1, 0, -1):rgba = pix_data[x, mid_height]if rgba[:3] == (255, 255, 255):x_right = xbreak
​h = x_right - x_left  # 白色背景高度(正方形)mid_height_rgba = pix_data[x_left, mid_height]if filename.endswith('png'):# 微信支付往下确定下边界纵坐标,因为当设置了收款金额时,金额显示在上方y_bottom = mid_heightfor y in range(mid_height, height):rgba = pix_data[x_left, y]if rgba != mid_height_rgba:y_bottom = ybreakbox = (x_left, y_bottom - h, x_right, y_bottom)else:# 支付宝往上确定上边界纵坐标,因为当设置了收款金额时,金额显示在下方y_top = mid_heightfor y in range(mid_height, 0, -1):rgba = pix_data[x_left, y]if rgba != mid_height_rgba:y_top = ybreakbox = (x_left, y_top, x_right, y_top + h)crop = img.crop(box) # box 参数为四元组,分别为左上角和右下角的横纵坐标crop.save('./result/{}'.format(filename))

脚本代码同时上传在 GitHub,使用方法请看 README 文档即可。脚本源码仓库:clip-pay-pic

我分享编程感悟与学习资料的公众号,敬请关注:程序员甜甜圈

python 二维码_Python提取支付宝和微信支付二维码相关推荐

  1. python制作微信二维码_Python提取支付宝和微信支付二维码的示例代码

    支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件 ...

  2. python支付程序源码_Python提取支付宝和微信支付二维码的示例代码

    支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件 ...

  3. python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码...

    下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件,但图片处理软件不利于批处理,且学习也需要一定成本.本文将教你使用 Pytho ...

  4. 用qrcode生成微信支付二维码

    项目场景: 用qrcode生成微信支付二维码 问题描述 根据后台返回的路径动态生成微信二维码 在这里我们用的是qrcodejs2,它有官网文档 npm i qrcodejs2 导入: import Q ...

  5. Java利用HttpClient发送请求生成微信支付二维码、查询支付状态

    一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...

  6. 微信支付之01------获取订单微信支付二维码的接口------Java实现

    [ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...

  7. 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态

    微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...

  8. 9月4日科技资讯|微信支付二维码被诉侵权;AI 换脸 App「ZAO」致歉; Android 10 正式发布

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 胡 ...

  9. 大型电商项目3.0实战+支付宝、微信支付项目实战

    须知:视频来源网络,侵权请联系删除! 大型电商项目3.0实战 获取方式 扫描下面二维码回复:A110 支付宝.微信支付项目实战 获取方式 扫描下面二维码回复:A106

最新文章

  1. 可旋转的2K显示器,写代码逼格要到位,免费包邮送到家
  2. java过滤器命名_java--FilenameFilter文件过滤器
  3. C# CheckBox与RadioButton
  4. 【CV】使用 OpenCV 进行图像中的性别预测和年龄检测
  5. Gradle 之语言基础 Groovy
  6. 0x80070659系统策略禁止这个安装 vc_不安装DNS解析服务器下安装Vcenter6.7
  7. 遇到的浏览器问题总结
  8. asp.net 开发注意的几点
  9. Madagascar的自定义浮点型函数--对数函数
  10. 【单目标优化求解】基于matlab竞争学习的粒子群算法求解单目标优化问题【含Matlab源码 1784期】
  11. 分享一个我做的记账系统(网站)
  12. php 获取服务器端口,PHP获取当前服务器详细信息
  13. meltdown论文翻译
  14. 李智慧 - 架构师训练营 第六周
  15. 2020年阿里巴巴校招面试题及答案持续更新中~~~
  16. 纯手工焊接七彩圣诞树
  17. [Kafka] Kafka基本架构
  18. 计算机管理员考核指标库,仓库管理员绩效考核指标.docx
  19. 国产音频压缩格式JLM——JLM音频播放
  20. 云平台车载终端开发项目日志

热门文章

  1. mysql 测试数据的脚本_Mysql脚本 生成测试数据
  2. Win10系统开机任务栏一直转圈怎么解决
  3. 正则总结(Python)
  4. 长春理工大学c语言实验题库,长春理工大学首届趣味心理知识竞赛初赛题库.doc...
  5. c mysql web开发实例教程_Web开发(六)MySql
  6. kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件
  7. python中迭代器有哪些_Python迭代器:什么是Python中的迭代器以及如何使用它?
  8. munin mysql_munin 监控 mysql 2种方法
  9. 判断链表是否相交并找出交点
  10. jmeter修改redis_jmeter如何访问redis服务缓存