Python基于pillow庫(kù)實(shí)現(xiàn)生成圖片水印
一、背景
平時(shí)工作中經(jīng)常需要使用各種尺寸、格式的圖片來(lái)做測(cè)試,每次從百度或者谷歌找圖都非常麻煩,于是就想作為一個(gè)程序員怎么能被這個(gè)問(wèn)題影響效率呢,一切程序可以做的事情都應(yīng)該用程勛來(lái)做并提升效率,這才是我們編程的意義所在。
二、實(shí)現(xiàn)
于是就想實(shí)現(xiàn)一個(gè)web版的圖片生成器,填顏色、尺寸、格式就可以生成指定的圖片,Python的圖像庫(kù)肯定首選pillow,實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,所以就不詳細(xì)解釋了,直接上代碼:
def generate_image(static_dir, image_type, width, height, color):
print(static_dir, image_type, width, height, color)
mode = 'RGB'
width = int(width)
height = int(height)
color_tuple = ImageColor.getcolor(color, mode)
image = Image.new(mode, (width, height), color_tuple)
image_dir = os.path.join(static_dir, 'image')
image_name = '%sx%s_%s.%s' % (width, height, int(time.time()), image_type)
image_path = os.path.join(image_dir, image_name)
font = ImageFont.truetype('./font/consola.ttf', 96)
draw = ImageDraw.Draw(image)
mark_content = '{width}x{height}'.format(width=width, height=height)
for i, ch in enumerate(mark_content):
draw.text((60*i + 10, 10), ch, font=font, fill=rndColor())
image.save(image_path)
print('image_path:%s' % (image_path))
return image_path
這個(gè)就是核心的生成圖片的邏輯,其中稍微費(fèi)了點(diǎn)時(shí)間的是水印的生成,這里添加水印的用意是為了在圖片上顯示圖片的尺寸,方便使用者直觀的看到該圖片的尺寸,其中需要使用到ImageDraw.text()方法,這里需要注意的是要根據(jù)你的字體大小設(shè)置合適的字間距,我是通過(guò)多次調(diào)整嘗試的,最終得到一個(gè)自己滿意的效果。
另外,關(guān)于字體名字,默認(rèn)在不同平臺(tái)下會(huì)去不同的目錄查找該名字的字體,Windows下是在c://windows/fonts/目錄下,Linux是在/usr/share/fonts目錄下,這里為了避免后續(xù)部署時(shí)不同電腦上字體不同導(dǎo)致的問(wèn)題,我直接把字體文件放在代碼庫(kù)中了,所以使用的是一個(gè)相對(duì)路徑。
三、預(yù)覽
如果想要預(yù)覽效果的,可以訪問(wèn)這里:https://nicolerobin.top/image_holder/static/index.html
代碼庫(kù)地址:https://github.com/NicoleRobin/image_holder
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何在for循環(huán)中同時(shí)使用兩個(gè)變量與兩個(gè)控制條件
Python是一種廣泛使用的編程語(yǔ)言,其提供了許多強(qiáng)大的方法來(lái)處理代碼,Python?for循環(huán)是其中一種非常有用的方法,下面這篇文章主要給大家介紹了關(guān)于Python如何在for循環(huán)中同時(shí)使用兩個(gè)變量與兩個(gè)控制條件的相關(guān)資料,需要的朋友可以參考下2024-03-03
Python卷積神經(jīng)網(wǎng)絡(luò)圖片分類框架詳解分析
在機(jī)器視覺(jué)領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)算法作為一種新興算法出現(xiàn),在圖像識(shí)別領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)能夠較好的實(shí)現(xiàn)圖像的分類效果,而且其位移和形變具有較高的容忍能力2021-11-11
Anaconda最新版2023安裝教程Spyder安裝教程圖文詳解
這篇文章主要介紹了Anaconda最新版2023安裝教程Spyder安裝教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
python讀取excel指定列數(shù)據(jù)并寫入到新的excel方法
今天小編就為大家分享一篇python讀取excel指定列數(shù)據(jù)并寫入到新的excel方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
python通過(guò)偽裝頭部數(shù)據(jù)抵抗反爬蟲(chóng)的實(shí)例
下面小編就為大家分享一篇python通過(guò)偽裝頭部數(shù)據(jù)抵抗反爬蟲(chóng)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python爬蟲(chóng)實(shí)戰(zhàn):分析《戰(zhàn)狼2》豆瓣影評(píng)
這篇文章主要介紹了Python爬蟲(chóng)實(shí)戰(zhàn):《戰(zhàn)狼2》豆瓣影評(píng)分析,小編在這里使用的是python版本3.5,需要的朋友可以參考下2018-03-03
python獲取元素在數(shù)組中索引號(hào)的方法
這篇文章主要介紹了python獲取元素在數(shù)組中索引號(hào)的方法,實(shí)例分析了Python中index方法的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Python基于yaml文件配置logging日志過(guò)程解析
這篇文章主要介紹了Python基于yaml文件配置logging日志過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

