日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/4/5 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面就是微信支付的收款二維碼:

有時候我們僅僅只想要圖片中間的方形二維碼部分,為了提取出中間部分,我們可以使用圖片處理軟件,但圖片處理軟件不利于批處理,且學習也需要一定成本。本文將教你使用 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

總結

以上是生活随笔為你收集整理的python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。