女友讓我給她論文的圖片上加上字母序號(hào),本來覺得是個(gè)很簡(jiǎn)單的事情,但那個(gè)白底黑字的圓圈序號(hào)卻難住了我, 試了幾個(gè)常用的軟件,都不行。
后來用 PS + 動(dòng)作,倒是能搞出來,不過也不容易,正好那天沒搞完,于是拿回自己家做,但我的電腦上又沒有 PS, 所以就用 python 實(shí)現(xiàn)了。
效果圖
這里用的圖片全是 240X240 的,按文件名的首字母作為序號(hào),PIL 雖然可以計(jì)算文字的尺寸,但類似 D 這樣的字符依然不能處于圓圈的正中,所以還對(duì)個(gè)別字符做了偏移設(shè)置,本來想用 aggdraw 畫圓圈的,能平滑 一些,不過安裝了好幾次,都以失敗告終,最終放棄。
#!/usr/bin/env python #-*- coding: utf-8 -*- import os, sys, fnmatch import Image, ImageDraw, ImageFont def process_picture(filename): seq = os.path.split(filename)[-1][0].upper() img = Image.open(os.path.join(input_dir, filename)) draw = ImageDraw.Draw(img) # 在右下角畫白底黑框圓圈 draw.ellipse((215, 215, 235, 235), outline='black', fill='white') # 將字母序號(hào)寫入到圓圈內(nèi) font = ImageFont.truetype('fonts/Times New Roman.ttf', 20) # 計(jì)算文字居中的位置 text_size = draw.textsize(seq, font) x = (20 / 2) - (text_size[0] / 2) y = (20 / 2) - (text_size[1] / 2) # 字母偏移量 offsets = {'A': 1, 'B': 1, 'E': 1, 'D': 2} offset = offsets.get(seq, 0) draw.text((215 + x + offset, 215 + y), seq, font=font, fill='black') # save image img.save(os.path.join(output_dir, filename), 'JPEG') if __name__ == '__main__': if len(sys.argv) < 3: print 'Usage: python drawseq.py' sys.exit(1) input_dir, output_dir = sys.argv[1:3] os.path.exists(output_dir) or os.makedirs(output_dir) for filename in os.listdir(input_dir): if fnmatch.fnmatch(filename.lower(), '*.jpg'): process_picture(filename)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
