我最近沒有摸魚,一直都在工做。只不過目前須要爬一點數據 python
作的,以後看機會分享一下。html
忙着忙着老大說要生成海報,有個活動要給每一個用戶來個分享圖。前端
這個方案,通過我調研行不通。(也有多是我菜)
對於批量打碼,統一操做這類的還能夠。
對於須要對應名字之類的比較無力python
老大說 python。py
使用 PIL
庫 寫起來還蠻簡單的。py
使用這段時間以來就是感受這個編碼格式極其難受。有沒有大佬解救我一下。canvas
mask=img
要注意針對 png
來使用經過上面的類型,來增長咱們代碼的擴展性。segmentfault
# -*- coding: utf-8 -*- from PIL import Image, ImageDraw, ImageFont import qrcode import time; import re def AddMoney(data): bg = Image.new('RGBA', (data['width'], data['height'])) for item in data['list']: print(item) if item['type'] == 'qrcode': qr_pil_obj = qrcode.make(item['url'], border=0).resize((item['width'], item['height']), Image.ANTIALIAS) bg.paste(qr_pil_obj,(item['x'],item['y'])) elif item['type'] == 'image': extname = re.search( r'(jpg|png|jpeg)$', item['url']).group() # 加載圖片 img = Image.open(item['url']) # 縮放 if (item['width']!= '' and item['height'] != ''): img.resize((item['width'], item['height']), Image.ANTIALIAS) if extname == 'png': bg.paste(img,(item['x'],item['y']), mask=img) else: bg.paste(img,(item['x'],item['y'])) elif item['type'] == 'text': draw = ImageDraw.Draw(bg) ttfront = ImageFont.truetype(item['ttfrontUrl'],item['ttfrontSize']) draw.text((item['x'],item['y']),unicode(item['txt'],"UTF-8"), fill=(0,0,0), font=ttfront) else: print('------------------------------') bg.save(data['outputName']) data = { 'width': 750, 'height': 1334, 'outputName': './out-%s.png' % (str(time.time())), 'list':[{"type":"image","url":"./avatar.jpg","x":10,"y":360,"width":750,"height":1334},{"type":"image","url":"./bg.png","x":0,"y":0,"width":750,"height":750},{"type":"qrcode","url":"https://www.lilnong.top","x":0,"y":0,"width":120,"height":120},{"type":"text","txt":"你這個死宅說話","x":140,"y":560,"ttfrontUrl":"./abc.ttf","ttfrontSize":55},{"type":"text","txt":"還挺搞笑的","x":160,"y":630,"ttfrontUrl":"./abc.ttf","ttfrontSize":55}] } AddMoney(data)
這個也是極好,是以前一個 Node
的服務。省時省力。網上查也很多跨域
我堂堂前端,怎麼也得露一手吧。
基於上面的頁面已經成功。咱們想一下咱們須要幹什麼?把 html
轉成 canvas
,而後 canvas.toBlob
,而後 download
美滋滋。微信
html2canvas
這是一個庫,既然已經有寫好的了,咱們就不費神了。(最難的一步。。。)cavnas
調用 API
, canvas.toBlob
。各類忘記發。補上補上
工具
py
寫代碼是真的短。
前端處理須要注意跨域、URL空格等問題。字體