c++批量重命名_手把手教你用Python批量给图片添加水印 | 知了干货分享
我們在網上瀏覽一些文章的時候,經常會發現文章中會有一些圖片,上面會有一些標識,而這些標識就是我們經常說的水印了。很多時候,我們需要給圖片加上一些修飾,好讓別人能直觀的認識到這個圖片的出處以及來源,同時還能有效防止別人盜圖。
實現對圖片的批量添加水印,可以告別繁瑣的工作,增加工作效率。而對于添加水印和重命名,我們用到的模塊有pillow,os,開發工具 sublime text 3。
一、單張圖片添加水印文字
下載并導入所需模塊
pip install pillow #下載pillow模塊from PIL import Image #導入,下同from PIL import ImageDrawfrom PIL import ImageFont打開圖片文件
im=Image.open('12.jpg')
構建畫圖對象
draw=ImageDraw.Draw(im)導入字體文件
ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40)#導入字體文件修改水印顏色
draw.ink = 0 + 0 * 256 + 255 * 256 * 256 # 顏色
添加水印
draw.text([200,200],text,'red',font=Font) # 文字加載到圖片上
保存文件
im.save('12.png','png') #保存圖片
完整代碼如下:
from PIL import Imagefrom PIL import ImageDraw from PIL import ImageFontim=Image.open('12.jpg')draw=ImageDraw.Draw(im) text = '我愛你'Font=ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40)#導入字體文件draw.ink = 0 + 0 * 256 + 255 * 256 * 256 # 顏色draw.text([200,200],text,'red',font=Font) # 文字加載到圖片上im.save('12.png','png') #保存圖片im.show() #顯示圖片完成之后的效果是這樣的:
可以看出我愛你三個打字就被刻在了上面。
二、單張圖片添加水印圖片
這樣就完成了圖片的首次文字水印,當然你也可以弄一個圖片水印,只需加一層圖層即可,比如我要將劉亦菲加在這個滿是英文的圖片上,就可以這樣做:
導入相關模塊
from PIL import Image
導入原圖片和水印圖片并得出原圖片大小
im = Image.open('12.jpg') # 打開圖片im1= Image.open('11.jpg') # 打開水印圖片w,h= im.size
重新設置水印圖片大小,保證圖片不會與原圖重疊并溢出
mm=im1.resize((80,40),Image.ANTIALIAS) #重新設置水印圖片大小
設置水印圖片位置
position = (w-100,h-100) # 默認設定水印位置為右下角
新建圖層
layer = Image.new('RGB', im.size) # 新建一個圖層
將水印圖片添加到圖層上
layer.paste(mm, position) # 將水印圖片添加到圖層上
合并水印和原圖片為一張圖
im2= Image.composite(layer, im, layer)#合并圖片
保存圖片
im2.save('21.jpg') #保存圖片完整代碼如下:
from PIL import Imageim = Image.open('12.jpg') # 打開圖片im1= Image.open('11.jpg') # 打開水印圖片w,h= im.sizemm=im1.resize((80,40),Image.ANTIALIAS) #重新設置水印圖片大小position = (w-100,h-100) # 默認設定水印位置為右下角layer = Image.new('RGBA', im.size) # 新建一個圖層layer.paste(mm, position) # 將水印圖片添加到圖層上im2= Image.composite(layer, im, layer)#合并圖片im2.save('21.jpg') #保存圖片這樣即可完成水印圖片的填充。效果圖如下:
三、批量給圖片添加水印文字但是我們要做的是批量給圖片添加水印效果啊,所以現在我們需要用到某些系統模塊,比如os。既然是批量,那我們肯定得先獲取到某個目錄所有圖片文件了,我們可以這樣做:1.遍歷指定目錄所有圖片文件def search(path): for x in os.listdir(path): #遍歷目錄下的所有文件和文件夾 if os.path.isfile(x) and x.endswith('.jpg'): #判斷文件x是否文件且它的后綴是否是.jpg yield x #生成器for y in search(r'C:\Users\Administrator\Desktop'): ger(y) #桌面上所有的JPG文件獲取到了之后了我們就可以逐個讀取到圖片信息啦。2.添加水印接下來我們就可以寫代碼了,首先還是先寫添加文字水印,如何批量添加了,那肯定是把這些逐個讀取到的圖片一個個打上文字水印啦,不過記得加一個睡眠時間,因為圖片一下子全部讀取保存會很耗費內存的,那么下面就跟小編一起來打水印吧。還是原來的套路,這里我就不細說了,免得大家說我像老太婆的裹腳布一樣,直奔主題,上代碼:from time import sleepfrom PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFonta=0 #初始化圖片編號def search(path): for x in os.listdir(path): #遍歷目錄下的所有文件和文件夾 if os.path.isfile(x) and x.endswith('.jpg'): #判斷文件x是否文件且它的后綴是否是.jpg yield x #生成器def ger(x): font = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40) #添加字體文件和字體大小 im=Image.open(x) draw = ImageDraw.Draw(im) #構建畫圖對象 draw.text((im.size[0]-330,im.size[1]-85), '我愛你', fill='blue',font=font)#添加水印 dir = r'C:\Users\Administrator\Desktop\tp' #保存位置 filename = os.path.join(dir,str(a)+'.jpg') #保存文件名 sleep(1) #睡眠時間 im.save(filename) #保存文件for y in search(r'C:\Users\Administrator\Desktop'): a=a+1 #每次開始保存文件,a就加一 ger(y) #添加水印并保存圖片最后結果就如下圖所示:四、批量給圖片添加水印圖片可以看出已經對桌面上所有的JPG文件添加了水印,水印文字為‘我愛你’,批量添加水印圖片也是差不多的套路,只需把添加單個水印圖片代碼稍加改動即可,下面請看:from time import sleepfrom PIL import Imageimport datetimefrom PIL import ImageDrawfrom PIL import ImageFonta=0def search(path): for x in os.listdir(path): if os.path.isfile(x) and x.endswith('.jpg'): yield xdef ger(x): im=Image.open(x) w,h= im.size im1= Image.open(r'C:\Users\Administrator\Desktop\11.jpg') #打開水印圖片 mm=im1.resize((80,40),Image.ANTIALIAS) #重新設置水印圖片大小 position = (w-100,h-100) # 默認設定水印位置為右下角 layer = Image.new('RGBA', im.size) # 新建一個圖層 layer.paste(mm, position) # 將水印圖片添加到圖層上 im2= Image.composite(layer, im, layer)#合并圖片 dir = r'C:\Users\Administrator\Desktop\tp' filename = os.path.join(dir,str(a)+'.png') #要保存的文件名 sleep(1) #睡眠時間 im2.save(filename) #保存文件for y in search(r'C:\Users\Administrator\Desktop'): a=a+1 ger(y)完成后效果如圖:可以看出,我們桌面上的每一張圖片基本上就已經能夠打上水印了,是不是很簡單了。五、批量文件名重命名在這里,小編還要給大家另外傳授一個絕招,那就是批量文件改名了,也是相當的簡單的說:#批量重命名圖片文件from PIL import Imageimport globimport osimport randomaa=input('路徑:') #輸入要改名的文件的目錄os.chdir(r'%s'%aa) #更改訪問路徑os.getcwd() #切換到當前目錄ab=glob.glob('*.jpg') #搜索所有的jpg文件qq=input('caoxun:') #輸入存儲新文件的目錄for x in range(len(ab)): os.rename(ab[x],os.path.join(qq,str(x)+'.bmp')) #重命名運行后效果如圖:如果你想平時用于修改文件名和加水印這些繁瑣操作的話,也可以將小編寫的這些功能封裝到一個類模型里,然后做一個界面出來以方便別人使用,在這里由于時間關系小編就不寫了。總的來說該項目并沒有多大的難點,唯一要注意的就是只有png圖片在RGBA模式下設置alpha值才可以進行透明度設置,所以我并沒有用這個雞肋的功能,最后祝大家能學以致用,學有所成。
需要本文完整所有的代碼,請關注本公眾號,然后發送“2059”即可獲取本文中所有代碼!
- End -Python爬蟲高級之JS滲透登錄新浪微博 | 知了獨家研究WTF?能把Python代碼寫得這么優雅的都是神仙程序員吧!Python協程還不理解?請收下這份超詳細的異步編程教程!還沒學會來找我!徐大sao吃了哪些好吃的?用Python生成詞云,一目了然!性能是Flask的3倍!比PHP7還快!這個Python框架你值得擁有!(附使用教程)總結
以上是生活随笔為你收集整理的c++批量重命名_手把手教你用Python批量给图片添加水印 | 知了干货分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab中数据拟合函数lsqcurv
- 下一篇: Matlab中newff函数使用方法和搭