IT박스

JPEG의 품질 수준을 알 수 있습니까?

itboxs 2020. 11. 23. 07:56
반응형

JPEG의 품질 수준을 알 수 있습니까?


이것이 어떻게 작동하는지 완전히 이해하지 못하기 때문에 이것은 실제로 두 부분으로 된 질문입니다.

내 상황 : 사용자가 이미지를 업로드 할 수있는 웹 앱을 작성하고 있습니다. 그런 다음 내 앱이 표시 가능한 크기 (예 : 640x480-ish)로 조정되고 나중에 사용할 수 있도록 파일을 저장합니다.

내 질문 :

  1. 임의의 JPEG 파일이 주어지면 크기가 조정 된 이미지를 저장할 때 동일한 품질을 사용할 수 있도록 품질 수준이 무엇인지 알 수 있습니까?
  2. 이것도 중요합니까 ?? 원본 품질에 관계없이 모든 이미지를 적절한 수준 (예 : 75-80)으로 저장해야합니까?

내가 생각한 것처럼 (극단적 인 예를 들어 보자) 누군가가 품질 0으로 저장된 5 메가 픽셀 이미지를 가지고 있다면 그것은 무엇이든 뭉툭 할 것이기 때문에 이것에 대해 잘 모르겠습니다. 이미지 크기를 640x480으로 줄이면 덩어리가 부드러워지고 거의 눈에 띄지 않게됩니다. 다시 품질 0으로 저장할 때까지 ...

스펙트럼의 다른 쪽 끝에는 q = 0 인 800x600 이미지가있는 경우 640x480으로 크기를 조정해도 완전히 쓰레기처럼 보이는 사실이 변경되지 않으므로 q = 80으로 저장하면 중복됩니다.

나도 가까워?

사용하는 경우 PHP에서 GD2 라이브러리를 사용하고 있습니다.


  1. JPEG는 손실 형식입니다. 품질 수준에 관계없이 JPEG 동일한 이미지를 저장할 때마다 실제 이미지 품질이 저하됩니다. 따라서 파일에서 품질 수준을 얻더라도 JPEG를 다시 저장할 때 (품질 = 100에서도) 동일한 품질을 유지할 수 없습니다.

  2. JPEG를 파일 크기 측면에서 감당할 수있는 한 높은 품질로 저장해야합니다. 또는 PNG와 같은 무손실 형식을 사용하십시오.

저품질 JPEG 파일은 단순히 더 고르지 않게되는 것이 아닙니다. 대신 색 농도가 줄어들고 이미지 섹션의 세부 사항이 제거됩니다. 저화질 이미지가 고르지 않고 더 작은 크기에서 괜찮아 보이는 것에 의존 할 수 없습니다.

JFIF 사양 에 따르면 . 수평 및 수직 픽셀 밀도는 저장되지만 품질 번호 (0-100)는 이미지 헤더에 저장되지 않습니다.


ImageMagick으로 압축 수준을 볼 수 있습니다. 다운로드 및 설치 지침은 공식 웹 사이트 에서 찾을 수 있습니다 .

설치 한 후 명령 줄에서 다음 명령을 실행합니다.

identify -format '%Q' yourimage.jpg

그리고 0 (저품질, 작은 파일 크기)에서 100 (고품질, 큰 파일 크기)까지의 값을 가져와야합니다.

정보 출처


향후 방문자를 위해 주어진 jpeg의 품질을 확인하려면 imagemagick 도구를 사용할 수 있습니다.

$> identify -format '%Q' filename.jpg
   92%

Jpeg 압축 알고리즘에는 결과 이미지의 품질에 영향을 미치는 몇 가지 매개 변수가 있습니다.

이러한 매개 변수 중 하나는 각 계수에 사용될 비트 수를 정의하는 양자화 테이블입니다. 다른 프로그램은 다른 4 분화 테이블을 사용합니다.

일부 프로그램에서는 사용자가 품질 수준을 0-100으로 설정할 수 있습니다. 그러나이 숫자에 대한 공통적 인 방어는 없습니다. 60 % 품질의 포토샵으로 만든 이미지는 46KB, 김프로 만든 이미지는 26KB에 불과합니다.

