新年将至,先祝大家新年快乐:顶上的小贺卡还好吗?其实这是通过Serverless架构自动生成的。测试地址:serverless.0duzhan.com核心代码是Python依赖pillow,复制粘贴各种图片:#-*-coding:utf8-*-importqrcode,uuid,json,base64fromPILimportImage,ImageDraw,ImageFontdefreturn_msg(error,msg):return_data={"uuid":str(uuid.uuid1()),"error":error,"message":msg}print(return_data)returnreturn_datadefget_qrcode(url):qr=二维码。QRCode(error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=8,border=1,)#传入数据qr.add_data(url)qr.make(fit=True)#生成二维码img=qr.make_image()#保存二维码img.save('/tmp/qrcode.png')returnImage.open('/tmp/qrcode.png').convert("RGBA")defget_input_str(input_str,font,draw,need_height=False):length=0new_str=""max_height=[]foreveininput_str:width,height=draw.textsize(eve,font)max_height.append(height)length=length+width如果长度>804且eve!="\n":length=widthnew_str=new_str+"\n"+eveelse:new_str=new_str+eveifneed_height:iflen(new_str.split("\n"))>10:返回假return(new_str,max(max_height)*len(new_str.split("\n"))if"\n"innew_strelsemax(max_height))else:returnnew_strdefdo_watermark(temp_watermark_pic,watermark_pic_new_x,watermark_pic_new_y):foriinrange(watermark_pic_new_x):forkinrange(watermark_pic_new_y):color=temp_watermark_pic.getpixel((i,k))如果颜色!=(255,255,255,0):color=color[:-1]+(40,)temp_watermark_pic.putpixel((i,k),color)returntemp_watermark_picdefmain_handler(event,context):尝试:json_data=json.loads(event["body"])frame_file="./base/frame/%s.png"%(json_data["frame"])title_file="./base/word/%s.png"%(json_data["title"])watermark_file="./base/others/%s.png"%(json_data["watermark"])font=ImageFont.truetype('./base/font/%s.ttf'%(json_data["font"]),40)input_str=json_data["text"]from_str=json_data["from"]to_str=json_data["to"]symbol_file="http://serverless.0duzhan.com/app/new_year_greeting_card/fu.html?id=%s"%(json_data["symbol"])exceptExceptionase:print(e)returnreturn_msg(True,"参数获取失败")iflen(from_str)>20:returnreturn_msg(True,"收件人昵称不能超过20个字符")iflen(to_str)>20:returnreturn_msg(True,"收件人昵称不能超过20个字符")iflen(input_str)>200:returnreturn_msg(True,"祝福内容不能超过200个字符")try:temp_base_pic=Image.new('RGBA',(954,1348),(255,255,255))frame_pic=Image.打开(frame_file).convert("RGBA").resize((954,1348),Image.ANTIALIAS)title_pic=Image.open(title_file).convert("RGBA")watermark_pic=Image.open(watermark_file).convert("RGBA")title_pic_x,title_pic_y=title_pic.sizetitle_pic_new_x=310title_pic_new_y=int(title_pic_y*title_pic_new_x/title_pic_x)title_pic=title_pic.resize((title_pic_new_x,title_pic_new_y),图片.ANTIALIAS)watermark_pic_x,watermark_pic_y=watermark_pic.sizewatermark_pic_new_x=800watermark_pic_new_y=int(watermark_pic_y*watermark_pic_new_x/watermark_pic_x)watermark_pic=watermark_pic.resize((watermark_pic_new_x,watermark_pic_new_y),Image.ANTIALIAS)temp_watermark_pic=Image.new,('waterx_pic_new',(watermark_pic_new_y),(255,255,255,0))temp_watermark_pic.paste(watermark_pic,(0,0),watermark_pic)temp_watermark_pic=do_watermark(temp_watermark_pic,watermark_pic_new_x,watermark_pic_new_y)temp_base_pic.paste(frame_pic,(0,0),frame_pic)temp_base_pic.paste(title_pic,(320,30),title_pic)temp_base_pic.paste(temp_watermark_pic,(77,int((1348-int(watermark_pic_new_y))/2)),temp_watermark_pic)temp_base_pic.paste(get_qrcode(symbol_file),(340,950),get_qrcode(symbol_file))draw=ImageDraw.Draw(temp_base_pic)draw.text((75,300),get_input_str(to_str+":",font,draw),(0,0,0),font=font)临时数据=get_input_str(input_str,font,draw,True)ifnottemp_data:returnreturn_msg(True,"不要太多的换行哦")input_str,content_height=temp_datadraw.text((75,400),input_str,(0,0,0),font=font)length_data=850foreve_apinfrom_str:width,height=draw.textsize(eve_ap,font)length_data=length_data-widthdraw.text((length_data,content_height+400),get_input_str(from_str,font,draw),(0,0,0),font=font)draw.text((415,1240),get_input_str("扫码抽取新年福",font,draw),(0,0,0),font=ImageFont.truetype('./base/font/01.ttf',20))temp_base_pic.save("/tmp/test_output.png")withopen("/tmp/test_output.png","rb")作为f:base64Data=str(base64.b64encode(f.read()),encoding='utf-8')returnreturn_msg(False,{"picture":base64Data})exceptExceptionase:print(e)returnreturn_msg(True,"贺卡生成失败")deftest():event={"requestContext":{"serviceId":"service-f94sy04v","path":"/test/{path}","httpMethod":“POST”,“requestId”:“c6af9ac6-7b61-11e6-9a41-93e8deadbeef”,“identity”:{“secretId”:“abdcdxxxxxxxsdfs”},“sourceIp”:“14.17.22.34”,“stage”:“release”"},"headers":{"Accept-Language":"en-US,en,cn","Accept":"text/html,application/xml,application/json","Host":"service-3ei3tii4-251000691.ap-ghuangzhou.apigateway.myqloud.com","User-Agent":"UserAgentString"},"body":json.dumps({"frame":"18","title":"1","watermark":"5","font":"FontManagerQiaoQiaoTi","text":"祝您新的一年身体健康,万事如意,天天开心,工作顺利!祝您身体健康,万事如意!新的一年,万事如意,天天开心,工作顺利!祝你身体健康,新年好运,天天开心,工作顺利!祝你身体健康,万事如意,天天开心祝您在新的一年里,身体健康,万事如意,天天开心,工作顺利!祝您身体健康,万事如意,天天开心,新的一年工作顺利!","symbol":"945a0cc6430f6ef661bc14773e122f98","from":"dfounderliu","to":"anycodes"}),"pathParameters":{"path":"value"},"queryStringParameters":{"foo":"bar"},"headerParameters":{"Refer":"10.0.2.14"},"stageVariables":{"stage":"release"},"path":"/test/value","queryString":{"foo":"bar","bob":"alice"},"httpMethod":"POST"}print(main_handler(event,None))if__name__=="__main__":test()非常简单有趣。这里,pillow可能是在centos机器下打包的。为了更简单方便的操作,你可以使用这个工具:完成后,你可以Happydeployment:new_year_greeting_card:component:"@serverless/tencent-scf"inputs:name:myapi_new_year_greeting_cardcodeUri:./exclude:-.gitignore-.git/**-.serverless-.env处理程序:index.main_handler运行时:Python3。6地区:ap-beijing描述:贺年片memorySize:256timeout:5events:-apiw:name:serverlessparameters:serviceId:service-8d3fi753environment:releaseendpoints:-path:/new_year_greeting_card描述:贺年片方法:POSTenableCORS:trueparam:-name:fromposition:BODYrequired:'FALSE'type:stringdesc:用户昵称-name:toposition:BODYrequired:'FALSE'type:stringdesc:昵称name:frameposition:BODYrequired:'FALSE'type:stringdesc:frameimage-name:titleposition:BODYrequired:'FALSE'类型:字符串描述:标题图像-名称:水印位置:BODY需要:'FALSE'类型:字符串描述:水印图像-名称:字体位置:BODY需要:'FALSE'类型:字符串描述:字体-名称:符号位置:BODY要求:'FALSE'类型:字符串desc:字符图像-name:textposition:BODYrequired:'FALSE'type:stringdesc:Text开源地址:https://github.com/anycodes/S...
