python 批量图片局部高斯模糊(图片水印处理)
前言:
????本人菜鳥,不對(duì)的地方請(qǐng)指正,勿噴,感激不盡~~
背景:
????公司讓我扒了一些文章,要保持文章結(jié)構(gòu),圖片正確穿插在文章內(nèi),圖片還要保存在本地,以post的形式發(fā)送數(shù)據(jù),但是后來發(fā)現(xiàn)圖片大部分有水印,還要我做圖片水印處理,就有了這篇文章的出現(xiàn)
思路:
????通過對(duì)圖片的觀察,發(fā)現(xiàn)水印的位置都在右下角的位置,這就方便了我菜鳥干活。
????兩個(gè)處理思路:
????1.高斯模糊【不管圖片有沒有水印都會(huì)高斯模糊】
????2.圖片疊加【同上】
高斯模糊:
在實(shí)現(xiàn)這個(gè)思路的時(shí)候,發(fā)現(xiàn)官方的源碼,bouns參數(shù)是傳了也沒有用的,在源碼里面沒有調(diào)用這個(gè)參數(shù)。所以修改了下源碼,在網(wǎng)上也證實(shí)了(因?yàn)楸救瞬锁B,不確定)
修改源碼如下:
# 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)
修改完之后,就方便多了,直接導(dǎo)入使用,測(cè)試可以實(shí)現(xiàn)局部區(qū)域的高斯模糊,但是圖片太多,一篇文章對(duì)應(yīng)一個(gè)文件夾,所以還要將所有圖片的路徑當(dāng)作參數(shù)添加到列表,遍歷列表,實(shí)現(xiàn)對(duì)圖片的修改。
首先,將圖片路徑參數(shù)傳入一個(gè)方法,方便修改:
# 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的四個(gè)參數(shù),用于高斯模糊,添加水印,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參數(shù):大小根據(jù)需要自己調(diào),默認(rèn)是2,在源碼中可以看到。
bounds參數(shù):元組的形式。不添加這個(gè)參數(shù)是對(duì)整個(gè)圖片做模糊處理。
至于except中的.jpg,是有部分圖片沒有后綴,爬取的時(shí)候給自己挖的坑,懶得讀取圖片格式,直接就加的jpg
因?yàn)橹蛔瞿:幚砭蛯⒉糠謪?shù)注釋掉了,將文件保存為:test_gaussi.py(名字隨意)
接下來就要讀取圖片了【處理完的圖片會(huì)覆蓋掉原來的圖片,另有需要先備份】,代碼如下:
# 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')
'''獲取當(dāng)前文件夾下的所有文件夾'''
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
效果圖:
? ??
多個(gè)文件多層目錄 處理之后的效果圖最后:
? ? ?1.因?yàn)閼?#xff0c;所以,就這么簡單的寫了,哪位仁兄可以的話,自行修改。當(dāng)然,寫出來之后分享下^_^~~
? ? ?2.圖片的疊加,需要用到bounds參數(shù),將高斯模糊那部分注釋掉
?
關(guān)注阿布的進(jìn)擊,獲取最新信息
總結(jié)
以上是生活随笔為你收集整理的python 批量图片局部高斯模糊(图片水印处理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tiktok英国小店注册流程介绍
- 下一篇: 喜欢看漫画的小伙伴就不要错过啦,pyth