根据位置,自动打码
# 注意!需使用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