我正在尝试将一些图像转换为PNG或JPG,并试图找出哪种格式将导致文件更小。在大多数情况下,PNG将为我提供最佳压缩效果,但是从JPG中我可以得到更好的压缩效果。我有两个问题:
图像的哪些特征将使其获得更好的效果?
有没有一种方法可以预先确定哪种格式会给我带来更好的结果而无需先转换它们?
这张照片使用PNG可以提供更好的压缩效果
这张照片使用JPG提供了更好的压缩效果
我绝对没有时间进一步发展这种思路,但是图像熵可能是选择JPEG或PNG的一个很好的判别式-请参阅我之前对您的问题的评论。
如果使用ImageMagick,则可以像下面这样轻松地计算熵:
identify -verbose -features 1 image.jpg | grep -i -A1 entropy
您的顶部图像给出了如下输出:
identify -verbose -features 1 t.jpg | grep -i -A1 entropy
Sum Entropy:
0.703064, 0.723437, 0.733147, 0.733015, 0.723166
Entropy:
1.01034, 1.12974, 1.14983, 1.15122, 1.11028
Difference Entropy:
0.433414, 0.647495, 0.665738, 0.671079, 0.604431
底部的图像给出如下输出:
identify -verbose -features 1 b.jpg | grep -i -A1 entropy
Sum Entropy:
1.60934, 1.62512, 1.65567, 1.65315, 1.63582
Entropy:
2.19687, 2.33206, 2.44111, 2.43816, 2.35205
Difference Entropy:
0.737134, 0.879926, 0.980157, 0.979763, 0.894245
我怀疑熵较高的图像将更好地压缩为JPEG,而熵较低的图像将更好地压缩为PNG-但我现在必须破折号:-)
每种类型的熵都有5个值-水平,垂直,左诊断,右诊断和总体。我认为最后一个值是您需要考虑的唯一值。
更新
好的,我现在有更多时间花在此上。我没有一堆示例图像可以用来测试我的理论,因此我以另一种方式进行了测试。我编写了一个小脚本来为给定的输入文件计算以下内容:
这里是:
#!/bin/bash
f="$1"
jsize=$(convert "$f" -strip JPG:- | wc -c)
psize=$(convert "$f" PNG:- | wc -c)
jpratio=$(echo $jsize*100/$psize | bc)
# Make greyscale version for entropy calculation
rm temp*.jpg 2> /dev/null
convert "$f" -colorspace gray temp.jpg
entropy=$(identify -verbose -features 1 temp.jpg | grep -A1 " Entropy:" | tail -n 1 | awk -F, '{print $5}')
echo $jpratio:$entropy
因此,对于给定的图像,您可以这样做:
./go image.jpg
8:3.3 # JPEG is 8x bigger than PNG and entropy is 3.3
然后,我拍摄了您的图像,并向其中添加了不同数量的噪点以增加其熵,就像这样
for i in {1..99}; do convert bottom.jpg +noise Gaussian -evaluate add ${i}% xx${i}.jpg;done
这样我得到的文件的xx1.jpg
噪声为1%,噪声xx2.jpg
为2%,依此类推,最高可达xx99.jpg,噪声为99%。
然后,我通过第一个脚本运行每个文件,如下所示:
for f in xx*.jpg; do ./go $f;done > data.txt
给我data.txt
。
然后,我创建了以下gnuplot命令文件plot.cmd
:
set title 'Plotted with Gnuplot'
set ylabel 'Entropy'
set xlabel 'JPEG size/PNG Size'
set grid
set terminal postscript color landscape dashed enhanced 'Times-Roman'
set output 'file.eps'
plot 'data.txt'
并与它一起运行
gnuplot plot.cmd
我得到以下图表,该图表表明,随着ImageMagick熵值的增加,JPEG大小与PNG大小的比率得到改善,从而有利于JPEG ...并不是很科学,但至少可以做到。也许您可以针对通常使用的图像类型运行脚本,然后查看获得的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句