欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

生成海報(bào)(前端 | python)

系統(tǒng) 1611 0

我最近沒有摸魚, 一直都在工作 。只不過目前需要爬一點(diǎn)數(shù)據(jù) python 做的,之后看機(jī)會(huì)分享一下。

忙著忙著老大說要生成海報(bào),有個(gè)活動(dòng)要給每個(gè)用戶來個(gè)分享圖。

想法

  1. PS 批處理?腳本? 能甩出去的活都甩出去 ,機(jī)智如我啊
  2. python 處理圖像(PIL)。這么坑的想法,當(dāng)然不是我想的了。 雖然我實(shí)現(xiàn)了
  3. 寫個(gè)頁面調(diào)用之前生成長截圖的服務(wù)。之前有個(gè)為了方便分享微信,做了生成長截圖的服務(wù)。寫個(gè)新的頁面用一下即可。
  4. 我堂堂前端er ,怎么能一直用別的工具呢?我的錘子呢?

ps處理

這個(gè)方案,經(jīng)過我調(diào)研 行不通 。(也有可能是我菜)
對于批量打碼,統(tǒng)一操作這類的還可以。
對于需要對應(yīng)名字之類的比較無力

python

老大說 python py 使用 PIL 庫 寫起來還蠻簡單的。
py 使用這段時(shí)間以來就是感覺這個(gè) 編碼格式極其難受 。有沒有大佬解救我一下。

根據(jù)不同的類型輸出數(shù)據(jù)

  1. txt 使用字體,輸出到對應(yīng)位置
  2. image 圖片,覆蓋輸出到對應(yīng)位置。 mask=img 要注意針對 png 來使用
  3. qrcode 生成對應(yīng)二維碼

通過上面的類型,來增加我們代碼的擴(kuò)展性。

代碼

          
            # -*- 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":"你這個(gè)死宅說話","x":140,"y":560,"ttfrontUrl":"./abc.ttf","ttfrontSize":55},{"type":"text","txt":"還挺搞笑的","x":160,"y":630,"ttfrontUrl":"./abc.ttf","ttfrontSize":55}]
}
AddMoney(data)
          
        

長截圖

這個(gè)也是極好,是之前一個(gè) Node 的服務(wù)。省時(shí)省力。網(wǎng)上查也不少

前端技術(shù)處理

我堂堂前端,怎么也得露一手吧。
基于上面的頁面已經(jīng)成功。我們想一下我們需要干什么?把 html 轉(zhuǎn)成 canvas ,然后 canvas.toBlob ,然后 download 美滋滋。

  1. html2canvas 這是一個(gè)庫,既然已經(jīng)有寫好的了,我們就不費(fèi)神了。(最難的一步。。。)
  2. 拿到 cavnas 調(diào)用 API canvas.toBlob
  3. 下載。這個(gè)就比較簡單了,之前我寫過 前端培訓(xùn)-初級(jí)階段-場景實(shí)戰(zhàn)(2019-06-06)-下載文件&下載進(jìn)度

微信公眾號(hào)

各種忘記發(fā)。補(bǔ)上補(bǔ)上

結(jié)語

py 寫代碼是真的短。
前端處理需要注意 跨域 URL空格 等問題。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩在线网址 | 欧美综合自拍亚洲综合百度 | 日本不卡在线一区二区三区视频 | 在线一区观看 | 婷婷天天操 | 九九在线精品视频 | 亚洲av毛片一区二区久久 | 一区二区三区日本在线观看 | 亚洲欧美自拍另类图片色 | 中文字幕精品一区二区三区精品 | 欧美一区二区免费 | 国产精品久久婷婷六月丁香 | 色噜噜亚洲男人的天堂 | 久久国产精品一区二区三区 | 亚洲欧美综合网 | 精品欧美乱码久久久久久 | 国产区免费 | 精品久久久久久久久久久 | 亚洲综合精品 | 亚洲一区美女 | 日本一区二区三区四区高清视频 | 五月婷婷亚洲 | 99久久久国产精品露出 | 成人色色网 | 亚洲男人天堂网 | 欧美一区久久久 | 99久久精品国产一区二区成人 | 日本在线观看高清不卡免v 国产成人一区二区精品非洲 | 奇米第四色在线 | 久久91久久91精品免费观看 | 欧美亚洲高清 | 夜夜爽天天狠狠九月婷婷 | 四库影院永久在线精品 | 日韩欧美中文字幕视频 | 亚洲一区二区欧美日韩 | 日韩精品久久久久 | 精品久久久久一区二区三区 | 91 在线| 亚洲福利视频一区二区 | 一级欧美一级日韩 | 国产aⅴ |