python給圖片加水印詳解
技術標籤:python
文章目錄
1、開啟原圖片,轉換
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
# 開啟圖片
img = Image.open('./小說閱讀器.png').convert('RGBA')
convert()
詳解
返回此影象的轉換後的副本。 對於“ P”模式,此方法可通過調色盤轉換畫素。 如果省略模式,則選擇一種模式,以便無需調色盤即可表示影象和調色盤中的所有資訊。
當前版本支援“ L”,“ RGB”和“ CMYK”之間的所有可能的轉換。 矩陣引數僅支援“ L”和“ RGB”。
在將彩色影象轉換為灰度(模式“ L”)時,該庫使用ITU-R 601-2亮度轉換:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
將灰度(“ L”)或“ RGB”影象轉換為雙色(模式“ 1”)影象的預設方法是使用Floyd-Steinberg抖動來近似原始影象的亮度水平。 如果dither為NONE,則所有大於128的值均設定為255(白色),所有其他值均設定為0(黑色)。 要使用其他閾值,請使用〜PIL.Image.Image.point方法。
當不使用矩陣引數從“ RGBA”轉換為“ P”時,會將操作傳遞給〜PIL.Image.Image.quantize,並且抖動和調色盤將被忽略。
引數:
mode
–請求的模式。 參見:概念模式。
matrix
–可選的轉換矩陣。 如果給定,則應為包含浮點值的4元組或12元組。
dither
–抖動方法,從模式“ RGB”轉換為“ P”或從“ RGB”或“ L”轉換為“ 1”時使用。 可用的方法為NONE或FLOYDSTEINBERG(預設)。 請注意,當提供** matrix **時,不使用該選項。
palette
–從模式“ RGB”轉換為“ P”時要使用的調色盤。 可用的調色盤是WEB或ADAPTIVE。
colors
–用於“自適應”調色盤的顏色數。 預設值為256。
返回值:
一個:py:class:〜PIL.Image.Image
模式如下:
1 | 1位畫素,黑白,每位元組一個畫素儲存 |
L | 8位畫素,黑白 |
P | 8位畫素,使用調色盤對映到任何其他模式 |
RGB | 3*8位畫素,真彩色 |
RGBA | 4*8位畫素,帶透明度 |
CMYK | 4*8位畫素,分色 |
YCbCr | 3*8位畫素,彩色視訊格式 |
I | 32位有符號整數畫素 |
F | 32位浮點畫素 |
2、新建空白圖
# 新建一個空白圖片,尺寸與開啟的圖片一致
image_null = Image.new('RGBA', img.size, (0,0,0,0))
color的值在這個程式碼中是(0,0,0,0),前三個表示RGB三原色,0-255,最後一個引數表示透明度:數字越小越透明,越大越不透明,搭配前面的3個值,可以創建出不同顏色不同透明度的圖片,效果如下
(0, 0, 0, 0):
(0, 0, 0, 110):
(0, 0, 0, 255):
(255, 0, 0, 110):
用給定的模式和尺寸建立一個新影象。
引數:
mode
–用於新影象的模式。
size
– 2元組,包含(寬度,高度)以畫素為單位。
color
–影象使用什麼顏色。 預設為黑色。 如果給出的話,對於單頻帶模式,它應該是一個整數或浮點值;對於多頻帶模式,它應該是一個元組(每頻帶一個值)。 建立RGB影象時,還可以使用ImageColor模組支援的顏色字串。 如果顏色為無,則不會初始化影象。
返回值:
一個:py:class:〜PIL.Image.Image
物件。
3、設定水印字型
# 設定字型
font_t = ImageFont.truetype(r'C:\Windows\Fonts\STHUPO.TTF', 35)
從檔案或類似檔案的物件載入TrueType或OpenType字型,然後建立一個字型物件。 此函式從給定檔案或類似檔案的物件載入字型物件,併為給定大小的字型建立字型物件。
使用FreeType開啟字型檔案。 如果要在Windows上同時開啟許多字型,請注意Windows將一次可以在C中開啟的檔案數限制為512。如果接近該限制,則可能會引發OSError ,報告FreeType“無法開啟資源” 。
此功能需要_imagingft服務。
引數:
font
–包含TrueType字型的檔名或類似檔案的物件。 如果在此檔名中找不到該檔案,則載入程式還可以在其他目錄中搜索,例如Windows上的:file:fonts /
目錄或/ file:/ Library / Fonts /
,
size
–請求的大小(以磅為單位)。
index
–要載入的字型(預設為第一個可用的字型)。
encoding
–使用哪種字型編碼(預設為Unicode)。 可能的編碼包括(有關更多資訊,請參見FreeType文件):
layout_engine
–要使用的佈局引擎(如果可用):ImageFont.LAYOUT_BASIC
或ImageFont.LAYOUT_RAQM
。
返回值:
字型物件。
4、建立新的空白圖
# 建立新的空白圖片,將新建圖片添入畫板
new_null = ImageDraw.Draw(image_null)
用於PIL影象的簡單2D繪圖介面。
引數:
im
–要繪製的影象。
mode
–用於顏色值的可選模式。 對於RGB影象,此引數可以是RGB或RGBA(用於將圖形混合到影象中)。 對於所有其他模式,此引數必須與影象模式相同。 如果省略,則模式預設為影象模式。
5、新增字型
# 在新建的圖片上新增水印
new_null.text((image_null.size[0] - image_null.size[0]//2, image_null.size[1] - image_null.size[1]//1.5),
'水印字樣', font = font_t, fill = (255, 0,0,105))
PIL.ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None)
Draws the string at the given position.
引數:
xy
– Top left corner of the text.
text
– Text to be drawn.
font
– An ImageFont instance.
fill
– Color to use for the text.
6、合併圖片
# 合併兩個圖片
res_image = Image.alpha_composite(img, image_null)
PIL.Image.alpha_composite(im1, im2)
Alpha composite im2 over im1.
引數:
im1
– The first image.
im2
– The second image. Must have the same mode and size as the first image.
返回:
An Image object.
source:
def alpha_composite(im1, im2):
"""
Alpha composite im2 over im1.
:param im1: The first image.
:param im2: The second image. Must have the same mode and size as
the first image.
:returns: An :py:class:`~PIL.Image.Image` object.
"""
im1.load()
im2.load()
return im1._new(core.alpha_composite(im1.im, im2.im))
7、儲存圖片
# 呼叫save方法將圖片儲存到本地
res_result.save('add_watermark.png')
Image.save(fp, format=None, **params)
Saves this image under the given filename. If no format is specified, the format to use is determined from the filename extension, if possible.
Keyword options can be used to provide additional instructions to the writer. If a writer doesn’t recognise an option, it is silently ignored. The available options are described later in this handbook.
You can use a file object instead of a filename. In this case, you must always specify the format. The file object must implement the seek, tell, and write methods, and be opened in binary mode.
引數:
file
– File name or file object.
format
– Optional format override. If omitted, the format to use is determined from the filename extension. If a file object was used instead of a filename, this parameter should always be used.
options
– Extra parameters to the image writer.