python制作海报_生成海报(前端 | python)

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

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

想法

PS 批处理?脚本? 能甩出去的活都甩出去,机智如我啊

python 处理图像(PIL)。这么坑的想法,当然不是我想的了。虽然我实现了

写个页面调用之前生成长截图的服务。之前有个为了方便分享微信,做了生成长截图的服务。写个新的页面用一下即可。

我堂堂前端er,怎么能一直用别的工具呢?我的锤子呢?

ps处理

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

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

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

python

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

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

根据不同的类型输出数据

txt 使用字体,输出到对应位置

image 图片,覆盖输出到对应位置。mask=img要注意针对 png 来使用

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

html2canvas 这是一个库,既然已经有写好的了,我们就不费神了。(最难的一步。。。)

拿到 cavnas 调用 API, canvas.toBlob。

微信公众号

各种忘记发。补上补上

结语

py 写代码是真的短。

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

作者:linong

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。数据备份与还原第一篇分享给大家,具体内容如下基础概念:备份,将…

python正负数转换,如何在Python中将负整数值转换为十六进制

I use python 2.6>>> hex(-199703103)-0xbe73a3f>>> hex(199703103)0xbe73a3fPositive and negative value are the same?When I use calc, the value is FFFFFFFFF418C5C1.解决方案Pythons integers can grow arbitrarily large. In order to compute the …

mysql 分表索引_mysql中,分表查询和索引查询哪个更快?

谢谢邀请!查询快慢主决的因素有很多,存储碎片、数据量大属于I/O类问题;表结构设计、查询语句属于技术是否熟练(经验)问题。对于你的分表快还是索引快的这个问题本身就是有问题的:在建立数据表的时候,索引是必须的&…

fluent python 第二版_Fluent Python 笔记(二):序列基础

目录:本篇开始总结 Python 基本的数据结构,大部分情况下,这些数据结构就已经够用了,不需要重复造轮子。首先是序列及其相关的操作。序列(Sequence)标准库中提供了很多序列类型,都是C实现的,效率很高。容器序…

mysql数据库云读取_云数据库 MySQL版

