python图片批量处理器_用python给图片批量打水印
之前寫(xiě)菲律賓游記,想給自己的照片批量打上水印,首先想到的就是用Python實(shí)現(xiàn)給圖片加文字,然后寫(xiě)個(gè)循環(huán)。
做過(guò)圖像識(shí)別的,應(yīng)該知道OpenCV,其中cv2.putText()函數(shù),就可以實(shí)現(xiàn)在圖片上加文字,非常簡(jiǎn)單。
putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)參數(shù)解釋:
img:需要添加文字的圖片。
text:要加的文字內(nèi)容。
org:文字的位置坐標(biāo)。
fontFace:字體類型(可選擇字體有限,可設(shè)置斜體)。
fontScale:字體大小。
color:字體顏色。
thickness:字體粗細(xì)。
lineType:線型。
bottomLeftOrigin:默認(rèn)值為false,圖片數(shù)據(jù)原點(diǎn)在左上角。
但putText()有個(gè)問(wèn)題,不能添加中文文字,也不能指定字體,而PIL(Python Image Library)可以解決這個(gè)問(wèn)題。
Image模塊
Image是PIL中的核心模塊,實(shí)現(xiàn)對(duì)圖片的基礎(chǔ)操作。
Image中的函數(shù):
Image對(duì)象的屬性:
原始照片:
ImageDraw模塊
ImageDraw模塊,提供對(duì)圖像進(jìn)行繪制的方法。
用draw.text()加水印文字,特別簡(jiǎn)單!
########### 加文字 ###########draw_txt = ImageDraw.Draw(image)txt_size = int(im_size[0]*0.02)# 設(shè)置字體和文字大小chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size)# 直接在照片上寫(xiě)文字draw_txt.text(xy = (im_size[0]//2-txt_size//2,im_size[1]-int(txt_size*1.2)), text = '@化簡(jiǎn)可得', font = chi_font)image.show()Image中的方法
用image.paste()加水印圖,也特別簡(jiǎn)單!
########### 加圖片 ############ 讀入水印圖# 還沒(méi)設(shè)計(jì)過(guò)自己的水印logo,所以隨便在網(wǎng)上找了一個(gè)小太陽(yáng)做示范mark_image = Image.open('./sun.png')# 這個(gè)小太陽(yáng)有點(diǎn)大,壓縮一下mark_image.thumbnail((150, 150)) # 將小太陽(yáng)加在照片左上角的位置position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image)image.show()小結(jié)
新建watermark文件夾,該文件夾下放入Python文件,并新建3個(gè)子文件夾:
1. font文件夾存放字體;
2. input存放原始圖片;
3. output文件夾為空,程序跑完后打好水印的圖片會(huì)輸出到該文件夾。
跑批代碼,下面自取~
########## 批量加水印文字 #########import osimport sysfrom PIL import Image, ImageFont, ImageDrawdef add_watermark(image_file): image = Image.open(image_file) draw_txt = ImageDraw.Draw(image) im_size = image.size print('原始圖片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是橫版 txt_size = int(im_size[0]*0.02) else: txt_size = int(im_size[1]*0.02) print('水印文字尺寸:',txt_size) # 設(shè)置字體和文字大小 chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size) # 直接在照片上寫(xiě)文字 draw_txt.text(xy = (im_size[0]//2-txt_size//2, im_size[1]-int(txt_size*1.2)), text = '@化簡(jiǎn)可得', font = chi_font) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)### 循環(huán)讀入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)########## 批量加水印照片 #########import osimport sysfrom PIL import Image, ImageFont, ImageDraw# 讀入水印圖mark_image = Image.open('./sun.png')def add_watermark(image_file): image = Image.open(image_file) im_size = image.size print('原始圖片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是橫版 mark_size = int(im_size[0]*0.08) else: mark_size = int(im_size[1]*0.08) mark_image.thumbnail((mark_size, mark_size)) print('水印圖片尺寸:',mark_image.size) position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)# 循環(huán)讀入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)當(dāng)然,網(wǎng)上有很多現(xiàn)成的軟件,也能實(shí)現(xiàn)批量打水印。但我還是喜歡用Python,以后想要什么樣的效果,改改參數(shù)就好了~
參考鏈接
總結(jié)
以上是生活随笔為你收集整理的python图片批量处理器_用python给图片批量打水印的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 临商银行属于什么银行 股份制城市商业银行
- 下一篇: 怎么查个人征信记录 去银行办贷款的地方去