Python提取支付宝和微信支付二维码的示例代码

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

有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件,但图片处理软件不利于批处理,且学习也需要一定成本。本文将教你使用 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 = 0
      for x in range(width):
        rgba = pix_data[x, mid_height]
        if rgba[:3] == (255, 255, 255):
          x_left = x
          break

      # 确定右边界横坐标:
      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 = x
          break

      h = x_right - x_left # 白色背景高度(正方形)
      mid_height_rgba = pix_data[x_left, mid_height]
      if filename.endswith('png'):
        # 微信支付往下确定下边界纵坐标,因为当设置了收款金额时,金额显示在上方
        y_bottom = mid_height
        for y in range(mid_height, height):
          rgba = pix_data[x_left, y]
          if rgba != mid_height_rgba:
            y_bottom = y
            break
        box = (x_left, y_bottom - h, x_right, y_bottom)
      else:
        # 支付宝往上确定上边界纵坐标,因为当设置了收款金额时,金额显示在下方
        y_top = mid_height
        for y in range(mid_height, 0, -1):
          rgba = pix_data[x_left, y]
          if rgba != mid_height_rgba:
            y_top = y
            break
        box = (x_left, y_top, x_right, y_top + h)
      crop = img.crop(box) # box 参数为四元组,分别为左上角和右下角的横纵坐标
      crop.save('./result/{}'.format(filename))

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

(0)

