用程序生成一張在簡書的專屬分享圖片

重復性的工作一定要交給計算機去做拼苍!

有時候要為公司做一張宣傳用的分享圖片独令,很簡單交給設計通過ps、AI做好就行了液肌,但是如果一個網(wǎng)站要為每個用戶生成一張專屬的分享圖片,如果讓設計師一張一張的去做鸥滨,哪設計師估計會崩潰嗦哆。下面就來演示用程序來生成一張在簡書的專屬分享圖片吧谤祖。

程序生成分享圖片分析

程序生成分享圖片不是說程序從無到有生成一張圖片,而是說我們把設計師設計的設計稿抽象成一塊一塊的老速,然后通過程序算法去把它們組裝起來成一張新圖片泊脐。我們通過下面這張圖片來說明吧!

我的簡書分享圖片標記圖

圖中的綠色框內(nèi)的內(nèi)容是固定不變的烁峭,藍色圓圈內(nèi)的內(nèi)容是變化的(尤其是點贊數(shù)和文章總字數(shù)會隨時變化的)**容客,我們可以這樣做把背景和固定不變的內(nèi)容讓設計師做成一張背景圖片,剩下的隨時會變化的東西就通過程序繪制上去约郁。

本次用到的素材如下

模板圖片(設計師設計好)

template.jpg

頭像圖片

avatar.jpg

二維碼圖片

我的簡書首頁地址生成的二維碼 qrcode.jpg

生成圖片所需的工具說明

我們使用python這門通用編程語言來處理圖片缩挑,所以首先要在電腦上安裝python,還用到了一個python圖片處理的庫Pillow等python安裝好之后通過pip install Pillow安裝即可。[注意:Pillow的首字母P是大寫的]

生成步驟

我們可以把模板圖片理解成一張黑板鬓梅,然后把頭像圖片供置,二維碼圖片,文字等貼在黑板正確的位置就完成了绽快,這個過程就相當于我們向黑板貼東西的過程芥丧!

step1:先把頭像貼上去,貼頭像的時候這里會有一個問題坊罢,頭像圖片是正方形的续担,而我們要的效果是一個圓形的頭像,這里需要寫個函數(shù)專門處理圓形頭像的問題活孩。代碼如下:

"""
將頭像變成圓形繪制在背景圖片上物遇,然后將合成的圖片對象返回
"""
def drawCircleAvatar(im,background):
    im = im.resize((170, 170));
    bigsize = (im.size[0] * 3, im.size[1] * 3)
    #遮罩對象
    mask = Image.new('L', bigsize, 0)
    draw = ImageDraw.Draw(mask) 
    draw.ellipse((0, 0) + bigsize, fill=255)
    mask = mask.resize(im.size, Image.ANTIALIAS)
    im.putalpha(mask)
    background.paste(im, (235, 155), im)
    return background

step2:繪制用戶的昵稱和寫了多少字和收獲多少個贊

    #繪制用戶昵稱
    font1 = ImageFont.truetype("simhei.ttf",32)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((272, 366), unicode('夢想家','utf-8'), font=font1)

    #繪制用戶寫了多少字
    font2 = ImageFont.truetype("simhei.ttf",30)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((110, 436), unicode('寫了2388個字','utf-8'), font=font2)

    #繪制獲取的點贊數(shù)
    font3 = ImageFont.truetype("simhei.ttf",30)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((356, 436), unicode('收獲10個贊','utf-8'), font=font3)

step3:繪制二維碼圖片

    #將二維碼圖片粘貼在背景圖片上
    region = qrcode_img
    region = region.resize((180, 180))
    back_img.paste(region,(230,860))

完整代碼

# -*- coding: utf-8 -*-
from PIL import Image,ImageFont,ImageDraw
import time,sys
reload(sys)
sys.setdefaultencoding('utf-8')

"""
生成分享圖片的方法
"""
def createShareImg(avatarUrl,qrcodeUrl,nickname,countWord,countLiked):
    startTime=time.time()
    #加載背景圖片
    background=Image.open(ur'template.jpg')
    #加載頭像圖片
    avatar = Image.open(avatarUrl,"r")
    qrcode_img = Image.open(qrcodeUrl,"r")

    # 將背景圖片和圓形頭像合成之后當成新的背景圖片
    back_img=drawCircleAvatar(avatar,background)

    #將二維碼圖片粘貼在背景圖片上
    region = qrcode_img
    region = region.resize((180, 180))
    back_img.paste(region,(230,860))

    #繪制用戶昵稱
    font1 = ImageFont.truetype("simhei.ttf",32)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((272, 366), unicode(nickname,'utf-8'), font=font1)

    #繪制用戶寫了多少字
    font2 = ImageFont.truetype("simhei.ttf",30)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((110, 436), unicode(countWord,'utf-8'), font=font2)

    #繪制獲取的點贊數(shù)
    font3 = ImageFont.truetype("simhei.ttf",30)
    drawImage=ImageDraw.Draw(back_img)
    drawImage.text((356, 436), unicode(countLiked,'utf-8'), font=font3)


    #保存圖片到文件
    back_img.save('out.jpg') #保存圖片
    endTime=time.time()
    
    print "本次生成圖片一共用時:".decode("utf-8").encode("gbk")
    print str(endTime-startTime)+"秒".decode("utf-8").encode("gbk")

