webp의 lossless 결과물을 비교해보았다.
비교해보는 이유는 bmp에서 webp로 바꾼 다음 bmp로 바꿔서 원본이랑 디코딩한 결과물을 비교해보니, 파일이 전혀 바뀌어 져있었다.
7z h -scrcsha256으로 하여 sha256의 값이 바뀐 것뿐만 아니라, hexeditor로 읽어 본 바이너리 내용물도 바뀌었다.(sha256으로 확인했을때, 다른 것은 당연히 바이너리 내용물이 다르다는 것을 알 수 있다.)
그래서 진짜 내용물이 손실 없이 되는지 궁금했다.
먼저 webp에서 인코딩을 이용하고, 다른 프로그램을 이용해서 비교하는기로 했다.
webp에서 인코딩을 이용하기 위해서 샘플로 나와있는게 있다.
cwebp을 이용해서 인코딩을 표현할 수 있다.
libwebp이라고 하여, bin파일과 함께 include 및 라이브러리를 구성할 수 있다.
PNG을 이용해서 만들어지는 무손실 압축 그래픽인 것에서 webp은 png보다 용량을 적게 할 수 있는걸 확인 했다.
정말 webp에서 그래픽이 손실이 심할지 궁금해서 확인 하기 위해서 비교 프로그램을 돌리기로 했다.
libwebp을 다운 받고. 설명에 맞춰서 사용해 보았다.
cwebp -q 100 -lossless test.bmp -o text.webp
이렇게 하면, 압축률이 높은 무손실 압축이 된다. 라고 한다. 그래서 이걸 이용해서 압축 했다.
png와 비교했을 경우. 용량이 약 10%정도 감소되는걸 확인 했다.
내가 궁금한건 png의 용량 감소가 아닌 내용물의 무손실인지 확인 하는 것이다.
그래서 bmp으로 추출하는걸 해보았다.
dwebp -bmp test.webp -o test_1.bmp
이렇게 해서 나오는 결과물인 test_1.bmp과 test.bmp을 diffimg을 이용해서 제작하도록 했다.
결과물을 얻기 위해서 test.bmp을 원본으로 하고, test_1.bmp랑 비교하는걸 해보았다.
결론은 webp에서 lossless는 bmp의 형태가 달라서 그런 것이지.(무압축 bmp으로 나타낸다.) 값이 변화되는건 아닌걸 확인 하였다.
webp에서 lossless를 이용하면, 확실히 무손실 압축이며, png보다 용량이 10%정도 적어진 파일이 완성된다는 것을 알 수 있게 되었다.
실수로 cwebp -q 100만을 이용해서 압축하고 푸니, 원본 bmp보다 어두워진 bmp 파일이 만들어 졌다.
추측하곤데 webp는 명암을 증가 시켜서 화질을 개선하고, 이것을 압축하는 방식인 것 같다.
맞는진 모르겠지만, lossless에선 확실히 무손실이 된다. 라는걸 알게 되었다.