光图片就300多M,微信小游戏给再大的分包也难啊!

点击上方亿元程序员+关注和★星标

引言

哈喽大家好 ,有小伙伴说他们公司的游戏项目,光图片资源就高达300M,最近正在考虑上架微信小游戏。

但是 ,如此庞大的游戏资源,想通过分包的形式肯定是不行的,只能放到服务器上,通过CDN让玩家下载。

笔者还是很好奇 ,什么样的资源如此巨大,通过对小伙伴的深入了解

惊讶发现,他们的图片资源居然没有压缩!且不说图片是否过于精致、美术手笔是否过于奔放,不压缩实在是太难受了!

言归正传 ,本期将带小伙伴们一起来看下,在Cocos游戏开发中,如何省心省力地压缩图片,330M能压缩到多少。

本文源工程可在文末获取,小伙伴们自行前往。

图片压缩

图片压缩是一种在尽可能保持图片质量的前提下,减小PNG文件大小的技术。

游戏开发 中常用的图片压缩工具有TinyPNGpngquantCompressor.io等等。

pngquant是一款用于PNG图像有损压缩的命令行工具和函数库。

该转换工具 能显著减小文件大小(通常高达70%),同时保持完整的Alpha通道透明度。生成的图像兼容所有主流网页浏览器和操作系统。

常用的参数包括:

  • quality min-max:质量,使用满足或超过"最大质量"所需的最少颜色数量。若转换后的质量低于"最低质量"要求,图像将不会被保存。
  • speed N :速度,从1(暴力)到10(最快)。默认为3。速度10的质量降低5%,但比默认速度快8倍。

图片压缩实例

下面 一起来看下,在Cocos游戏开发中,如何通过插件集成到项目,使其构建后自动压缩图片。

1.资源准备

先准备 一张PNG图片,原图大小0.97M,用来确认压缩是否成功,压缩质量如何。

2.创建扩展

新建 一个项目,通过菜单扩展->创建扩展打开扩展创建面板。

我们选择构建插件,这是官方自定义构建插件的一个简单示例,点击创建扩展,我们直接在上面扩展我们的自动压缩。

3.启用扩展

通过 菜单扩展->扩展管理器打开扩展管理器,在已安装扩展中找到我们新建的插件,将其改成开启状态。

4.扩展界面

首先 我们删掉我们不需要的asset-handlers.tspanel.ts·,在builder.ts中只保留hooks配置。

接下来我们给构建面板加上一组配置,用来控制压缩是否开启、压缩的质量以及压缩的速度:

代码整理如下:

  • 启用复选框 (ui-checkbox):默认不开启。
  • 最小质量滑块 (ui-slider):0-100,默认65,步进1
  • 最大质量滑块 (ui-slider):0-100,默认80,步进1
  • 速度滑块 (ui-slider):1-10,默认3,步进1
  • 校验最大质量>=最小质量 :

最后 通过npm installnpm run build编译即可。

打开构建面板就可以看到我们添加的内容:

5.构建后压缩

界面 控制添加完之后,我们需要把pngquant压缩植入到构建完成的钩子(onAfterBuild)里,使其构建完成后自动按照配置的参数进行压缩。

代码整理如下:

  • 检查 是否启用了质量控制:
  • 提前 准备好压缩的工具,这里包括winmac 的,并且根据系统选择:
  • 在构建后目录 递归查找所有图片文件:
  • 组装命令开始逐个压缩

6.测试

编译代码后,打开我们的构建面板,开始进行构建,构建完成后可以点开日志查看:

从日志 可以看出原文件大小: 1002.9KB, 压缩后大小: 179.6KB, 压缩了82.1%,提示压缩成功。

打开构建好的目录,找到我们的资源,可以看到已经压缩完成:

图片压缩进阶

1.过滤

通常游戏中会有一些图片为了避免模糊,例如主界面,会通过配置的或者特殊文件名开头的形式进行过滤,不进行压缩,小伙伴们在面板或者文件配置,然后压缩前过滤即可。

2.记录

图片比较多 ,每次构建耗时比较长的话,可以把压缩提前到构建之前,并通过MD5记录表示图片已经压缩,直接跳过该文件,避免重复压缩。

结语

通过 压缩,小伙伴的图片资源从330M降到了273M,压缩了18%。感觉剩余资源还是比较大,建议从其他方式进行检查和处理,例如查找没依赖的资源删除找美术重造等等。

不知道小伙伴们有没有其他更好的办法呢?

本文源工程 可通过私信 发送 PngExtension 获取。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。

实不相瞒,想要个爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

知识付费专栏

你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~

100个Cocos实例

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

点击下方灰色按钮+关注。

相关推荐
中工钱袋1 小时前
前端请求到底是从哪里发出去的?
前端
じòぴé南冸じょうげん4 小时前
若依框架favicon.ico缓存更新问题解决方案:本地生效但线上未更新
前端·javascript·前端框架·html
狮子座的男孩4 小时前
js基础高级:01、数据类型(typeof、instanceof、===的使用)、数据与变量与内存(定义、赋值与内存关系、引用变量赋值、js调函数传参)
前端·javascript·经验分享·数据类型·数据与变量与内存·赋值与内存关系·引用变量赋值
Cyclo-7 小时前
PDFJS 在React中的引入 使用组件打开文件流PDF
前端·react.js·pdf
椒盐螺丝钉9 小时前
Vue Router应用:组件跳转
前端·javascript·vue.js
顾安r9 小时前
11.20 开源APP
服务器·前端·javascript·python·css3
敲敲了个代码10 小时前
CSS 像素≠物理像素:0.5px 效果的核心密码是什么?
前端·javascript·css·学习·面试
少云清10 小时前
【软件测试】5_基础知识 _CSS
前端·css·tensorflow
倔强青铜三10 小时前
AI编程革命:React + shadcn/ui 将终结前端框架之战
前端·人工智能·ai编程