{"moduleinfo":{"banner_bigTit":"云数据库 MySQL版读写分离上线","banner_subTit":"自动扩展读写分离,性能提升不止一点","banner_link":"https://rdsnew.console.aliyun.com/console/index#/rd…

mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复

MySQL 数据库的备份和恢复  基本知识>>>>>>>  逻辑备份:  1.mysqldump(数据导出工具)  mysqldump options db_name[table_name]//备份单个数据库  mysqldump 选项 --database database-name1 [databases-name2]....//备份指定的数据库一个或者多…

mysql查询并设置高亮_慢查询分析调优工具~mysqldumpslow

在日常的业务开发中,MySQL出现慢查询是很常见的,要么说明你家产品的增长性很好,要么就是你的SQL写的太烂了。所以对慢查询SQL进行分析和优化很重要,其中mysqldumpslow是MySQL服务自带的一款很好的分析调优工具。MySQL慢查询日志My…

数据库安装mysql57_记录CentOS7.X版本下安装MySQL5.7数据库

记录CentOS7.X版本下安装MySQL5.7数据库设置rpm下载目录在/opt目录下新建一个目录存放mysqlcd /optsudo mkdir mysql12下载MySQL的源如果在这之前没有提示-bash: wget: command not found,那么还得先安装wgetsudo yum install wget1安装MySQL的rpmsudo rpm -ivh mys…

python递归函数的思想_Python递归函数实例讲解

Python递归函数实例1、打开Python开发工具IDLE,新建‘递归.py文件,并写代码如下:def digui(n):if n 0 :print ()returnprint (**n)digui(n-1)if __name__ __main__:digui(5)这里递归打印*号,先打印后递归2、F5运行程序,打印内容…

非法的表达式开始_轮回、开始还是结束?

上节课说到&#xff0c;要打印0-9这十个数字&#xff0c;除了一个一个的 document.write 还有什么办法?下面介绍一个for语法for (var 变量 初始值; 结束判断表达式; 变量递增/递减) { 循环体&#xff0c;用于处理变量;}我们来实操一下for (var c0;c<9;cc1) { do…

sql 统计记录条数后 打印出所有记录_用SQL完成购买行为分析(下篇II)

&#xff08;接《用SQL完成购买行为分析&#xff08;下篇I&#xff09;》内容&#xff09;12&#xff09;查询首条记录为fav&#xff0c;总记录条数为14的记录。将前面getNum(3)红框处替换为12&#xff0c;运行getNum(14)得到第2条记录的数量&#xff1a;替换为11&#xff0c;得…

library的英语怎么读音_library怎么读声音

library的英式读音和美式读音均为&#xff1a;[ˈlaɪbrəri]。library可作名词&#xff0c;其作名词时&#xff0c;中文意思有&#xff1a;图书馆&#xff1b;藏书楼&#xff1b;图书室&#xff1b;资料室&#xff1b;(书、激光唱片等的)个人收藏等含义。一、library 读音英式…

sift线特征提取代码_车道线检测LaneNet

LanNetSegmentation branch完成语义分割,即判断出像素属于车道or背景Embedding branch完成像素的向量表示,用于后续聚类,以完成实例分割H-NetSegmentation branch解决样本分布不均衡车道线像素远小于背景像素.loss函数的设计对不同像素赋给不同权重,降低背景权重.该分支的输出为…

mysql ehcache_MyBatis使用Ehcache作为二级缓存

特别说明&#xff1a;由于二级缓存是基于Mapper的&#xff0c;当你在不同的mapper中查询了相同的数据&#xff0c;例如不同的Mapper中有多表查询时结果中有相同的数据&#xff0c;当其中一个Mapper进行插入更新缓存时&#xff0c;另一个并没有插入更新&#xff0c;那么使用两个…

三角形一点到三边距离最小_初中数学:相似三角形以及重心、向量问题考点整理...

考点&#xff1a;相似三角形的概念、相似比的意义、画图形的放大和缩小考点&#xff1a;平行线分线段成比例定理、三角形一边的平行线的有关定理考点&#xff1a;相似三角形的判定和性质及其应用考点&#xff1a;三角形的重心考点&#xff1a;向量的有关概念考点&#xff1a;向…

mysql mongo关联查询语句_MongoDB 集合间关联查询后通过$filter进行筛选

在前面的分享中&#xff0c;有讲解 “详解MongoDB中的多表关联查询($lookup)” 一节&#xff0c;其内容涵盖了常见的集合管理的需求。我们知道文档的选择都是通过$match进行匹配刷选。但这是文档间的匹配筛选&#xff0c;并没有对单个新生成的文档进行内嵌子文档进行筛选。那么…

python自动化办公知识点整理汇总_python自动化办公小结

在日常办公中&#xff0c;经常免不了和Excel打交道&#xff0c;每次手工处理数据&#xff0c;稍微不细心点。数据可能就出错了。而且重复的任务又会占据大量的工作时间。那有没有办法可以解决这些问题呢&#xff1f;今天介绍一种方法&#xff0c;可以解决日常工作的重复工作&am…

php 图片生成vr_PHP 使用Krpano 生成全景图

技术背景&#xff1a;krpano是一款全景漫游制作软件和工具。引用链接:开发环境:Centos6.5\PHP5.5技术实现:一: 下载官方工具包二&#xff1a;执行生成代码exec( $krpano . krpanotools makepano -config . $krpano . templates/vtour-vr.config %F . $krpano_dir_beta . /*, $…

python ks曲线_python之KS曲线

# 自定义绘制ks曲线的函数def plot_ks(y_test, y_score, positive_flag):# 对y_test,y_score重新设置索引y_test.index np.arange(len(y_test))#y_score.index np.arange(len(y_score))# 构建目标数据集target_data pd.DataFrame({‘y_test’:y_test, ‘y_score’:y_score})…