相关推荐

  • python采用django框架实现支付宝即时到帐接口

    因工作需要研究了支付宝即时到帐接口,并成功应用到网站上,把过程拿出来分享. 即时到帐只是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款,支付宝收到款项后,马上通知你,并且此笔款项与交易脱离关系,商家可以马上使用. 即时到帐只对企业客户服务,注册成功企业账号以后,申请签约即时到帐产品,大约3-5个工作日后,签约成功,可以马上进入集成产品阶段. 这个是支付宝提供的接口,有asp,c#,java,php四种语言的,每种语言提供GBK和UTF-8两种方案.另带一份支付宝的文档,这份文档我感觉

  • python调用支付宝支付接口流程

    项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公钥 2.应用公钥 3.应用私钥 4.APPID 5.Django 1.11.11 环境 1234均由阿里开放平台生成 如果你不是商户或者你只是想测试,阿里提供了沙箱环境供测试 沙箱环境下的商户账号和用户账号.支付宝app都是沙箱版的,不能用实际账号 这时候我们需要去阿里开放平台去生成一些1234参数 注册网址: https://openhome.alipay.com/pla

  • python实现支付宝转账接口

    由于工作需要使用python开发一个自动转账接口,记录一下开发过程. 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了. 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以使用阿里提供的工具包自动生成. 前期准备工作完成了,接下来是编写代码部分.主要用到了python-alipay-sdk库,使用pip安装即可,如果安装的过程中遇到问题推荐使用Anaconda(crypto这个库安装了我好久没成功,最后换成Anaconda环境了) from datetime i

  • python实现支付宝当面付(扫码支付)功能

    本文实例为大家分享了python实现支付宝当面付示的具体代码,供大家参考,具体内容如下 一.配置信息准备 登录蚂蚁金服开放平台:https://open.alipay.com/platform/home.htm 开发资料阅读:https://docs.open.alipay.com/194/106078 创建好应用,配置好密钥等信息后,就可以开发了. 二.开发支付宝支付工具类 1:相关配置信息 # ========支付相关配置信息=========== ALIPAY_INPUT_CHARSET

  • python支付宝支付示例详解

    本文实例为大家分享了python支付宝支付示例代码,供大家参考,具体内容如下 项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 一.注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab=info 二.设置应用公钥 三.代码实现 1.项目结构: 2.把生成的     应用私钥     和    支付宝的公钥       放入keys目录下: 注意: 支付宝公钥 商户私钥 --- 配置商户应用私钥--copy到key目录下 --

  • python实现银联支付和支付宝支付接入

    本文实例为大家分享了python银联支付和支付宝支付接入的具体代码,供大家参考,具体内容如下 前置条件:需要安装Python的OpenSSL模块,我使用的版本是16.1.0,可以使用pip install pyopenssl来安装 一.支付宝支付 1. 使用RSA公钥加密系统进行签名和签名验证,需要自己生成一个RSA私钥和对应的一个RSA公钥(在Linux下可以使用ssh-keygen命令来生成),公钥需要上传至支付宝,供支付宝对开发者发送的请求做签名验证使用:而同时支付宝会提供一个RSA公钥给

  • Python+PIL实现支付宝AR红包

    本文实例为大家分享了Python+PIL处理支付宝AR红包的具体代码,供大家参考,具体内容如下 思路比较简单: 1.对图片进行锐化处理: 2.设(r_h, g_h, b_h)为支付宝遮罩黑条的RGB值,以此为中心,查找半径为Diff_radius的范围内所有的色值: 3.对每一行符合步骤2的像素点个数进行计数,若该数值超过某个临界值(如:图片宽度的一半),将其所在行替换为上一行非遮罩数据: 4.对处理后的图片高斯滤镜. 以下是python代码: from PIL import Image,Ima

  • Python提取支付宝和微信支付二维码的示例代码

    支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件,但图片处理软件不利于批处理,且学习也需要一定成本.本文将教你使用 Python 的图像处理库 pillow,轻松批量提取图片中间的方形二维码部分. 提取思路 以微信支付收款码图片为例: 分析图片我们可以看到,二维码位于白色背景中,而白色背景又位于绿色背景上.我们以图片左上角为坐标原点,横向为 x

  • Java生成中间logo的二维码的示例代码

    最近有负责微信开发,对于微信开发的项目,肯定少不了二维码啦,正好有个这样的需求,这对不同的商品生成一个二维码,扫码即刻下单.博主就弄了一个二维码生成的工具类. 弄出来之后,产品经理又说了,中间放上公司的logo是不是好一点?加上吧, 加上公司logo之后,产品经理想了想,每个商品都有个二维码,销售人员有很多个商品二维码,群发给用户,在qq群上,微信群上,怎么知道哪个二维码对应哪个商品的呢?于是决定要加上商品名称.最后商品二维码就成了下面这个模样了(当然啦,这里面的logo并不是博主现职公司的).

  • three.js 制作动态二维码的示例代码

    今天郭先生说一下用canvas解析图片流,然后制作一个动态二维码的小案例,话不多说先上图,这是郭先生的微信二维码哦! 1. 解析图片流 canvas = document.createElement('canvas');//创建canvas画布 content = canvas.getContext('2d');//获取画布的上下文 canvas.width = 310;//设置尺寸 canvas.height = 310; img = new Image();//创建一张图片 img.src

  • js生成二维码的示例代码

    前段时间项目中需要开发扫描二维码查看信息的功能,在网上查了一些资料,把用过的方法进行总结需要导入一个qrcode的js 插件. 插件链接: qrcode.js下载地址,点击即可下载 一.一个简单的示例 如下:(仅供参考) <%-- Created by IntelliJ IDEA. User: ASUS author:xumz Date: 2021/2/27 Time: 10:33 搬运请备注 To change this template use File | Settings | File

  • PHP实现生成二维码的示例代码

    目录 前言 1.目前有2种类型的二维码 2.用户扫描带场景值二维码时,可能推送以下两种事件 3.创建二维码ticket 4.临时二维码请求说明 5.永久二维码请求说明 6.临时二维码和永久二维码生成实现的代码 前言 为了满足用户渠道推广分析和用户账号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 1.目前有2种类型的二维码 临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000

  • Android ZxingPlus精简的二维码框架示例代码

    这个二维码框架不仅使用的代码少,而且可以生成带图片的二维码,而且二维码扫描界面也是先做好的,也比较好看.我们所需要做的就是在扫描二维码后得到的数据对其进行操作. 使用方法 添加依赖 compile 'com.singleshu:ZxingPlus:1.1.4' 代码 public class MainActivity extends AppCompatActivity { TextView test; ImageView imageView; @Override protected void o

  • C#/VB.NET 在Word中添加条码、二维码的示例代码

    本文介绍如何通过C# 和VB.NET代码实现在Word文档中添加条码和二维码.代码中将分为在Word正文段落中.页眉页脚中等情况来添加. 使用工具: Free Spire.Office for .NET (免费版) 工具简介: 这是Spire所有.NET平台下免费产品的集合包,包含Spire.Barcode.dll.Spire.DataExport.dll.Spire.Pdf.dll.Spire.Doc.dll.Spire.DocViewer.Forms.dll .Spire.PdfViewer

  • java使用jar包生成二维码的示例代码

    使用java进行二维码的生成与读取使用到了谷歌的zxing.jar 第一步 导入,maven依赖或者下载指定jar包 <!-- https://mvnrepository.com/artifact/com.google.zxing/javase --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version

  • 微信扫描二维码登录网站代码示例

    请先下载  snoopy 类 复制代码 代码如下: <?php /**  *  微信公众平台PHP-SDK  *  Wechatauth为非官方微信登陆API  *  用户通过扫描网页提供的二维码实现登陆信息获取  *  主要实现如下功能:  *  get_login_code() 获取登陆授权码, 通过授权码才能获取二维码  *  get_code_image($code='') 将上面获取的授权码转换为图片二维码  *  verify_code() 鉴定是否登陆成功,返回200为最终授权成功

  • 微信小程序生成二维码的示例代码

    好久没有写文章了,最近公司要做海报分享的活动,需要在小程序中生成扫了之后可以跳转普通网页的二维码,就在github上面找了一下,确实找到了一个兼容兼容性比较不错的,给打加分享一下. 中间尝试了不少,有些在Android上上城会出现问题,亲测这个有效,兼容比较好,已经应用到我们项目中了. 由于在使用便利性方面考虑,我对这个进行了一定的改动,新增了二维码白边功能和支持回调函数直接获取临时文件的功能,希望能够帮助到大家. github地址 weapp-qrcode 点击查看(欢迎star),其中附有源

随机推荐