양자화 테이블도 다릅니다.

서브 샘플링, dct 방법 등과 같은 다른 매개 변수가 있습니다.

따라서 하나의 품질 수준 번호로 모든 것을 설명 할 수 없으며 jpeg 이미지의 품질을 단일 번호로 비교할 수도 없습니다. 그러나 품질에 대한 크기 간의 타협을 설명하는 포토샵 또는 김프와 같은 번호를 만들 수 있습니다.

추가 정보 : http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html

일반적인 관행은 이미지의 크기를 적절한 크기로 조정하고 그 후에 jpeg를 적용하는 것입니다. 이 경우 거대한 이미지와 중간 이미지의 크기와 품질이 동일합니다.


을 사용하여 이미 두 가지 답변이 있으므로 파일 이름도 출력하는 답변 identify있습니다 (한 번에 여러 파일을 스캔하기 위해) .

filename: quality여러 이미지에 사용하기 위해 의 간단한 출력을 원하면 다음을 사용할 수 있습니다.

identify -format '%f: %Q' *

현재 디렉토리에있는 모든 파일 의 파일 이름 + 압축표시합니다 .


따라서 기본적으로 두 가지 경우가 있습니다.

  1. 수신 이미지의 품질이 너무 높게 설정되어 있으면 부적절한 공간을 차지할 수 있습니다. 따라서 예를 들어 들어오는 q = 99를 q = 85로 줄일 수 있습니다.

  2. 들어오는 이미지의 품질이 너무 낮게 설정되어 있으면 품질을 높이기 위해 공간을 낭비 할 수 있습니다. 많은 양의 데이터가 폐기 된 이미지는 품질이 높아질 때 마법처럼 더 많은 공간을 차지하지 않는다는 점을 제외하면 고르지 않은 이미지는 고품질 설정에서도 매우 멋지게 압축됩니다. 따라서 제 생각에는 들어오는 q = 1을 q = 85로 올리는 것이 완벽하게 괜찮습니다.

이것으로부터 나는 단순히 적절한 품질 설정을 강요하는 것이 완벽하게 허용되는 일이라고 생각합니다.


다음은 잘 작동하는 공식입니다.

  1. jpg100size (98-100 % 품질의 경우 바이트 단위를 초과해서는 안되는 크기) = 너비 * 높이 /1.7

  2. jpgxsize = jpg100size * x (x = 백분율, 예 : 0.65)

따라서이를 사용하여 jpg가 마지막으로 저장된 품질을 통계적으로 확인할 수 있습니다. 품질을 65 %로 낮추고 리샘플링을 피하려면 처음에 크기를 비교하여 이미 너무 낮지 않은지 확인한 다음 품질을 줄여야합니다.


파일을 새로 저장할 때마다 더 높은 품질 값을 사용하여 더 많은 이미지를 보존하므로 전체 품질이 더욱 저하됩니다. 원본 이미지 품질에 관계없이.


원래 생성 한 것과 동일한 소프트웨어를 사용하여 동일한 설정을 사용하여 JPEG를 다시 저장하면 손상이 최소화된다는 것을 알 수 있습니다. 알고리즘은 처음에 던진 것과 동일한 정보를 버리는 경향이 있습니다. 파일 만보고 어떤 레벨이 선택되었는지 알 수있는 방법이 없다고 생각합니다. 가능하더라도 다른 소프트웨어는 거의 다른 매개 변수와 반올림을 보장하므로 일치를 거의 불가능하게 만듭니다.


이것은 어리석은 질문 일 수 있지만 문서의 품질을 세부적으로 관리하는 데 왜 관심이 있습니까? ImageMagick을 사용하여 변환하면 최상의 효과를 위해 JPEG의 품질을 관리 할 수 ​​있습니다. http://www.php.net/manual/en/intro.imagick.php

참고URL : https://stackoverflow.com/questions/2024947/is-it-possible-to-tell-the-quality-level-of-a-jpeg

반응형