生成海报(前端 | python)

栏目: Python · 发布时间: 5年前

内容简介:我最近没有摸鱼,忙着忙着老大说要生成海报,有个活动要给每个用户来个分享图。这个方案,经过我调研

我最近没有摸鱼, 一直都在工作 。只不过目前需要爬一点数据 python 做的,之后看机会分享一下。

忙着忙着老大说要生成海报,有个活动要给每个用户来个分享图。

想法

  1. PS 批处理?脚本? 能甩出去的活都甩出去 ,机智如我啊
  2. python 处理图像(PIL)。这么坑的想法,当然不是我想的了。 虽然我实现了
  3. 写个页面调用之前生成长截图的服务。之前有个为了方便分享微信,做了生成长截图的服务。写个新的页面用一下即可。
  4. 我堂堂前端er ,怎么能一直用别的 工具 呢?我的锤子呢?

ps处理

这个方案,经过我调研 行不通 。(也有可能是我菜)

对于批量打码,统一操作这类的还可以。

对于需要对应名字之类的比较无力

python

老大说 python。 py 使用 PIL 库 写起来还蛮简单的。

py 使用这段时间以来就是感觉这个 编码格式极其难受 。有没有大佬解救我一下。

根据不同的类型输出数据

  1. txt 使用字体,输出到对应位置
  2. image 图片,覆盖输出到对应位置。 mask=img 要注意针对 png 来使用
  3. qrcode 生成对应二维码

通过上面的类型,来增加我们代码的扩展性。

代码

# -*- 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 美滋滋。

  1. html2canvas 这是一个 ,既然已经有写好的了,我们就不费神了。(最难的一步。。。)
  2. 拿到 cavnas 调用 APIcanvas.toBlob
  3. 下载。这个就比较简单了,之前我写过 前端培训-初级阶段-场景实战(2019-06-06)-下载文件&下载进度

结语

py 写代码是真的短。

前端处理需要注意 跨域URL空格 等问题。


以上所述就是小编给大家介绍的《生成海报(前端 | python)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络空间导论

网络空间导论

李良荣、方师师 / 复旦大学出版社 / 2018-6-1 / 38

在互联网蓬勃发展的今天,新闻传播学科该往何处去?在长达半个多世纪的深入研究后,李良荣教授及其团队给出了答案:从“小新闻”走向“大传播”,并撰写了这本开创性的教材:《网络空间导论》。 在本书中,互联网被定义为“空间”——持续演进的数字化现实。为了深刻把握网络空间的内涵,本书提供了六个维度的观察:技术应用、组织架构、政治经济、媒介文化、网络素养、安全治理,并以大胆且富有建设性的观点重新定义了新闻......一起来看看 《网络空间导论》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试