"""
將頭像變成圓形繪制在背景圖片上,然后將合成的圖片對象返回
"""
def drawCircleAvatar(im,background):
    im = im.resize((170, 170));
    bigsize = (im.size[0] * 3, im.size[1] * 3)
    #遮罩對象
    mask = Image.new('L', bigsize, 0)
    draw = ImageDraw.Draw(mask) 
        #畫橢圓的方法
    draw.ellipse((0, 0) + bigsize, fill=255)
    mask = mask.resize(im.size, Image.ANTIALIAS)
    im.putalpha(mask)
    background.paste(im, (235, 155), im)
    return background

if __name__=='__main__':
    avatarUrl="avatar.jpg"
    qrcodeUrl="qrcode.jpg"
    nickname="夢想家"
    countWord="寫了2388個字"
    countLiked="收獲10個贊"
    createShareImg(avatarUrl,qrcodeUrl,nickname,countWord,countLiked)

如果你要在本地運行此腳本命令憾儒,將此腳本復制保存成本地文件xxx.py然后把模板圖片询兴、你的頭像圖片、你的簡書主頁的二維碼圖片放在同一目錄下起趾,修改腳本中的參數(shù)诗舰,在當前目錄打開命令行執(zhí)行下面的命令:

python xxx.py

就會在當前目錄生成一張屬于你自己的簡書分享圖片了。

我的簡書分享圖片

最終分享效果圖

分享圖片的二維碼鏈接為我的簡書首頁地址训裆。

模板圖片只用ps簡單的做了一下眶根,不好看請輕噴,如果你有好的模板請在評論處分享~

使用Pillow生成圖片的效率還是比較高的windows系統(tǒng)下在1s以內(nèi)缭保,linux系統(tǒng)下0.1s以內(nèi)汛闸,系統(tǒng)配置不同可能時間也有一些差別。

這里提供一個pillow官方文檔地址方便查看艺骂。

本文源碼地址
文章如有誤诸老,請不吝賜教,謝謝!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末别伏,一起剝皮案震驚了整個濱河市蹄衷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厘肮,老刑警劉巖愧口,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異类茂,居然都是意外死亡耍属,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門巩检,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厚骗,“玉大人,你說我怎么就攤上這事兢哭×旖ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵迟螺,是天一觀的道長冲秽。 經(jīng)常有香客問我,道長矩父,這世上最難降的妖魔是什么锉桑? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浙垫,結(jié)果婚禮上刨仑,老公的妹妹穿的比我還像新娘郑诺。我一直安慰自己夹姥,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布辙诞。 她就那樣靜靜地躺著辙售,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飞涂。 梳的紋絲不亂的頭發(fā)上旦部,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音较店,去河邊找鬼士八。 笑死,一個胖子當著我的面吹牛梁呈,可吹牛的內(nèi)容都是我干的婚度。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼官卡,長吁一口氣:“原來是場噩夢啊……” “哼蝗茁!你這毒婦竟也來了醋虏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哮翘,失蹤者是張志新(化名)和其女友劉穎颈嚼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饭寺,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡阻课,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了艰匙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柑肴。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旬薯,靈堂內(nèi)的尸體忽然破棺而出晰骑,到底是詐尸還是另有隱情,我是刑警寧澤绊序,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布硕舆,位于F島的核電站,受9級特大地震影響骤公,放射性物質(zhì)發(fā)生泄漏抚官。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一阶捆、第九天 我趴在偏房一處隱蔽的房頂上張望凌节。 院中可真熱鬧,春花似錦洒试、人聲如沸倍奢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卒煞。三九已至,卻和暖如春叼架,著一層夾襖步出監(jiān)牢的瞬間畔裕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工乖订, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扮饶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓乍构,卻偏偏與公主長得像甜无,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,491評論 6 427
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富毫蚓,涉及面非常廣占键。awesome-p...
    若與閱讀 18,656評論 4 418
  • 夏夜,穿過路邊的草叢聽蟲鳴聲在耳邊輕輕環(huán)繞元潘,這是一種靜畔乙;散步在荷塘邊聽蛙聲一片喧囂,這是一種靜翩概;路過某個公園時牲距,聽...
    大鵬寫故事閱讀 682評論 0 0
  • 焦點講師一期班洛陽劉琳堅持分享第六十九天 人家都說笑一笑,十年少钥庇,可是今天我在講師班的課堂上牍鞠,一天幾乎都在...
    小溪與大海閱讀 473評論 0 0