pillow 為圖片添加水印

2022-08-29 15:30 更新

為圖片添加水印能夠在一定程度上避免其他人濫用您的圖片,這是保護圖片版權(quán)的一種有效方式。因此,當您在微博、或者博客等一些公眾平臺分享圖片的時候,建議您為自己的圖片添加一個水印,來證明這張圖片屬于您。

添加水印的方式的有很多種,比如通過一些圖像處理軟件,或者手機美圖軟件都可以實現(xiàn)添加水印的操作,但是這種操作比較復(fù)雜,甚至有些軟件還不是免費的。

Pillow 庫提供了添加水印的方法,操作簡單,易學(xué)、易用。下面我們講解如何使用 PIilow 給圖片添加水印。


我們知道,水印是附著在原圖片上一段文字信息,因此添加水印的過程中會涉及兩個問題:

  • 第一、如何使文字信息附著在圖片上;
  • 第二、如何繪制文字信息。

只要解決了這兩個問題就可以成功添加水印。Pillow 提供的ImageDrawImageFont模塊成功解決了上述問題。


ImageDraw

PIL.ImageDraw 模塊提供了一系列的繪圖方法,通過該模塊可以創(chuàng)建一個新的圖形,或者在現(xiàn)有的圖像上再繪制一個圖形,從而起到對原圖注釋和修飾的作用。

下面創(chuàng)建一個 ImageDraw 對象,并對該對象的使用方法做簡單介紹:

draw = ImageDraw.Draw(im)

上述方法會返回一個 ImageDraw 對象,參數(shù) im 表示 Image 對象。這里我們可以把 Image 對象理解成畫布,通過調(diào)用 ImageDraw 對象的一些方法,實現(xiàn)了在畫布上繪制出新的圖形目的。ImageDraw 對象的常用方法如下表所示:

ImageDraw常用方法
方法 說明
text 在圖像上繪制文字
line 繪制直線、線段
eclipse 繪制橢圓形
rectangle 繪制矩形
polygon 繪制多邊形

表格中第一個方法 ?text()? 需要與 ImageFont 模塊一起使用,在下面會做詳細介紹。


繪制矩形圖的語法格式如下:

draw.rectangle(xy, fill=None, outline=None)

參數(shù)說明如下:

  • xy:元組參數(shù)值,以圖像的左上角為坐標原點,表示矩形圖的位置、圖形大小的坐標序列,形如 ?((x1,y1,x2,y2))?;
  • fill:矩形圖的背景填充色;
  • outline:矩形圖的邊框線條顏色。


下面看一組簡單的示例:

from PIL import Image,ImageDraw
#創(chuàng)建 Image 對象,當做背景圖
im = Image.new('RGB',(200,200),color='gray')
#創(chuàng)建 ImageDraw 對象
draw = ImageDraw.Draw(im)
#以左上角為原點,繪制矩形。元組坐標序列表示矩形的位置、大??;fill設(shè)置填充色為紅色,outline設(shè)置邊框線為黑色
draw.rectangle((50,100,100,150),fill=(255,0,0),outline=(0,0,0))
#查看原圖片
im.show()
#保存圖片
im.save("../添加矩形圖.png")

圖形顯示結(jié)果如下:

pillow圖像處理教程

圖1:繪制紅色矩形


ImageFont

PIL.ImagreFont 模塊通過加載不同格式的字體文件,從而在圖像上繪制出不同類型的文字,比如 TrueType OpenType 類型的字體。

創(chuàng)建字體對象的語法格式如下:

font = ImageFont.truetype(font='字體文件路徑', size=字體大小)

如果想要在圖片上添加文本,還需要使用? ImageDraw.text() ?方法,語法格式如下:

d.text((x,y), "text", font, fill)

參數(shù)說明如下:

  • (x,y):圖像左上角為坐標原點,?(x,y) ?表示添加文本的起始坐標位置;
  • text:字符串格式,要添加的文本內(nèi)容;
  • font:ImageFont 對象;
  • fill:文本填充顏色。

下面看一組使用示例,如下所示:

from PIL import Image,ImageFont,ImageDraw
#打開圖片,返回 Image對象
im = Image.open("./大熊貓.png")
#創(chuàng)建畫布對象
draw = ImageDraw.Draw(im)
#加載計算機本地字體文件(這里加載的是微軟雅黑)
font=ImageFont.truetype('C:/Windows/Fonts/msyh.ttc',size=36)
#在原圖像上添加文本
draw.text(xy=(80,50),text='W3cschool',fill=(255,0,0),font=font)
im.show()
im.save("./已處理.png")

圖像顯示結(jié)果如下:


圖2:添加文本


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號