python 批量图片局部高斯模糊(图片水印处理)
前言:
????本人菜鳥,不對的地方請指正,勿噴,感激不盡~~
背景:
????公司讓我扒了一些文章,要保持文章結構,圖片正確穿插在文章內,圖片還要保存在本地,以post的形式發送數據,但是后來發現圖片大部分有水印,還要我做圖片水印處理,就有了這篇文章的出現
思路:
????通過對圖片的觀察,發現水印的位置都在右下角的位置,這就方便了我菜鳥干活。
????兩個處理思路:
????1.高斯模糊【不管圖片有沒有水印都會高斯模糊】
????2.圖片疊加【同上】
高斯模糊:
在實現這個思路的時候,發現官方的源碼,bouns參數是傳了也沒有用的,在源碼里面沒有調用這個參數。所以修改了下源碼,在網上也證實了(因為本人菜鳥,不確定)
修改源碼如下:
# encoding=utf-8
# Time ???: 2018/1/19
# Email ??: z2615@163.com
# Software: PyCharm
# Language: Python 3
from PIL import ImageFilter
?
?
class MyGaussianBlur(ImageFilter.Filter):
????name = "GaussianBlur"
????'''用于圖片高斯模糊處理,源碼修改過來'''
?
????def __init__(self, radius=2, bounds=None):
????????self.radius = radius
????????self.bounds = bounds
?
????def filter(self, image):
????????if self.bounds:
????????????clips = image.crop(self.bounds).gaussian_blur(self.radius)
????????????image.paste(clips, self.bounds)
????????????return image
????????else:
????????????return image.gaussian_blur(self.radius)
修改完之后,就方便多了,直接導入使用,測試可以實現局部區域的高斯模糊,但是圖片太多,一篇文章對應一個文件夾,所以還要將所有圖片的路徑當作參數添加到列表,遍歷列表,實現對圖片的修改。
首先,將圖片路徑參數傳入一個方法,方便修改:
# encoding=utf-8
# Time ???: 2018/1/19
# Email ??: z2615@163.com
# Software: PyCharm
# Language: Python 3
from GaussianBlur import MyGaussianBlur
from PIL import Image
?
def gaussian(img):
????'''需要處理的圖片'''
????path_img = img
????'''處理完保存的圖片'''
????re_img = img.split('/')[-1]
????image = Image.open(path_img)
????'''bounds的四個參數,用于高斯模糊,添加水印,165和70是水印大小'''
????x = image.size[0]
????y = image.size[1]
????z = image.size[0] - 165
????l = image.size[1] - 70
????# bound = (z, l, x, y)
????'''高斯模糊'''
????image = image.filter(MyGaussianBlur(radius=5.8, bounds=(z, l, x, y)))
????try:
????????image.save(re_img)
????except:
????????image.save(re_img + '.jpg')
????????print('SUCCESS:', re_img)
# return bound
radius參數:大小根據需要自己調,默認是2,在源碼中可以看到。
bounds參數:元組的形式。不添加這個參數是對整個圖片做模糊處理。
至于except中的.jpg,是有部分圖片沒有后綴,爬取的時候給自己挖的坑,懶得讀取圖片格式,直接就加的jpg
因為只做模糊處理就將部分參數注釋掉了,將文件保存為:test_gaussi.py(名字隨意)
接下來就要讀取圖片了【處理完的圖片會覆蓋掉原來的圖片,另有需要先備份】,代碼如下:
# encoding=utf-8
# Time ???: 2018/1/19
# Email ??: z2615@163.com
# Software: PyCharm
# Language: Python 3
import os
from test_gaussi import gaussian
?
path = os.getcwd() + '\\test_img'
file = os.listdir(path)
img_path_list = []
'''水印圖片'''
# logo = Image.open('./logo.png')
'''獲取當前文件夾下的所有文件夾'''
for x in file:
????img_path = path + "\\" + x
????img_list = os.listdir(img_path)
????for i in img_list:
????????i_path = img_path + '\\' + i
????????img_path_list.append(i_path)
'''獲取文件夾下的所有圖片'''
for img in img_path_list:
????try:
????????gaussian(img)
????except:
????????print('img file is damaged ', img)
????????pass
效果圖:
? ??
多個文件多層目錄 處理之后的效果圖最后:
? ? ?1.因為懶,所以,就這么簡單的寫了,哪位仁兄可以的話,自行修改。當然,寫出來之后分享下^_^~~
? ? ?2.圖片的疊加,需要用到bounds參數,將高斯模糊那部分注釋掉
?
關注阿布的進擊,獲取最新信息
總結
以上是生活随笔為你收集整理的python 批量图片局部高斯模糊(图片水印处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tiktok英国小店注册流程介绍
- 下一篇: 喜欢看漫画的小伙伴就不要错过啦,pyth