Imagine icon indicating copy to clipboard operation
Imagine copied to clipboard

相比341KB、功能更丰富的PngOptimizer,Imagine也太笨重了……

Open MY1L opened this issue 3 years ago • 9 comments

psydk.org - PngOptimizer,free software,GNU GPL 2许可,源码在 https://github.com/hadrien-psydk/pngoptimizer ,它主要是无损压缩png,有如下功能:

  • 清除PNG文件中冗余或错误的信息。Cleans your PNG files of useless or wrong information.
    • PNG这个格式可以附带一些附件(bkGD块、tEXt块),比如最近流行的stable-diffusion-webui可以在png里附带整个prompt数据,这会让png有冗余,该软件可以选择直接删除这些,也可以不删。
    • PNG的隔行扫描数据也可以选择是否清除。
  • 无损压缩PNG。Reduces your PNG files weight.
    • 压缩前和压缩后的PNG,用画图分别转为BMP,一个字节都不差,这就是“无损”
    • 软件会自动检测图像真实的色数,比如发现png32没有任何透明通道,就会转png24,发现png颜色不超过256,就会转png8(含透明通道)、png4……
    • 如果你信任该软件,可以选择让它自动覆盖原png,也可以保留备份原图。
    • 它甚至可以选择保留原图修改日期。
  • BMP、GIF、TGA的图像“无损”转换为PNG。Converts into PNG other lossless image formats (BMP, GIF, TGA).
    • “无损”不计非图像部分的元数据。上面提到的覆盖原图功能不会覆盖非png文件。
  • 也支持动画PNG(APNG)。Supports animated PNG (APNG).
    • 不光可以无损压缩APNG,动画GIF也可以无损压缩为APNG!当然也可以选择跳过。
    • 我不用装专门制作APNG的软件了,只要用已有的GIF软件做动画,丢给它转换,除非需大于256色或半透明的情况。
  • 易于创建PNG截图。Creates easily available PNG screenshots.
    • 就是把剪贴板中图像内容转PNG:只要对着软件窗口Ctrl+V即可,剩下的压缩、命名、生成png到指定文件夹,配置好了软件可以全自动完成。
  • 简单高效的用户界面。Offers a simple and productive user interface.
    • 批量选择并拖拽已经很高效,但这个软件更高效:我只是创建一个快捷方式丢到\AppData\Roaming\Microsoft\Windows\SendTo,从此以后我只需要选择一批图片,然后右键“发送到”,就可以批量压缩或转换了。
    • 虽然软件有大量选项,但一次配置好可以一直不用改。

其压缩包 version 2.7 x64 (zip 184 kB),解压后主程序仅341KB,运行时不释放其它东西,绿色软件,所有配置放在同文件夹下PngOptimizer.ini,无它。

PngOptimizer相比Imagine的缺点是不能压缩jpg、webp,但我已经在用mozilla/mozjpeg命令行无损压缩jpg了。而b站恶意不支持webp上传,所以我一时还不需要。


我其实是用惯了mozjpeg命令行(当然也是右键“发送到”bat,很方便)想找个图形界面的,于是看到了同样用mozjpeg压缩的Imagine,而且还能压缩png,想着找到宝了,但用了便携版几分钟发现了不少缺点:

  • Imagine-0.7.2.exe“便携版”体积有53.6MB,但功能竟然无法代替PngOptimizer+mozjpeg?尤其这两都开源的……
  • 虽然这是便携格式,但每次启动都会在后台疯狂释放一个app-64.7z,卡。看释放的是Electron,差不多相当于解压了一个小chromium浏览器(不禁想起为什么 electron 不做成独立的 runtime?),在关闭之时又会迅速删除释放的东西,这样每次开关都会大量读写硬盘消耗寿命,而且还慢,所以推荐大家选择安装版(虽然我没用过)
  • 然后这不是绿色软件,便携版虽然会删除释放的东西,但会在系统\AppData\Roaming\Imagine下保留一套chromium浏览器配置和缓存。
  • 压缩中途每动一下选项,比如压缩率滑动条,就会在系统\AppData\Local\Temp\imagine下生成一张图。我只是滑动一下压缩率就看见Everything显示Imagine连续生成7张图,这些不会在退出时删掉,考虑到便携版往往不在自己机器上用,这有可能泄露隐私,而PngOptimizer和mozjpeg都不会写Temp并保留。
  • 最大的问题:没保证无损压缩。PngOptimizer是可以智能计算png包含多少色选择最小的格式,用mozjpeg的原因也是它可以保证压缩jpeg前后一个像素都不变(jpeg是有损格式,在webp出现之前,转换为其它格式要么更损要么更大,所以我用了mozjpeg很多年)而Imagine找不到有这样的智能选项。

最后,我十分期待有个功能完全覆盖PngOptimizer+mozjpeg的易用图形界面,软件体积都无所谓了。

MY1L avatar Oct 19 '22 16:10 MY1L

Imagine 的设计初衷,是为有损压缩提供实时调整预览效果的能力,让网页素材在肉眼可接受失真范围内尽可能体积。 所以它除了有列表,还有一个单独的页面,用来做压缩前后效果对比(以及随时调整)。

显然 Imagine 对 UI 的要求更高,考虑到跨平台的需求(我工作用 Mac,娱乐用 Windows),就使用了 Electron。

Imagine-0.7.2.exe“便携版”体积有53.6MB,但功能竟然无法代替PngOptimizer+mozjpeg?尤其这两都开源的

