JPEG图像相对于尺寸的“最佳”文件大小是多少?


10

我计划编写一个脚本,该脚本将扫描100,000多个JPEG图像,如果它们在文件大小上“太大”,则将其重新压缩。脚本编写是很容易的部分,但是我不确定如何将图像归类为“太大”。

例如,有一个2400x600px的图像,文件大小为1.81MB。Photoshop的save for web命令创建了540KB的文件,质量为60,尺寸相同。这大约是原始大小的29%。

现在,我正在考虑将这些数字用作指导原则。大约540KB /(2,400 * 600 / 1,000,000)= 375KB /百万像素。大于此尺寸的任何图像均被视为较大。这是正确的方法还是有更好的方法?

编辑1:需要优化图像以在网站上显示。

编辑2:我可以通过实验确定所需的输出质量,我需要知道图像在文件大小和尺寸方面是否很大,是否需要以较低的质量保存。



1
xiota的第一个评论应该是答案!顺便说一句,您的优先顺序是什么?如果由于某种原因您只需要小文件,有时质量可能会受到影响。创建不合理的大jpeg文件很容易,而质量却没有明显的提高。检测并重新压缩此类图像是一个好主意,就像xiota所说的那样,只需使用jpeg质量设置即可。
szulat

18
“最佳” 目的什么?如今,即使说“网络使用情况”也有些广泛。预期的观众会在紧凑型手机上观看图像吗?更大的智能手机?平板电脑还是平板电脑?笔记本?大型电脑显示器?一台60英寸8K电视?一个超大屏幕吗?
Michael C


2
如果脚本编写很简单,这就是我要在您遇到的情况中尝试的方法:设置一个数字定义的限制,允许压缩图像与原始图像不同(例如,每个像素的光度差之和)。从较低的质量(例如60)开始,然后导出,如果与原始质量的差异太大,则以较高的质量再次导出,直到满足质量条件为止(您可能需要调整计算-使用指数标度或更喜欢的东西来获得最好的结果)。
帕维尔

Answers:


4

平均,JPEG的甜蜜点大约是每个象素一位

当然,这将根据图像内容而有所不同,因为某些类型的图形(例如,平坦区域和平滑的渐变)比其他图形(噪声,文本)的压缩效果更好,因此将其盲目应用于每个图像并不是一种可靠的方法。

您还存在没有未压缩的参考图像与之比较的问题,因此您实际上不确定是否具有当前图像质量,以及可以降低多少质量才能被接受。可以从JPEG中的量化表在某种程度上猜测质量,但这也不是一种可靠的方法(特别是,对于具有自定义,优化的量化表的JPEG,ImageMagick的质量判断是非常不正确的)。

话虽如此,有一种合理的实践方法:

  1. 选择您满意的最大JPEG质量设置(介于70到85之间)。
  2. 将图像重新压缩到该质量级别。
  3. 如果重新压缩的图像比〜10%小,则保留重新压缩的图像。

重要的是不要只选择较小的文件大小,而要大幅减少文件大小。这是因为由于JPEG的有损性质以及转换为8位RGB导致的细节损失,JPEG的重新压缩往往总是使文件大小缓慢减小,因此,文件大小的小幅下降会导致成比例的质量下降,这是不值得的它。


4
这正是我最后所做的。我以每像素一位作为指导,以过滤掉100,000多个图像中的30,000个图像,并使用imagemagick以85%的质量对其进行了重新压缩。如果生成的图像小50%以上,那么我保留新的图像。在我的情况下它起作用了,因为“大图像”是使用Photoshop使用100%的质量创建的。就文件大小而言,其他70,000多张图像还可以,重新压缩它们并没有产生足够的节省(按百分比计算),或者质量明显下降。
Salman A

1
我喜欢您的第二段,但是您支持以像素为单位(24倍压缩)的经验法则吗?
请阅读“我的资料”,

30

使用JPEG压缩的文件的大小取决于图像的复杂程度。尝试以您描述的方式控制文件大小,将导致可感知的图像质量变化很大。

请考虑以下选项:

  • 足够好的方法。 使用您认为可以接受的质量设置,例如75。将结果的大小与原始图像进行比较,并保留较小的文件。请参阅转换为JPG时要选择什么质量?

  • 使用JPEG极小,像JPEGmini或jpeg-recompressJPEG归档。它们本质上是为执行您似乎想做的事情而设计的,但是对JPEG算法的内部结构有了更多的了解。

  • 正如Nathancahill所建议的那样,从网络开发人员的角度生成各种大小的缩略图


