Answers:
保存后,就无法再判断质量了。
(在保存的同时设置质量只会告诉软件,您认为可接受的损失是多少,但是一旦保存,就会丢失什么。丢失的东西就丢失了。您需要有人说些看起来不错的东西。)
嗯,我想我错了。我仍然认为以上是正确的,但是ImageMagick的identify
证明我错了?
确定-verbose myimage.jpg 图片:myimage.jpg 格式:JPEG(联合图像专家组JFIF格式) 类别:DirectClass 几何:358x240 + 0 + 0 分辨率:300x300 [...] 压缩方式:JPEG 质量:90 方向:未定义 [...]
我不知道如何保存测试中的图像,但是它没有任何EXIF数据。画质是否仍可以存储在图像中?
要添加到Arjan的答案中:
ImageMagick的identify
看上去实际上是在JPEG图像内部看,以猜测用于对其进行编码的质量设置。
ImageMagick的源代码(为免费软件加油:-)包含以下几行:
/*
Determine the JPEG compression quality from the quantization tables.
*/
sum=0;
for (i=0; i < NUM_QUANT_TBLS; i++)
{
if (jpeg_info.quant_tbl_ptrs[i] != NULL)
for (j=0; j < DCTSIZE2; j++)
sum+=jpeg_info.quant_tbl_ptrs[i]->quantval[j];
(coders/jpeg.c
在我的最新版本的ImageMagick的源代码中,第843ff行)。
我对JPEG的了解还不足以真正理解,但是它似乎做了本文所述的事情:
使用Visual C#.NET确定JPEG品质因数(链接截至2018年1月已失效;从2015年复制到archive.org上)
因此,是的,identify
实际上可以仅从压缩文件确定JPEG的质量设置(尽管结果可能并不总是完全准确的)。
正如Arjan提到的identify -verbose myimage.jpg
那样。由于imagemagick是一个CLI工具,因此可能对脚本编写很有用。这种方法identify -verbose myimage.jpg | grep ...
很慢。我建议像这样使用IM
identify -format '%Q' myimage.jpg
它大大加快了速度。
使用ImageMagick ++库很容易:
Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100