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压缩结果对比的更多相关文章

  1. C#对图片文件的压缩、裁剪操作初探

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  2. C#对图片文件的压缩、裁剪操作

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  3. IOS_画图 图片等比压缩 IOS_UIImage

    - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{ // 创建一个bitmap的context // 并把它设置成为当前正在使用的co ...

  4. php分10个不同等级压缩优化图片

    今天找到一个php写的压缩图片程序,可以分10个等级(0-9)来压缩,0等级时压缩比率不是很大,图片不会失真:随着压缩等级不断增大,图片会变得越来越不清晰,通常压缩后图片大小可以减少到原来的50%,压 ...

  5. 通过FileWatcher,监听通过web上传的图片,并进行压缩

    需求是这样的,通过web传输过来的图片,无论是JS上传,还是其他的上传方式,都需要生成2张缩略图,分别是用于商品列表的小图small,和用于分享的小图share.基于不同上传方式的不同需求,使用exe ...

  6. iOS 图片按比例压缩,指定大小压缩

    使用系统方法UIImageJPEGRepresentation(UIimage *image,CGFloat quality)进行图片质量压缩,暂且叫参数quality为压缩比吧,取值范围为0-1. ...

  7. php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明

    php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切.压缩.合并.插入文本.背景色透明等.并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法 ...

  8. C# 压缩PDF图片

    文档中包含图片的话,会使得整个文档比较大,占用存储空间且不利于快速.高效的传输文件.针对一些包含大量高质图片的PDF文档,若是对图片进行压缩,可以有效减少文档的占用空间.并且,在文档传输过程中也可以减 ...

  9. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

随机推荐

  1. Day18 (一)类的加载器

    一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡. 如果在同一台计算机上同时运行多个Java程序 ...

  2. empty与isset,null与undefined

    一. null VS undefined VS NaN 1. null 定义:null是特殊的object,是空对象,没有任何属性和方法. document.writeln(typeof null); ...

  3. PAT乙级1019

    1019 数字黑洞 (20 分)   给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直 ...

  4. C语言程序设计I—第六周教学

    第六周教学总结(8/10-14/10) 教学内容 第二章 用C语言编写程序 2.4 输出华氏-摄氏温度转换表 课前准备 在蓝墨云班课发布资源: PTA:2018秋第六周作业 分享码:88C28D89E ...

  5. (转)Fiddler菜单栏详解

    原文作者:子信风蓝蓝 传送门:http://www.cnblogs.com/chengchengla1990/p/5681775.html Statistics 页签 完整页签如下图: Statist ...

  6. 【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)

    次元传送门:洛谷P4158 思路 f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数 显然的是 每次换行都要增加一次次数 那么当j ...

  7. P1719 最大加权矩形

    题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没 ...

  8. P1131 [ZJOI2007]时态同步

    题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点 ...

  9. Msys/MinGW与Cygwin/gcc

    一. MinGW MinGW 官方网站为 http://www.mingw.org/ MinGW,即 Minimalist GNU For Windows(GCC compiler suite).它是 ...

  10. Hibernate第三天——表间关系与级联操作

    第三天,我们来使用Hibernate进行表之间一对多 多对多关系的操作: 这里我们先利用两个例子进行表关系的回顾: 一对多(重点): 例如分类和商品的关系,一个分类多个商品,一个商品属于一个分类 CR ...