7
或者,如果您想在JPEG最小化上达到“极致”,请选择guetzli。请注意内存和时间要求。
菲利普·肯德尔

2
我尝试过guetzli,但印象并不深刻。它非常慢,只能将大小减小20-30%。使用jpeg-recompress,可以使用smallfry算法将文件缩小80%。
xiota

18

不,这是错误的方法。

是的,文件大小(以像素为单位)与最终权重有关,但这不是唯一的因素。

做个测试。拍摄一个完全相同的2400x600px的白色文件,并将其另存为JPG。

现在,为森林拍照(相同的2400x600px),其中包含许多细节,然后保存。使用相同的压缩设置,此文件将更大。

最终大小取决于以下三个因素:

  • 像素大小
  • 压缩设定
  • 内容(图像的细节和复杂性)

因此,您不能也不应基于像素大小定义权重。


但我了解您的问题。

如果不分析图像的当前压缩率,则很难定义“最佳”权重(相对于观察者或图像的使用情况)

您可能可以定义一个压缩设置并重新压缩“所有这些”。我不知道您是否要在“上传”之前执行此操作,这可能会比保存的跳过其中一些节省更多时间。

有一些工具可以分析图像并计算当前的压缩率。但我怀疑这是否重要。


我了解有关白色图像与森林图像的部分。您是否建议我随机抽取图像样本,然后使用Photoshop(70质量)重新保存它们,并使用最大的像素:文件大小比率作为参考?我猜那些比率较低的人就是那些细节较少的人。
Salman A

关于你的最后一句话。压缩率实际上大约是OP正在计算的值,因为它是jpeg size / raw sizeraw size = pixel size * number of pixelpixel size对于24位RGB颜色空间来说是3个八位位组。就像您自己说的那样,该指标不足以确定图像是否被充分压缩。
zakinster,

9
@SalmanA不,我建议您完全放弃这种方法。JPEG大小足以达到指定的质量。您建议查看样本中最大图像的质量达到70%的大小只是在选择一个图像复杂度级别,然后说:“任何比这更复杂的事情都太复杂了,将被降级。” 但是,如果几乎所有图像在70%的质量下都小于此阈值,那么拥有少量“太大”文件又会有什么问题呢?
David Richerby '19

这似乎与我在考虑一种方法来确定一系列主题相同但分辨率和质量不同的图像中的哪一个是“最佳”(例如最接近原始)图像时得出的结论相对应。
迈克尔

10

Web开发人员在这里。这是我的处理方法:

1.确定显示的图像尺寸和所需的屏幕分辨率。

您的第一个任务是确定将以什么像素大小显示图像。他们在在线商店中出售产品照片吗?照相馆?用户个人资料照片?多个不同的尺寸?列出所需的像素尺寸。检查高分辨率屏幕(例如最近的手机和平板电脑)是否需要@ 2x图像。

2.使用缩略图脚本创建新的图像文件。

这些被称为缩略图脚本,但不仅可以用于缩略图,还可以使用更多的功能。那里有很多脚本,或者您可以编写自己的脚本。通过不调整原始文件的大小,可以解决脚本错误或在以后的工作中需要更高分辨率的图像。通常的做法是在输出文件名中指定后缀。例如:

lena.jpg (Original, 2000x3000)
lena-thumb.jpg (100x150)
lena-thumb@2x.jpg (200x300)
lena-product.jpg (400x600)
lena-product@2x.jpg (800x1200)

3.压缩。

剪切新图像文件时,缩略图脚本应指定jpg压缩率。但是,还有其他缩小器可能会进一步缩小文件大小。


这就是将来的处理方式:请摄影师将高分辨率原件放置在目录中,然后使用脚本生成较小的尺寸(各种尺寸的缩略图,对于桌面和移动设备使用较大的缩略图),然后将其放在带有网址的www下重写。但是现在我无法获得原件。
Salman A

6

虽然@拉斐尔的回答解释了JPEG压缩插件和了,我会尽量回答你的网站和上传问题。

