使用FFMPEG 压缩png图片 与tinypng压缩结果对比
Tinypng https://tinypng.com/ 一个在线png压缩工具
FFmpeg https://ffmpeg.org/download.html
原图 903 kb

Tinypng压缩过的 96KB

目标就是用FFmpeg做到近似Tinypng的处理效果
首先是判断颜色格式 这里我提前做好了准备 原图的rgb24 输出是 pal8 也就是输入 24位 输出256色
如果不清楚 可以用下面的命令来输出一个log看一眼
ffprobe -hide_banner -v quiet -print_format json -show_format -show_streams in.png > in.log
in.log文件中 "pix_fmt": "pal8", 这个就是对应的色彩
直接转换 颗粒感很厚重 而且体积也不小 123 KB
ffmpeg -hide_banner -i in.png -pix_fmt pal8 out_1.png

效果看起来很差,于是我想到了降噪
ffmpeg -hide_banner -i in.png -pix_fmt pal8 -vf dctdnoiz=4.5 -y out_2.png
2D DCT降噪 但好像没什么效果 看来原因并不是这样的 124 KB

我尝试调整了多种降噪和dither参数 但是效果都很惨 这里就不细说了
看起来问题并不是出在内容上面,应该是思路有错误
后来友人提醒:
我看了下圖像信息
不會是因爲調色板吧?
統計一下,第一張圖用到了256色
第二張衹有133
那麽就是第一張圖用了調色板來映射256色
而第二張就是老老實實地按照原本的256色來
其實gif就是這樣的
通過調色板來映射256色,所以能勉强達到一個能接受的效果
好吧 看来需要优化一下调色板
ffmpeg -i in.png -vf palettegen=max_colors=256:stats_mode=single -y out_3.png
这里的输出结果是一个调色板 并不是完整图像 由于这是单张静图所以mode使用的是single
这个参数有几种具体区别可以看文档 http://ffmpeg.org/ffmpeg-all.html#palettegen-1
再用优化过的调色板去转换 得到结果 116 KB
ffmpeg -i in.png -i out_3.png -lavfi "[0][1:v] paletteuse" -pix_fmt pal8 -y out_4.png

至此,效果上已经可以接受了但是体积还差10KB的差距,我还是搞不清楚差距在哪里。
如果有人知道希望可以指导一下
使用FFMPEG 压缩png图片 与tinypng压缩结果对比的更多相关文章
- C#对图片文件的压缩、裁剪操作初探
在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...
- C#对图片文件的压缩、裁剪操作
在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...
- IOS_画图 图片等比压缩 IOS_UIImage
- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{ // 创建一个bitmap的context // 并把它设置成为当前正在使用的co ...
- php分10个不同等级压缩优化图片
今天找到一个php写的压缩图片程序,可以分10个等级(0-9)来压缩,0等级时压缩比率不是很大,图片不会失真:随着压缩等级不断增大,图片会变得越来越不清晰,通常压缩后图片大小可以减少到原来的50%,压 ...
- 通过FileWatcher,监听通过web上传的图片,并进行压缩
需求是这样的,通过web传输过来的图片,无论是JS上传,还是其他的上传方式,都需要生成2张缩略图,分别是用于商品列表的小图small,和用于分享的小图share.基于不同上传方式的不同需求,使用exe ...
- iOS 图片按比例压缩,指定大小压缩
使用系统方法UIImageJPEGRepresentation(UIimage *image,CGFloat quality)进行图片质量压缩,暂且叫参数quality为压缩比吧,取值范围为0-1. ...
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明
php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切.压缩.合并.插入文本.背景色透明等.并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法 ...
- C# 压缩PDF图片
文档中包含图片的话,会使得整个文档比较大,占用存储空间且不利于快速.高效的传输文件.针对一些包含大量高质图片的PDF文档,若是对图片进行压缩,可以有效减少文档的占用空间.并且,在文档传输过程中也可以减 ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
随机推荐
- http_load安装和使用
一.安装 wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz tar zxvf http_load-12mar20 ...
- select、poll 和epoll区别
阻塞 I/O(blocking IO) 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据(对于网络IO来说,很多时候数据在一开始还没有到达.比如,还没有收到 ...
- 2019年北航OO第1单元(表达式求导)总结
2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化 ...
- node vue 开发环境部署时,外部访问页面出现: Invalid Host header 服务器域名访问出现的问题
这是新版本 webpack-dev-server 出于安全考虑, 默认检查 hostname,如果hostname不是配置内的,将中断访问.顾仅存在于开发环境: npm run dev,打包之后不会 ...
- The Gene of Bitizens
1. Summary The document is about the general idea of the architecture design of the Bitizen ...
- QT中QToolTip样式设置的两种方式
方式一 使用样式表设置 ui.label->setStyleSheet("QToolTip{border:1px solid rgb(118, 118, 118); backgroun ...
- golang实现简单的栈
栈的ADT 数据 栈的数据对象集合为{a1,a2,a3...an},具有相同数据类型,有唯一前驱后续 操作 InitStack() *Stack //初始化操作,创建一个空栈 Clear() //清空 ...
- MIPS架构——汇编代码转机器代码编译器 Matlab GUI
MIPS架构下的MCU,指令集包含R-Type.I-Type.J-Type三种,在数电课程设计时为了给MCU编写指令集,需要将汇编语言转化成机器代码,这里分享一下自己写的Matlab 的 GUI. 主 ...
- 【转】枚举enum学习小记
原帖: http://hi.baidu.com/yuleishou/item/caacae872190031ec216272f 表示在vs2008下实验了一下,有些东西和原帖的还是不一样的,都贴在这里 ...
- tomcat : 虚拟路径映射
tomcat设置虚拟访问地址和真实路径的映射,方法有几种,这里介绍常用的两种方式: 一.修改server.xml文件: 步骤如下: 1.在tomcat根目录下打开conf文件夹,该文件夹下有个ser ...