Python基于pillow庫實(shí)現(xiàn)生成圖片水印
一、背景
平時(shí)工作中經(jīng)常需要使用各種尺寸、格式的圖片來做測(cè)試,每次從百度或者谷歌找圖都非常麻煩,于是就想作為一個(gè)程序員怎么能被這個(gè)問題影響效率呢,一切程序可以做的事情都應(yīng)該用程勛來做并提升效率,這才是我們編程的意義所在。
二、實(shí)現(xiàn)
于是就想實(shí)現(xiàn)一個(gè)web版的圖片生成器,填顏色、尺寸、格式就可以生成指定的圖片,Python的圖像庫肯定首選pillow,實(shí)現(xiàn)起來很簡(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è)置合適的字間距,我是通過多次調(diào)整嘗試的,最終得到一個(gè)自己滿意的效果。
另外,關(guān)于字體名字,默認(rèn)在不同平臺(tái)下會(huì)去不同的目錄查找該名字的字體,Windows下是在c://windows/fonts/目錄下,Linux是在/usr/share/fonts目錄下,這里為了避免后續(xù)部署時(shí)不同電腦上字體不同導(dǎo)致的問題,我直接把字體文件放在代碼庫中了,所以使用的是一個(gè)相對(duì)路徑。
三、預(yù)覽
如果想要預(yù)覽效果的,可以訪問這里:https://nicolerobin.top/image_holder/static/index.html
代碼庫地址:https://github.com/NicoleRobin/image_holder
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)2. HTML5 Canvas繪制圖形從入門到精通3. XML入門的常見問題(四)4. XHTML 1.0:標(biāo)記新的開端5. XML解析錯(cuò)誤:未組織好 的解決辦法6. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁的方法7. 詳解CSS偽元素的妙用單標(biāo)簽之美8. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼9. ASP基礎(chǔ)知識(shí)VBScript基本元素講解10. 利用CSS3新特性創(chuàng)建透明邊框三角
