本文介紹如何使用Python給圖像添加水?。ㄎ谋净驁D片)。前面,我們已經(jīng)學(xué)習(xí)了:這里需要使用Pillow庫(Python
Imaging Library),使用pip命令安裝:向圖像中添加水印,基本上是將一張圖像(水?。┓胖迷诹硪粡垐D像的頂部。能夠控制logo圖像的透明度將有助于使最終生成的圖像看起來更好。因此,最好使用支持圖像透明度的PNG文件格式的水印圖像。如果水印文件是JPG/JPEG格式,不要擔(dān)心。我們也不會使用一些轉(zhuǎn)換器將JPG轉(zhuǎn)換為PNG。Python可以為圖像添加所需的“透明度”。雖然PNG文件和JPG文件之間有一些不同,但我們主要關(guān)注的是圖像的透明度特征。圖像透明度基本上是指圖像是否可以透過。讓我們將兩個圖像文件加載到Python中。這是相同的圖像,但格式不同,一個是PNG,另一個是JPG。讓我們看看這兩個圖像文件之間的差異。對于計算機來說,圖像文件基本上是一組數(shù)字。將這兩個圖像文件加載到NumPy數(shù)組將有助于可視化這個概念。示例PNG和JPG圖像的大小均為1100
x 1100像素。然而,shape屬性中的最后一個數(shù)字不同:JPG是3,而PNG是4。讓我們顯示numpy數(shù)組以查看差異。每個數(shù)組內(nèi)的值表示每個像素的顏色。例如,在PNG文件中,[255,255,255,255]表示白色但完全不透明。而在JPG文件中,[255,255,255]表示白色的像素。前三個整數(shù)值(如上圖2左側(cè)所示)是RGB(紅色、綠色和藍色)值,PNG數(shù)組中的第四個整數(shù)稱為“alpha通道”,它控制透明度(因此命名為“RGBA”)。如上圖2所示,PNG支持透明度(即alpha通道),但JPG沒有。1.RGB的值為255表示每種顏色的最大值。將所有三個值設(shè)為最大值(255,255,255)基本上是白色。2.alpha通道的值為255表示不透明;而alpha值為0表示完全透明。Pillow庫使JPG文件轉(zhuǎn)換為PNG格式變得非常容易。我們可以使用putalpha()方法將alpha通道(即第四個整數(shù))添加到JPG圖像。注意,參數(shù)內(nèi)部的范圍可以是0到255。值為0表示完全透明,即我們不會看到任何東西;255表示不透明。這里選擇了數(shù)值180,這樣我們的水印圖像將有點半透明。這張圖片還有一個問題——它的背景是白色的。通常,PNG文件的背景是“透明的”。我們可以通過將圖像上所有白色像素的alpha通道設(shè)置為0(透明)來“刪除”白色背景。換句話說,對于每個RGB值為[255,255,255,180]的像素,我們將alpha通道設(shè)置為0,以使像素完全透明。由于我們已經(jīng)將圖像的RGBA值放入Numpy數(shù)組中,因此操縱顏色很容易。為了找到所有白色的像素,可以創(chuàng)建一個掩碼,其中白色像素=True,否則為False。下面的代碼檢查圖像的每個像素的所有R、G和B值是否等于255。注意,transparent_watermark[:,:,0]僅返回所有1100×1100像素的第一個元素(即“R”的整數(shù)值)的數(shù)組。然后,我們?yōu)闈M足標(biāo)準(zhǔn)的像素賦新值[255,255,255,0]。這一步有效地將所有白色像素變?yōu)橥耆该鳌?/span>可以使用PIL庫的Image.fromarray()方法將NumPy數(shù)組轉(zhuǎn)換回圖像文件。watermark_final
= Image.fromarray(transparent_watermark)現(xiàn)在,我們已經(jīng)完成了準(zhǔn)備Logo圖像,是時候?qū)⑵渥鳛樗√砑拥交A(chǔ)圖像中了。我們首先將水印圖像的大小調(diào)整為基礎(chǔ)圖像的1/5,當(dāng)然也可以使用另一種適合你需要的大小。然后,將創(chuàng)建一個與基礎(chǔ)圖像大小相同的空“畫布”,并將此畫布設(shè)置為處處透明。transparent
= Image.new(mode='RGBA',size = (width,height), color=0)設(shè)置畫布后,將1)粘貼基礎(chǔ)圖像,2)將水印圖像粘貼在基礎(chǔ)圖像的頂部。如下所示,Image.paste()方法有三個參數(shù):2.box–粘貼圖像的起點(左上角)的(x,y)坐標(biāo)3.mask-遮罩/過濾器,有助于從粘貼的圖像中去除所有透明像素wm_position
= (int(3/4*width), int(3/4 * height))transparent.paste(im=watermark_final,
box=wm_position, mask=watermark_final)現(xiàn)在,已經(jīng)成功地將一張JPG格式的水印添加到另一張圖片上,如下圖7所示。注:本文學(xué)習(xí)整理自pythoninoffice.com,供有興趣的朋友學(xué)習(xí)參考。
|