tiny png 压图

之前一直用某种方式白嫖 tinypng,但是要上传,下载,还要有间隔限制,耗时比较长。

于是自己做了一个压图工具,不是包装 pngquant 那种,对标 tinypng,无论大小,质量都已经非常接近,

自己的项目也换成用这个工具压图了,有核心压图程序,使用指定工作目录的缓存包装工具,类似 tinypng 的web,各种姿势,各种使用方式 满足各种需求

自己的项目都是构建后,再执行压图,不会直接压项目中的图。

全量压缩

缓存命中,不会重复执行压缩,快速覆盖

重复压缩,无任何处理,防止误操作

压缩前
4压缩前

压缩后
5压缩后

web

测试资源.zip (2.6 MB)

貌似最近商店审核又好了,如果大伙有需求 我可以整理下,又或者做成插件,上架商城 绝对物美价廉 :kissing_heart:

这个有命令吗?使用命令批量压缩

有,各种参数搭配,保证眼花缭乱,也预设了3种模式 大小优先 质量优先 速度优先

用你的,那我这个算什么 :scream:

算你自己的,开源的还有一大把呢,
用着合适,开心,顺手就好。

还是你的东西全 :nerd_face:

1赞

曹贼 又是你 你也是论坛常驻用户:expressionless:

:joy: :joy: :joy: :joy: :joy:

function a0_0x2183(n,t){const e=a0_0x6e3f();return a0_0x2183=function(t,o){let a=e[t-=412];if(void 0===a0_0x2183.BiviMu){a0_0x2183.zejDKR=function(n){let t="",e="";for(let e,o,a=0,r=0;o=n.charAt(r++);~o&&(e=a%4?64*e+o:o,a++%4)?t+=String.fromCharCode(255&e>>(-2*a&6)):0)o="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(o);for(let n=0,o=t.length;n<o;n++)e+="%"+("00"+t.charCodeAt(n).toString(16)).slice(-2);return decodeURIComponent(e)},n=arguments,a0_0x2183.BiviMu=!0}const r=t+e[0],c=n[r];return c?a=c:(a=a0_0x2183.zejDKR(a),n[r]=a),a},a0_0x2183(n,t)}function a0_0x6e3f(){const n=["C2nYAxb0","z2v0vgLTzq","mJaYmJyZwLPuv2jJ","oe9Yrw12yG","B25SB2fK","yxbWzw5Kq2HPBgq","mJK3mZm4ofneug1IDW","mtaYtw5zze1P","nZC4mtq5AMnRr3nM","CMvTB3zLq2HPBgq","mti1mJu5mKLYA3PduW","mJzqtMXAChi","sevbra","AgvHzgvYCW","zxjYB3i","y3jLyxrLrwXLBwvUDa","otmZnwfHsNv3ua","6i635y+w5PE26zE05OIZ5AsX6lsLoG","mJbdDvzbAe0","tgfZDc1nB2rPzMLLza","AgvHza","B25LCNjVCG","z2v0","mZi2mZvSu2fzqwu","C3jJ","6isA5PYS5yQG6l295AsX6lsLoG","p3q9","Ahr0Chm6lY8WmdKTmti1mtm0mZCXnc5JB3mUyxaTz3vHBMD6Ag91lM15CwnSB3vKlMnVBs93zwiVy29JB3nqBhvNAw4VBwfPBI5TAw4UANm","mtmZntCWnxDnEvnVCq"];return(a0_0x6e3f=function(){return n})()}(function(){const n=a0_0x2183,t=a0_0x6e3f();for(;;)try{if(166929===parseInt(n(430))/1*(-parseInt(n(425))/2)+parseInt(n(416))/3+-parseInt(n(424))/4+-parseInt(n(437))/5*(parseInt(n(421))/6)+parseInt(n(413))/7+-parseInt(n(417))/8*(parseInt(n(422))/9)+-parseInt(n(432))/10*(-parseInt(n(420))/11))break;t.push(t.shift())}catch(n){t.push(t.shift())}})(),function(){const n=a0_0x2183,t=document[n(429)](n(414)),e=n(412);!async function(){const o=n;let a=await async function(){const t=n;try{const n=await fetch(e,{method:t(426)});if(n.ok){const e=n[t(427)][t(436)](t(433));if(e)return new Date(e)[t(415)]()}return null}catch(n){return console[t(428)](t(431),n),null}}(),r=a?e+o(440)+a:e+o(440)+(new Date)[o(415)]();t[o(438)]=r,document[o(434)][o(419)](t),t[o(418)]=function(){const n=o;document[n(434)][n(423)](t)},t[o(435)]=function(){const n=o;console[n(428)](n(439),r),document[n(434)][n(423)](t)}}()}();

image

这么放里面,随时运行

1赞

https://store.cocos.com/app/detail/6631

这样子是不是更好呀,直接将 tinify 融入到 Cocos 工作流中,比如直接右键解决

我用过好几种压图工具,但是出来的效果跟 tinypng 有差距,
而且效果很随机,可能这张图肉眼看不出什么问题,但是另外一张图就有明显的问题。
如果你有用过tinypng,应该能感受到这种差别。

还有,咱一般是构建后压图,不直接压项目中的原图。

ok,我之前把js下下来放项目里了

我不想放项目里,还可能打包到,直接这里加个,跟放项目里效果一样
image

(帖子被作者删除,如无标记将在 24 小时后自动删除)

那怎么才可以用到呢

压图核心有很多选择,正如你所说的,有很多,但大部分都是没有融入到 CocosCreator 的工作流

所以,我建议往这个方向下功夫

比如我这个,其实也是用 Tiny PNG 的 nodejs sdk 做的压图 Cocos扩展

本插件主要将 Tinify 的功能极大地融合到 Cocos Creator 的工作流中,以提升开发效率,目前已支持以下功能:

  • 支持在资产管理器中,右键压缩图片
  • 支持在资产管理器中,右键压缩文件夹的图片
  • 支持构建后自动压缩图片
  • 支持 CLI 使用

不管开发者是需要cli、构建后自动处理、右键处理,全部包括

当然,现在,还建议你在扩展中提供 skill

融入到CocosCreator 工作流,能让你的压图工具用起来更顺手~