模拟刮刮乐小游戏

admin 2023年4月22日11:54:08评论166 views字数 2536阅读8分27秒阅读模式
涉及到的链接或引用的地址均会标注在文末。
先放效果图吧

模拟刮刮乐小游戏

演示图

最开始是因为我在福彩官网找到了个在线试刮,如下图

模拟刮刮乐小游戏

在线试刮

本来我想的是后端返回的一张图,前端加了个div,结果发现并不是的,这个地方用了canvas,实际是是几张图拼接起来的。

模拟刮刮乐小游戏

原图

实际是它的原图也就是背景是抠了一片白底,然后把号码和金额的图片放上去,最后组成一张完整的图,实际接口只返回了数字和数字对应的金额。
这就导致我需要在本地进行图片合成,我刚好不会图片处理,去百度了一下,用Python实现了个demo。
首先要准备已经抠好的白底图和一张原图。

模拟刮刮乐小游戏

原图

模拟刮刮乐小游戏

白底图

1、首先准备一个画布
from PIL import Image
width= #原图的宽度height= #原图的高度instance = Image.new('RGB', (width, height), (255, 255, 255)) # 创建背景为白色的空图片
2、然后把原图和白底图合并
# img_01就是原图# img_02就是白底图instance.paste(img_01)  # 以坐标(0,0)为基准粘贴第一张图片instance.paste(img_02, (0, 520))  # 以坐标(0,第一张图片的高)为基准粘贴第二张图片# 这里是把第二张图粘贴到第一张图的垂直往下520像素处,水平位置还是0
3、合并后的效果就是下面

模拟刮刮乐小游戏

4、下面就是把我们的号码和金额放上去,跟上面一样,重复操作就好了。

模拟刮刮乐小游戏

最终效果

5、主要就是图片的偏移位置,这个我是用眼睛看的,然后不断调整,所以不是很准,但是差不多。
from PIL import Image
basedir=r"" # 原图和白底图存储路径haomadir=r"" # 号码图片路径jinedir=r"" # 金额图片路径

def zgl(yuantu, gk, wodehaoma, zjhaoma): """    图片拼接 原图 白底图 我的号码(这里错了) 中奖号码(和我的号码写反了) :param pic01: 图片1路径 :param pic02: 图片2路径 :return: 保存路径 """ with Image.open(yuantu) as img_01, Image.open(gk) as img_02 ,Image.open(wodehaoma) as img_03: img1_size, img2_size = img_01.size, img_02.size width = max([img1_size[0], img2_size[0]]) height = img1_size[1] instance = Image.new('RGB', (width, height), (255, 255, 255)) # 创建背景为白色的空图片 instance.paste(img_01) # 以坐标(0,0)为基准粘贴第一张图片 instance.paste(img_02, (0, 520)) # 以坐标(0,第一张图片的高)为基准粘贴第二张图片 # 拼接我的号码 instance.paste(img_03,(215,615)) num=0 # 切割 for i in zjhaoma: print(i) # 拼接中奖号码 with Image.open(haomadir+"\"+str(i["no"])+".png") as zjpic: if num==0: instance.paste(zjpic, (300, 740)) else: size=300+(zjpic.size[0]+70)*num # print(size) instance.paste(zjpic,(size,740))
# 拼接金额 with Image.open(jinedir+"\"+str(i["value"])+".png") as jepic: if num == 0: instance.paste(jepic,(270,820)) else: # 偏移 size = 270 + (jepic.size[0] + 28) * num # print(size) instance.paste(jepic, (size, 820)) num+=1 instance.show() save_path = 'D:/image_marge.png' instance.save(save_path)
return save_path
if __name__=="__main__":
zjhm=[{"no":"09","value":"10"},{"no":"05","value":"200"},{"no":"15","value":"100000"},{"no":"06","value":"50"},{"no":"13","value":"20"},{"no":"01","value":"5000"}] wdhm=["09"] zgl(basedir+r"yuan.jpg",basedir+r"gk.jpg",haomadir+"\"+str(wdhm[0])+".png",zjhm)
6、关于金额、号码图片的下载,可以用Excel做好下载链接,放进TXT,然后用wget一键下载。
wget -i filename.txt一次下载文件内所有地址的文件
7、最后就是文件夹的东西

模拟刮刮乐小游戏

号码

模拟刮刮乐小游戏

金额

只需要我们写一个生成数字和金额的方法就好了,注意:金额有固定的组合,不是什么金额都可以。
奖级 中奖金额
1 100,000元
2 5,000元
3 500元
4 200元
5 100元
6 50元
7 20元
8 10元
9 5元
这样就做好了,不过我的机器人加了celery,为了防止生成图片的时候造成消息堵塞。
参考链接:
1、在线试刮
http://zxggl.cwl.gov.cn/h5/ggl/?act=ggl&gName=zgl5
2、图片合并
https://www.cnblogs.com/rong-z/p/16457669.html
3、celery使用方法
https://www.cnblogs.com/windyrainy/p/16747816.html
https://www.cnblogs.com/jmilkfan-fanguiju/p/10589779.html
4、机器人框架
https://github.com/Mrs4s/go-cqhttp

原文始发于微信公众号(墨雪飘影):模拟刮刮乐小游戏

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月22日11:54:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   模拟刮刮乐小游戏https://cn-sec.com/archives/1686221.html

发表评论

匿名网友 填写信息