最近客户遇到个需求,需要将今日头条的图片下载下来,下载后发现图片带水印,如图所示微头条里面的图片
要将右下角下面的图片模糊化(马赛克处理)。由于里面的图片大小不一,如果使用固定像素划分区域的话会产生很大误差,现在要实现一个所有图片同用的方法,仔细观察今日头条的所有图片都有一个共同点,那就是水印都在图片的右下角处,那就好办了 ,我直接设置比例不就行了吗,进行微调下就可以通用了。经过多方测试,今日头条通用的去水印的比例如下,看完整代码
from PIL import Image, ImageFilter
import requests
from io import BytesIO
def apply_mosaic(image_url,output_image, rectangle_width=0.22563, rectangle_height=0.0615, bottom_distance=0.015864, right_distance=0.0135379):
# 打开原始图片
image_data = requests.get(image_url).content
image = Image.open(BytesIO(image_data))
# 计算矩形区域位置
x1 = image.width - int(right_distance*image.width) - int(rectangle_width*image.width)
y1 = image.height - int(bottom_distance*image.height) - int(rectangle_height*image.height)
x2 = image.width - int(right_distance*image.width)
y2 = image.height - int(bottom_distance*image.height)
# 获取矩形区域内的像素值
region = image.crop((x1, y1, x2, y2))
try:
# 缩放矩形区域为马赛克效果
region = region.filter(ImageFilter.GaussianBlur(radius=20))
# 将马赛克矩形区域粘贴回原图
image.paste(region, (x1, y1, x2, y2))
# 保存处理后的图片
image.save(output_image,'PNG')
except:
region = region.convert('RGB')
region = region.filter(ImageFilter.GaussianBlur(radius=20))
# 将马赛克矩形区域粘贴回原图
image.paste(region, (x1, y1, x2, y2))
# 保存处理后的图片
image.save(output_image, 'PNG')
output_image = r"C:\Users\14499\Desktop\350监控\output.png" # 输出图片路径
apply_mosaic('https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/30ad130822c84878974bb23c1b6f23db~tplv-tt-origin-asy2:5aS05p2hQOWThOWKqOS4gOWPsg==.image?_iz=58558&from=article.pc_detail&x-expires=1695389812&x-signature=jL7NB%2BXI8l5av7PdrYjlWA5kMLg%3D', output_image)
先看下这张图片的效果,
水印去除成功!再换成别的大小的图片也去除成功。
如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!


点击此处登录后即可评论