2010-12-30 1 views
4

안녕하세요, pngquant이라는 프로그램을 사용하여 24 비트 PNG를 8 비트 PNG로 변환하고 있습니다. 모든 것이 잘 작동하는 것 같고 너무 많은 색상을 포함하지 않는 아이콘 및 기타 이미지의 품질 저하를 알지 못합니다. 이제 색상 수와 함께 PNG 사진을 먹이면 일부 품질 손실을 볼 수있는 PNG8이 생성됩니다.PNG24가 PNG8로 변환 된 시점을 결정하는 방법은 무손실입니까?

프로그래밍 방식으로 품질 손실을 결정하고 싶습니다. PNG24를 PNG8로 변환하는 것이 안전한지 여부를 알고 싶습니다. Webpagetest.org가하는 일종의 정렬 - PNG8로 변환하여 품질이 떨어지지 않으면이 특정 이미지의 크기가 더 작아집니다.

아이디어가 있으십니까?

감사합니다.

+0

256 픽셀 (즉, 16x16) 미만의 데이터는 무손실로 256 색으로 변환 할 수 있습니다. –

답변

2

아주 간단합니다. PNG24에서 PNG8로 변환하는 이미지의 색상이 256 색 이상이면 품질이 떨어질 것입니다. 내가 뭔가를 놓친 건가?

+0

256 색 이상인 경우 약간의 품질 손실이 발생할 것이라고 말하는 것이 옳습니다. 그러나 품질 손실 정도는 이미지의 내용에 따라 달라집니다 (예 : 픽셀의 색상이 양자화되면 품질 손실이 더 뚜렷해집니다). – misha

+0

나는 당신에 동의합니다. 그러나이 질문은 "이 특정 이미지는 PNG8로 변환하고 품질을 떨어 뜨리지 않으면 크기가 더 작을 것이라고 말합니다." 제목에 "무손실"모양을 추가하면 OP가 "허용 가능한"품질 손실이 아닌 품질 손실이 있는지를 알고 싶습니다. Btw, 당신의 대답과 링크는 매우 흥미 롭습니다. –

+0

아, 알겠습니다. 나는 약간의 서두를 타고 있었고 타이틀의 무손실 비트를 놓쳤습니다. 감사. – misha

3

이 메시지는 전체 참조 image quality assessment처럼 들립니다.

가장 간단한 방법은 PNG24와 PNG8 이미지간에 PSNR을 계산하는 것입니다. 이것은 두 이미지의 차이를 측정 한 것입니다. PSNR이 높을수록 이미지의 차이가 줄어 듭니다. 색상 양자화 소프트웨어를 사용한 후 PSNR이 임계 값 이상인지 확인하십시오 (경험적으로 결정해야 함). 그렇다면 양자화가 "안전합니다".

PSNR은 인간의 시각 시스템이 작동하는 방식 (예 : 공간 및 대비 마스킹 현상을 무시)에 항상 부합하지 않는다는 단점이 있습니다. 다른 메트릭 인 SSIM은이 문제를 처리하려고 시도하지만 약간 계산하기가 어렵습니다 (여기서는 OpenCV implementation입니다). 위에서 설명한 임계 접근법에서 PSNR 대신 SSIM을 사용할 수 있습니다.

여기에 유용 할만한 another thread이 있습니다.

0

pngquant 개발을 위해 OpenCV 기반 도구가 감마 보정이나 알파 채널을 제대로 지원하지 않았기 때문에 my own SSIM 도구를 사용합니다.

pngquant -v을 실행하면 MSE=n으로 입력 된 오류가 출력됩니다 (n은 평균 제곱 오류 - 0은 완벽한 품질 임).

최신 버전은 최소 요구 품질을 설정할 수 있도록 --quality 설정이 있습니다. 그것을 달성 할 수없는 경우 파일을 저장하지 않습니다.

관련 문제