请教各位,关于游戏战绩图片生成的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请要在回答技术问题时复制粘贴 AI 生成的内容
CannonLau
V2EX    程序员

请教各位,关于游戏战绩图片生成的问题

  •  
  •   CannonLau 2024-07-09 13:14:17 +08:00 1625 次点击
    这是一个创建于 527 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想做个收集游戏信息,输出玩家的战绩图,最近活动图,某个武器的属性图等等。

    数据信息获取是从官方 API 来的,有部分是自己需要手动整理的

    重点在于生成图片部分,我需要对收集到的信息、对应的小图标(如武器图标、属性图标等)合成一个大图片,这个大图片也是我自己设计的排版,需要让对应的信息按照固定的排版来输出。

    我做了个简单的 figma 设计: https://www.figma.com/design/BFPgN0hDG0VmrkheFtIL4J/%E7%BB%93%E6%9E%9C%E5%9B%BE

    我想咨询的问题是:
    - 如何平衡图像设计和图像生成性能部分。比如我用 figma 做设计,但是我想要渲染的时候,我需要确定每个小图像的坐标,就会比较麻烦。若我使用前端(headless chrome 等)基于 html 来获取图像,又感觉这样性能会不够,会吃很多内存,在请求量多的时候也会比较吃紧
    - 怎么做缓存机制。比如请求获取武器数据时,可能同一把武器很多个人访问,而这把武器一般是不会有变动的,那我对这种类似“静态”的数据,我想的就是第一次访问时本地也存一份,后续可以返回已经有的。另外如请求活动图时,用户之间的差异仅在数据上,用于辅助显示的图标都是相同的。那我如何对这些小图片做很好的缓存机制呢?
    - 我预期的 QPS 应该会在 3-4k 左右,主要的压力是在图片生成这里,我需要使用负载均衡一类的方法降低我服务器的压力吗?

    我目前打算使用 python 去实现,也接受更换到更高性能的语言的选项。我想做一个开源项目,因此希望部署的时候不会那么麻烦。
    5 条回复    2024-07-10 16:06:00 +08:00
    Mithril
        1
    Mithril  
       2024-07-09 13:57:07 +08:00   2
    用 headless chrome 算是比较方便的,特别是你这上面还有些文字要填,比如上面那些数值等等。而且这些东西也就初次启动比较耗时,这么简单的页面渲染一下并不废太多时间。

    当然你要是这个也不想搞,那就直接把这 HTML 扔给客户。不确定你展示给客户的结果是网页还是什么,网页的话直接嵌进去就行了。
    如果是非要个图,那你也可以直接用 SVG 。SVG 也就是个 XML ,你可以手动调好 SVG 的样式,然后在特定的位置替换进去小图标和文字。

    你可以认为 SVG 是个简化版的 HTML ,它可以用一些相对轻量的东西去渲染。比如你可以直接用个图形库,而不用拖一个 headless chrome 。
    至于负载均衡,你可以先把渲染这块写的相对独立一些。等真的压力上来了再拆成单独的服务。
    按照这个方案,不过是塞个字符串然后返回渲染好的图像,拆出来也很容易。

    另外你这些小图标,如果确实体积比较小,你可以直接存 base64 字符串。这样你替换到 HTML 或者 SVG 也都很方便。
    tomatocici2333
        2
    tomatocici2333  
       2024-07-09 14:03:32 +08:00
    啊 v2 还能看见噶点
    Yanlongli
        3
    Yanlongli  
       2024-07-09 16:57:02 +08:00
    多个图片要合成一张图片,然后对合成后的图片做缓存。
    合成是真的合成,不是堆叠在一起“看上去”像是一张。
    CannonLau
        4
    CannonLau  
    OP
       2024-07-10 14:17:59 +08:00
    @Mithril 感谢,我看完之后又去了解了一下,我个人本身对 Electron 就不是很喜欢,所以我对 headless chrome 这种有一些反感。后面我去了解了一下您提到的 svg 相关内容。

    简单浏览了一遍 MDN 上 svg 的 tutorial 后,我注意到了 <image> 标签可以嵌入 `raster image` 即 png, jpeg 等。后我又了解了一下如何渲染 svg 文件输出 png ,有几个工具库引起了我的注意:inkscape, resvg 。其余的不少也看了,但是多多少少限制比较多,特别是我还需要指定 font family 来渲染字体,我发现很多工具都对自定义字体支持有限,因此我打算先对这两个工具了解一下,然后做一个 demo 试试看效果。

    然后也问了几个朋友,他们都说我还没真正做起来,先不用太多考虑高 QPS 的事情,先做一个简单能用的版本,后面再去优化。我觉得也是,想的太多了,要先做起来。
    zikkeung
        5
    zikkeung  
       2024-07-10 16:06:00 +08:00
    html2png
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     889 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 20:55 PVG 04:55 LAX 12:55 JFK 15:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86