Python中用PIL庫批量給圖片加上序號的教程
女友讓我給她論文的圖片上加上字母序號,本來覺得是個很簡單的事情,但那個白底黑字的圓圈序號卻難住了我, 試了幾個常用的軟件,都不行。
后來用 PS + 動作,倒是能搞出來,不過也不容易,正好那天沒搞完,于是拿回自己家做,但我的電腦上又沒有 PS, 所以就用 python 實現(xiàn)了。
效果圖

這里用的圖片全是 240X240 的,按文件名的首字母作為序號,PIL 雖然可以計算文字的尺寸,但類似 D 這樣的字符依然不能處于圓圈的正中,所以還對個別字符做了偏移設(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')
# 將字母序號寫入到圓圈內(nèi)
font = ImageFont.truetype('fonts/Times New Roman.ttf', 20)
# 計算文字居中的位置
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 <input_dir> <output_dir>'
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)
相關(guān)文章
pytorch VGG11識別cifar10數(shù)據(jù)集(訓(xùn)練+預(yù)測單張輸入圖片操作)
這篇文章主要介紹了pytorch VGG11識別cifar10數(shù)據(jù)集(訓(xùn)練+預(yù)測單張輸入圖片操作),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python之pyqt5通過按鈕改變Label的背景顏色方法
今天小編就為大家分享一篇python之pyqt5通過按鈕改變Label的背景顏色方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06