在网站上使用图像(用于设计或内容)将指示一些必要事项:我的图像将用于什么?徽标,封面照片,缩略图,博客文章中的照片,画廊的全屏照片...此外,如果将其用于多种目的(例如,照片及其画廊缩略图),则希望以所需的所有尺寸拒绝它。但是,除非您建立自己的网站,否则当今大多数情况下,Web服务都会从较大的图片中生成较小尺寸的图像,以便在现场使用。

现在您已经知道图像的用途,网站(或CMS或前端框架)将始终需要最大像素大小才能符合图像要求。徽标的最大尺寸可能为600x600px,背景封面的最大尺寸可能为1280x720px,用于全屏显示的内容照片为1920x1080,或者为保留绝对的细节而使用相机的原始分辨率。从您要上传到的网站上检查正确的尺寸。您要至少匹配所需的最大像素大小,具体取决于要实现的比率。当心,如果宽高比不同,某些服务会裁剪并拉伸图像。在这种情况下,您必须重新裁剪图像以适合所需的最大尺寸和比例。

然后,网站可能会施加文件大小限制(或可能不会限制,具体取决于图像用途)。关于页面加载时间,越轻越好。在您的2400x600px高分辨率图像示例中,300到500kB的尺寸对于加载时间来说是完全合适的。如果出于图像目的(例如全屏显示)需要,则内容图片(例如照片)可能会更重,必要时可以达到相机的原始分辨率。如果未给出指示,则文件大小限制可能很难猜到,因为它取决于受众设备(移动设备,台式机...),受众所在国家/地区的网络质量...为了获得最高质量和服务,请一张一张地对待照片获得最小文件大小而没有可见的伪像。为了方便或加快处理速度,请使用总体上令人满意的压缩级别来调整脚本的大小(大约70左右即可)。@xiota的答案也可能是您需要的工具。在这里设置自己的标准。

TL; DR网站上的图像用途是调整大小/压缩量的关键。


3

您要计算的是图像像素的平均压缩大小,如果将其除以原始像素大小(对于24位RGB通常为3个八位位组),则可以得到压缩率。

这是一个很好的指标,可为您提供有关图像压缩状态的信息,但仅凭压缩率不仅仅取决于压缩配置文件(算法= JPEG,质量= 60/100),还取决于图像的压缩潜力:具有相同原始尺寸和相同压缩配置文件的不同图像将产生不同的jpeg尺寸,因为图像或多或少容易压缩(空白图像非常容易压缩,白色噪音不是)。

