自動打碼指令碼
阿新 • • 發佈:2018-11-03
根據位置,自動打碼
# 注意!需使用python3來運行當前程式碼, 需要安裝requests庫。
# coding:utf-8
"""
工作需要整理的打碼程式碼,這裡修改了一下,讓其功能更強大一點。
"""
import numpy as np
from PIL import Image
import requests
from io import BytesIO
def mosaic_two_position(img):
# 開啟圖片並轉np.array.
if isinstance(img, str):
if img.startswith( "http"):
data = requests.get(img).content
print(data)
img = Image.open(BytesIO(data))
else:
img = Image.open(img)
lottery = np.asarray(img)
"""
既然要打碼,我們肯定要劃定區域,在哪裡打碼?打的碼的塊大小是多少,傳出的圖片在哪, 下面舉一個例子,然後你可以在此基礎上進行修改。
y1, y2, x1, x2 很容易理解,x1,y1是要打碼部分的左上角的x,y值, x2, y2是要打碼部分的右下角的x,y值
example:
下面這個是一個圖片,左上角是(0,0), 右下角是(4,4) 我們現在要擷取(2, 2) 到 (4, 3)的圖片,就是 y1, y2, x1, x2 = 2, 3, 2, 4
(0, 0) ________________
| | --> x
| | |
| | V
| | y
| |
| |
|________________|
"""
y1, y2, x1, x2 = 136, 204, 16, 480
pic_np = lottery[y1:y2, x1:x2]
# pic_np就是截取出來的圖片的np矩陣。
# tab_size是打碼的塊的大小。
tab_size = 10
masaike_tab = pic_np[::tab_size, ::tab_size] # masaike_tab就是打碼後的那一塊圖片。
# 這裡拷貝一份原圖,在拷貝的圖片上進行打碼操作。
lottery_copy = lottery.copy()
# 呼叫打碼函式get_mosaic_pic來進行打碼。
get_mosaic_pic(masaike_tab, lottery_copy, [y1, x1], tab_size)
# 這裡把np.array轉回img格式, 同時對圖片進行儲存(可以不儲存),最後返回的img型別的圖片格式。
a = Image.fromarray(lottery_copy)
a.save("2.png")
return a
def get_mosaic_pic(masaike_pic, lottery_copy, lottery_point, extract_percent):
# 需要的引數
# masaike_pic:切割後的馬賽克圖片
# lottery_copy:copy的原始圖片
# lottery_point:切割的圖片的擷取點
# extract_precent: 抽取的比例
black_h, black_w, _ = masaike_pic.shape
for i in range(black_h):
for j in range(black_w):
lottery_copy[lottery_point[0] + i * extract_percent:
lottery_point[0] + (i+1) * extract_percent,
lottery_point[1] + j * extract_percent:
lottery_point[1] + (j+1) * extract_percent] = masaike_pic[i,j]
return 0
if __name__ == "__main__":
# 隨便找了一個新聞的例子。
img = "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2613110806,4008906767&fm=173&app=25&f=JPG?w=550&h=389&s=A704B04C4052BDCC0EA6949103001089"
mosaic_two_position(img)
全部程式碼見 https://download.csdn.net/download/funnypython/10711445