Làm thế nào để tìm chất lượng JPG?


16

Khi tôi lưu tệp JPG bằng GIMP, tôi có thể điều chỉnh chất lượng tôi lưu ở mức 0-100 (tôi sử dụng 89). Có vẻ như tôi đã sử dụng một ứng dụng để xem con số này là gì trong tập tin đã lưu nhưng nếu tôi làm thì tôi không thể tìm ra nó là gì. Bất kỳ đề xuất như những gì để sử dụng?


2
Chỉ để đảm bảo rằng nó đã được biết: cài đặt chất lượng của các ứng dụng khác nhau không thể so sánh được, nói chung: faqs.org/faqs/jpeg-faq/part1/section-5.html . Mặc dù vậy, cả GIMP và ImageMagick đều nên sử dụng thang đo chất lượng IJG.
Michael Schumacher

Câu trả lời:


22

Sau khi lưu, bạn không thể nói chất lượng nữa.

(Đặt chất lượng trong khi lưu chỉ cho phần mềm biết mức độ tổn thất mà bạn thấy có thể chấp nhận được, nhưng một khi đã lưu: mất những gì đã mất. Bạn sẽ cần một con người để nói nếu có gì đó tốt đẹp.)

Hmmm, tôi đoán tôi đã sai. Tôi vẫn nghĩ rằng ở trên là chính xác, nhưng ImageMagick 's identifychứng minh tôi sai?

xác định -verbose myimage.jpg

Hình: myimage.jpg
  Định dạng: JPEG (Định dạng JFIF của nhóm chuyên gia chụp ảnh chung)
  Lớp: DirectClass
  Hình học: 358x240 + 0 + 0
  Độ phân giải: 300x300
  [...]
  Nén: JPEG
  Chất lượng: 90
  Định hướng: Không xác định
  [...]

Tôi không biết làm thế nào hình ảnh trong thử nghiệm của tôi được lưu, nhưng nó không có bất kỳ dữ liệu EXIF ​​nào. Chất lượng vẫn có thể được lưu trữ trong hình ảnh?


Bạn không thể thử nghiệm chuyển đổi sang các phẩm chất khác nhau? Tôi thấy khó tin, trừ khi ImageMagick lưu trữ một số dữ liệu riêng tư trong jpg (vì vậy điều này có thể không hoạt động với các gói khác).
harrymc

Hấp dẫn. Tôi sẽ chờ xem cái chảo này ra sao.
Nathaniel

1
+1 Có hình ảnh hoạt động. Tôi có thể liên tục thay đổi chất lượng jpeg và sử dụng nhận dạng để xem thay đổi. Công cụ này hoạt động nếu tôi sử dụng convert (một chế độ tưởng tượng khác) hoặc công cụ khác như MS Photo Editor.
DaveParillo

1
ImageMagick đang làm một cái gì đó khác nhau. Nó đưa ra ước tính, thay vì đọc những gì phần mềm gốc của bạn đã làm. Câu trả lời ban đầu của bạn, bây giờ bị gạch bỏ, thực sự chính xác hơn. Xem câu trả lời của @ sleske.
mattdm

26

Để thêm vào câu trả lời của Arjan:

ImageMagick identifydường như thực sự nhìn vào bên trong hình ảnh JPEG để đoán cài đặt chất lượng được sử dụng để mã hóa nó.

Mã nguồn của ImageMagick (cổ vũ cho phần mềm miễn phí :-)) chứa các dòng :

/*
  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, dòng 843ff. trong phiên bản mã nguồn của ImageMagick gần đây của tôi).

Tôi không biết đủ về JPEG để thực sự hiểu, nhưng dường như nó làm một cái gì đó giống như được mô tả trong bài viết này:

Xác định yếu tố chất lượng JPEG bằng cách sử dụng Visual C # .NET (liên kết đã chết kể từ tháng 1 năm 2018; sao chép trên archive.org từ năm 2015 )

Vì vậy, có, identifythực sự có thể xác định cài đặt chất lượng của JPEG chỉ từ tệp nén (mặc dù kết quả có thể không phải lúc nào cũng hoàn toàn chính xác).


1
Ái chà. Rất tốt đẹp của bạn để kiểm tra mã nguồn. Mát mẻ.
Nathaniel

@Nathaniel, bạn có thể vui lòng chọn câu trả lời này là câu trả lời được chấp nhận, thay vì của tôi không? Cảm ơn! (Tôi không thể xóa của tôi miễn là nó được chấp nhận.)
Arjan

Nó đang tìm kiếm bảng lượng tử hóa JPEG, giải thích tốt nhất cho cách thức dòng bit được nén.
jbarlow

5

Như Arjan đã định identify -verbose myimage.jpgsẽ làm điều đó. Vì hình ảnh là một công cụ CLI, nó có thể hữu ích cho việc viết kịch bản. Cách tiếp cận identify -verbose myimage.jpg | grep ...là chậm. Tôi khuyên bạn nên sử dụng IM như thế này

identify -format '%Q' myimage.jpg

Nó là ồ ạt nhanh hơn.


2

JPEGsnoop là một thay thế tốt đẹp cho ImageMagick's identify. Tải xuống khá nhỏ và có sẵn ở định dạng di động.

Sau khi xử lý jpg, bạn sẽ tìm thấy "Hệ số chất lượng xấp xỉ" bên dưới điểm đánh dấu DQT.


1

Với thư viện ImageMagick ++ , thật dễ dàng:

Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.