因此,由于“上次使用”质量配置文件未存储在该图像中(既不在元数据中也不在jpeg标头结构中),因此在重新发布具有目标尺寸/质量配置文件的图像时,最常用的方法是重新压缩(并且可能会(自动)调整所有内容的大小(无论图像的初始状态如何

是的,您可以在不需要时进行重新压缩,是的,如果以更高质量的配置文件进行压缩,则可能甚至会失去空间,但是这是边缘情况,在大规模情况下,确保目标质量配置文件是最容易的事情。当然,您只希望这样做一次,以免逐渐降低图像质量,您可能应该存储两个图像库:最初的“未修改”图像库和“待发布/重新压缩”图像库。

有很多工具可以重新压缩一堆文件,您也可以编写自己的脚本,并使用正确的技术堆栈(主要是C ++和libjpeg),即使对于超过10万个文件,它也可以非常快速地运行。

如果您想实施一个更智能/更复杂的过程,则可以尝试使用迭代的重新压缩/比较大小逻辑来估算原始质量配置文件(以相同质量进行重新压缩应产生大致相同的大小,并且质量应略微增加尺寸,而质量较低则应显着减小尺寸)。当然,这将消耗更多的CPU能力。


JPG图像通常使用4:2:2或4:2:0(en.wikipedia.org/wiki/Chroma_subsampling#4:2:2)对色度进行子采样,因此JPG压缩的“原始”像素为2x或每个色度通道的4倍的亮度像素。(水平减半,也可能垂直减半)。在考虑图像的“压缩程度”时,您可能需要考虑到这一点。但是,是的,正如您所说的,对于未知图像内容而言,这并不是一个很好的指标。
彼得·科德斯

+1用于重新缩放。在某些时候,通过缩小缩放比通过进一步减少每个像素的位数可以获得更好的图像质量。不同于现代视频编解码器(例如h.264或h.265(可以​​指示解码器进行更多的平滑和解块操作)或静态图像版本HEIF(即HEVC(h.265)I帧),JPEG不没有任何东西,如果您饿了一点,只会变得块状且带有许多振铃声。因此,如果您具有非常高分辨率的输入图像,则需要缩小比例,而不仅仅是降低质量。
彼得·科德斯

2
For example there is a 2400x600px image with a file size of 1.81MB.
Photoshop's save for web command creates a 540KB file at 60 quality and same dimensions.    
This is about 29% of original size.

原始的未压缩大小为2400 x 600 x 3 = 4,320,000字节(4.1 MB),因为24位颜色始终每个像素3个字节的RGB数据。这个绝对真理是无法解决的。

但是,JPG大小也取决于图像细节。较大的光滑区域(例如天空或粉刷墙壁)压缩效果更好,但是细节较大的区域(例如满是树叶的树)压缩效果也不好。因此,没有绝对数字指标。

但是540 KB为0.540 / 4.1 = 4.1 MB原始大小的13%。它可能是先前JPG尺寸的29%,但它是原始未压缩尺寸的13%。因此,它是原始未压缩大小的1/8,通常被认为是“不错”的质量。不是最佳的,不是最高的质量,但是总体上还不错,也许对于某些用途已经足够了。只是说,它已经很小了。

较大的JPG文件具有较好的图像质量,而较小的则具有较低的图像质量。您必须确定什么是足够好的,但是JPG永远不会“太大”,因为JPG压缩会降低图像质量。24位颜色的每个像素有3个字节未压缩。

因此,决定是要缩小还是缩小。

但是,将现有的JPG增大仍然是更糟的,因为添加了更多的JPG工件,并且一旦变小,数据就会更改,并且永远不会变得更好。

JPG伪像通常显示两种方式,一种是在没有细节的平滑区域中可见的一种颜色的8x8像素块,另一种是在细节边缘周围可见的粗糙边缘。

如果编辑和重新保存JPG,则会添加其他JPG工件。如果需要的话,优良作法是始终重新保存以匹配原始压缩设置。


只有完全没有压缩,该4.1 MB的数字才是正确的,但是,由于无损压缩,即使具有完美质量的JPEG也可以具有较小的文件大小。
Marv

是的,这就是为什么我称其为“未压缩”,这就是每个数字图像开始的方式,当然这是数据的实际和原始大小,这就是为什么它很重要。是的,即使是最高级别的JPG 100也会被压缩得更小,而不是无损。无损JPG是用词不当。我们没有提供它的程序。它的用途叫别的东西(维基百科说DNG和一些Raw)。但是JPEG2可以提供无损压缩,但是还有其他问题,例如,Web浏览器不支持显示JPEG2,照片冲印店可能不接受它。
WayneF '19

这个绝对真理是无法解决的。... JPEG使用的色度子采样除外。JPEG以YUV颜色空间(亮度+两个颜色分量)而不是RGB压缩。通常为4:2:2或4:2:0,这会将两个色度通道中每个像素的像素数量减少2倍或4倍。en.wikipedia.org/wiki/Chroma_subsampling#4:2:2。从RGB转换为YUV并进行子采样后,该颜色分辨率信息完全消失了,而不是JPEG花费比特进行编码的一部分。如果要查看位/像素,它应该是您考虑的JPEG的颜色格式。
彼得·科德斯

2
来吧,阅读文字。第二个绝对事实是,它专门说并称为“未压缩”,并且说24位颜色始终是每个像素三个字节。:)
WayneF '19

0

Photoshop的“另存为Web”实际上是文件大小和质量之间的一个很好的折衷,因此,除非您有更具体的要求,否则应该这样做。一个典型的建议为Web开发是坚持50-70%的质量范围。当然,也有例外:您希望公司徽标的质量始终保持出色(甚至将其转换为无损格式)的90-95%,而大型但勉强可以达到30%的质量可见页面背景。

另外,别忘了重新缩放图像。2400x600的图片在4K显示屏上看起来不错,但会在较小的屏幕上重新缩放,浪费了数据带宽,而用户却没有视觉上的改善。检查您将要使用的网站模板,以找到图像的最佳宽度。通常,在撰写本文时,像素约为1200-1300像素(请参阅此处最流行的分辨率)。

记住要保留转换为Web质量的图片的原件。如果您需要返工或打印此材料,您将遗憾地只有60%的质量和1 Mpix的分辨率。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.