使用ImageMagick将图像转换为PNG和JPG

雷扎

我正在尝试将一些图像转换为PNG或JPG,并试图找出哪种格式将导致文件更小。在大多数情况下,PNG将为我提供最佳压缩效果,但是从JPG中我可以得到更好的压缩效果。我有两个问题:

  1. 图像的哪些特征将使其获得更好的效果?

  2. 有没有一种方法可以预先确定哪种格式会给我带来更好的结果而无需先转换它们?

这张照片使用PNG可以提供更好的压缩效果

使用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个值-水平,垂直,左诊断,右诊断和总体。我认为最后一个值是您需要考虑的唯一值。

更新

好的,我现在有更多时间花在此上。我没有一堆示例图像可以用来测试我的理论,因此我以另一种方式进行了测试。我编写了一个小脚本来为给定的输入文件计算以下内容:

  • JPEG大小与PNG大小的比率

这里是:

#!/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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ImageMagick将图像转换为PNG和JPG

来自分类Dev

使用imagemagick将JPG图像从灰度转换为RGB

来自分类Dev

使用Python将BLOB图像转换为PNG,JPG

来自分类Dev

使用终端和后端将.JPG或.PNG转换为.ICO

来自分类Dev

无法使用PHP和ImageMagick将PDF转换为图像

来自分类Dev

使用ImageMagick将PDF转换为JPG图像-如何使用0填充文件名?

来自分类Dev

使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

来自分类Dev

使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

来自分类Dev

使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

来自分类Dev

使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

来自分类Dev

如何将.jpg或.png图像转换为.raw格式?

来自分类Dev

ImageMagick将jpx和jpf转换为jpg(Ubuntu 16)

来自分类Dev

使用ImageMagick从SVG转换为PNG时裁剪的图像

来自分类Dev

使用ImageMagick从SVG转换为PNG时裁剪的图像

来自分类Dev

ImageMagick:将gif转换为png和将png转换为gif会产生不同的结果

来自分类Dev

如何使用Python Wand / ImageMagick将PSD转换为PNG?

来自分类Dev

ImageMagick:不使用文件将PDF转换为PNG nodejs?

来自分类Dev

使用PHP将JPG / PNG转换为SVG格式

来自分类Dev

使用Imagemagick和PHP将PDF纵向转换为图像横向

来自分类Dev

将webm转换为jpg或png

来自分类Dev

将webm转换为jpg或png

来自分类Dev

Grunt 将 .png 转换为 .jpg 文件

来自分类Dev

将透明 png 转换为 jpg powershell

来自分类Dev

关于将PNG转换为JPG

来自分类Dev

如何从服务器将jpg图像转换为png图像

来自分类Dev

将具有透明度的png图像转换为jpg会破坏图像

来自分类Dev

如何将JPG图像转换为8位PNG图像并保存在C#中?

来自分类Dev

使用枕头将EPS图像转换为JPG

来自分类Dev

ImageMagick / Imagick:将具有Alpha通道的PNG转换为2色图像(彩色,透明)

Related 相关文章

  1. 1

    使用ImageMagick将图像转换为PNG和JPG

  2. 2

    使用imagemagick将JPG图像从灰度转换为RGB

  3. 3

    使用Python将BLOB图像转换为PNG,JPG

  4. 4

    使用终端和后端将.JPG或.PNG转换为.ICO

  5. 5

    无法使用PHP和ImageMagick将PDF转换为图像

  6. 6

    使用ImageMagick将PDF转换为JPG图像-如何使用0填充文件名?

  7. 7

    使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

  8. 8

    使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

  9. 9

    使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

  10. 10

    使用imagemagick将GIF图像转换为PNG,但获得RGBA图像而不是变色版本

  11. 11

    如何将.jpg或.png图像转换为.raw格式?

  12. 12

    ImageMagick将jpx和jpf转换为jpg(Ubuntu 16)

  13. 13

    使用ImageMagick从SVG转换为PNG时裁剪的图像

  14. 14

    使用ImageMagick从SVG转换为PNG时裁剪的图像

  15. 15

    ImageMagick:将gif转换为png和将png转换为gif会产生不同的结果

  16. 16

    如何使用Python Wand / ImageMagick将PSD转换为PNG?

  17. 17

    ImageMagick:不使用文件将PDF转换为PNG nodejs?

  18. 18

    使用PHP将JPG / PNG转换为SVG格式

  19. 19

    使用Imagemagick和PHP将PDF纵向转换为图像横向

  20. 20

    将webm转换为jpg或png

  21. 21

    将webm转换为jpg或png

  22. 22

    Grunt 将 .png 转换为 .jpg 文件

  23. 23

    将透明 png 转换为 jpg powershell

  24. 24

    关于将PNG转换为JPG

  25. 25

    如何从服务器将jpg图像转换为png图像

  26. 26

    将具有透明度的png图像转换为jpg会破坏图像

  27. 27

    如何将JPG图像转换为8位PNG图像并保存在C#中?

  28. 28

    使用枕头将EPS图像转换为JPG

  29. 29

    ImageMagick / Imagick:将具有Alpha通道的PNG转换为2色图像(彩色,透明)

热门标签

归档