用 Electron 开发的,体积能不大吗。功能无法替代 mozjpeg 是因为 没有把 mozjpeg 的参数开放出来。

BTW,现在正在尝试用 Tauri 替代 ELectron,但是 Tauri 的能力偏弱,目前还替换不了。

虽然这是便携格式,但每次启动都会在后台疯狂释放一个app-64.7z... 然后这不是绿色软件,便携版虽然会删除释放的东西...

这是是 Electron Builder 的问题,不清楚有没有选项能控制。

压缩中途每动一下选项,比如压缩率滑动条,就会在系统\AppData\Local\Temp\imagine下生成一张图

因为需要实时预览压缩效果,这些文件是缓存,避免来回调整时每次都生成。

这个后面可以在关闭图片、软件的时候删一下。

没保证无损压缩

Imagine 的整个设计就是围绕有损压缩来搞的,后面可能提供无损的选项。 如果仅仅是需要无损压缩,直接命令行就行了啊。PNG 的话你可以试试 oxipng

...BMP...APNG...

目前的实现是直接 exec 调用 mozjpeg / pngquant 命令行来做的,扩展新能力比较困难。等迁移到 Tauri 的时候会直接调用编解码 API 来做,到时候就可以支持 APNG 压缩、更多输入输出格式。

功能完全覆盖PngOptimizer+mozjpeg的易用图形界面

从来没有考虑过功能完全覆盖 xxx,尤其是完全覆盖命令行工具。 不过呼声较高的参数会考虑暴露出来。

meowtec avatar Oct 20 '22 06:10 meowtec

我十分理解其中多数是Electron的问题,也曾试过国内外各种Electron程序(像是比千千静听大数十倍却属于电子垃圾的“百度音乐”——不知百度收购千千图啥),但都放弃选择其对应的网页版了。我想寻求压缩图片体积的人,可能也在乎软件体积,因此我“功能完全覆盖”的意思是,即便把这些功能都加上,大头还是Electron(指软件体积也不会变更大了)

其实我是个眼高于手的画手,比如头像就我画的,所谓“眼高”是指一般的“肉眼可接受失真”在1080p24寸屏幕下看来都不可接受。我以前用过TinyPNG,能看到其png8上透明背景仿色抖动的每一个像素点,pngquant的也是,当然也能看见低压jpg的噪点,所以干脆打消了有损压缩的想法。而无损压缩特点是“压前压后图像不变,只管压没顾虑”,我可以批量“发送到”PngOptimizer几十上百张,放心让它在后台一把子压缩而不预览——也就不需要软件写缓存,PngOptimizer和mozjpeg使用中都未见图片格式的缓存。 **所以提议加个类似PngOptimizer的“放心压缩”的系列选项,可以通过右键“发送到”自动批量处理且免去缓存:无损也不需要对比。**只是不清楚Electron是否能实现,还没见过这样的Electron程序。

如果仅仅是需要无损压缩,直接命令行就行了啊。PNG 的话你可以试试 oxipng

这个……不太理解你推荐我(放着PngOptimizer不用)用命令行的oxipng,是否我上文没表达清楚:我已经在用命令行的mozjpeg无损压缩,就是因为遍寻不得一个“有界面的mozjpeg”才找到这儿的呀。 我用的mozjpeg.bat写得不好,不支持有特殊符号的文件路径也不支持批量压缩,希望有界面的mozjpeg能解决(如有)

MY1L avatar Oct 20 '22 17:10 MY1L

@MY1L 在 Imagine 底层迁移到 rust + tauri 之前,没有提供类似能力的计划。因为目前底层是 NodeJS 调用 pngquant 二进制可执行文件来压缩的,pngquant 就是做索引色有损压缩的,所以想做 PNG 无损压缩,就需要额外引入一个压缩器进来,在现在的实现下还要考虑多平台,会稍微有些麻烦。

无损压缩的功能考虑在新版本(tauri)中提供,但是 tauri 部分能力还满足不了要求,所以进度会受到影响。不过我可能会先搞个预览版出来。

meowtec avatar Oct 21 '22 06:10 meowtec

等等,如果受限于pngquant,可以先不做PNG无损压缩,毕竟PNG压缩在win和mac都分别有界面工具,但jpg无损压缩界面工具我还没找到。 我又看了mozjpeg的usage.txt,发现它(jpegtrans.exe)不仅可以无损压缩,还可以无损旋转、甚至无损裁切?以及rdjpgcom.exe也有用途……这2个命令行exe很小,既然Imagine已经用了cjpeg.exe,我想附带上这2个不影响体积。

MY1L avatar Oct 28 '22 14:10 MY1L

若考虑跨平台的兼容性,目前electron+bin虽然笨重但却是比较通用的方式,对于80MB的应用体积我觉得不是很难接受,比这重的同类应用比比皆是,个人认为关键还是跨平台兼容性有保障的前提下再去修改底层架构比较妥善 对于M1 Mac来说,至少我能自己克隆仓库到本地并轻松本地编译出arm64的版本出来,换做其他架构可能没这么容易

ghost avatar Dec 16 '22 04:12 ghost

站在开发者的角度上需要一个可以服务器部署开箱即用的版本,让编辑人员来压缩完图片再上传,好难。

chaegumi avatar Mar 23 '23 01:03 chaegumi

imagine所有任务都是在本地执行的吗

Eyion avatar Mar 29 '23 05:03 Eyion

imagine所有任务都是在本地执行的吗

meowtec avatar Mar 29 '23 08:03 meowtec