새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇번 소개했던 mozjpeg, ZopfliPNG, pngquant, Gifsicle에 웹 프론트엔드를 얹은 서비스들이다. 다시 말하면 이 프로그램들을 로컬에서 실행하면 동일한 서..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인/모바일 환경에선 정렬을 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 HEIF/JPEG의 Exif 정보 중 촬영일자 정보를 읽어 파일명을 수정하고, 최대한 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 크기를 조금이라도 더 줄이고, 추가로 resample을 적용해서 사진 크기도 축소시켜준다. 또한, 사진과 더불어 함께 저장된 PNG, WebP,..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇번 소개했던 mozjpeg, ZopfliPNG, pngquant, Gifsicle에 웹 프론트엔드를 얹은 서비스들이다. 다시 말하면 이 프로그램들을 로컬에서 실행하면 동일한 서..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인/모바일 환경에선 정렬을 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 HEIF/JPEG의 Exif 정보 중 촬영일자 정보를 읽어 파일명을 수정하고, 최대한 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 크기를 조금이라도 더 줄이고, 추가로 resample을 적용해서 사진 크기도 축소시켜준다. 또한, 사진과 더불어 함께 저장된 PNG, WebP,..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 비슷한 기능을 하는 PunyPNG도 있다. 여기는 JPEG, GIF까지도 지원해준다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇번 소개했던 mozjpeg, ZopfliPNG, pngquant, Gifsicle에 웹 프..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인 서비스/모바일 앱들은 정렬 순서를 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 JPEG에 저장된 Exif 정보 중 촬영일자 정보를 활용해서 파일명을 수정하고, 최대한 작은 크기로 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 자체의 크기를 조금이라도 더 줄이도록 했고, 이와 별개로 resample을 적용해서 사진의 크기도 축소시킬 수 있다. ..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 비슷한 기능을 하는 PunyPNG도 있다. 여기는 JPEG, GIF까지도 지원해준다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇 차례 소개한 적이 있던 mozjpeg, ZopfliPNG, pngquant, Gifsic..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 비슷한 기능을 하는 PunyPNG도 있다. 여기는 JPEG, GIF까지도 지원해준다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇 차례 소개한 적이 있던 mozjpeg, ZopfliPNG, pngquant, Gifsic..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인 서비스/모바일 앱들은 정렬 순서를 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 JPEG에 저장된 Exif 정보 중 촬영일자 정보를 활용해서 파일명을 수정하고, 최대한 작은 크기로 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 자체의 크기를 조금이라도 더 줄이도록 했고, 이와 별개로 resample을 적용해서 사진의 크기도 축소시킬 수 있다. ..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 비슷한 기능을 하는 PunyPNG도 있다. 여기는 JPEG, GIF까지도 지원해준다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇 차례 소개한 적이 있던 mozjpeg, ZopfliPNG, pngquant, Gifsic..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR의 시대는 저물고 있고, 다양한 장비들이 카메라의 자리를 차지하고 있다.아니, 전통적 의미에서의 카메라라는 가치 자체가 존재하는지 모를 정도이다. 그런데, 이렇게 많은 장비들로 찍은 사진들을 PC에서 정리해보면 의외로 정리가 쉽지 않다. 온라인 서비스/모바일 앱들은 정렬 순서를 Exif 촬영일자 순으로 하는 경우도 많지만, PC에선 파일명 순인 경우가 더 많아보인다.그러다보니 촬영시간 순도 아니고 카메라 기종순으로 파일을 보게 되는 경우도 많다. FPO는 JPEG에 저장된 Exif 정보 중 촬영일자 정보를 활용해서 파일명을 수정하고, 조금은 더 작은 크기로 파일을 줄여주는 프로그램이다.mozjpeg를 활용해서 파일 자체의 크기를 조금이..
아이폰/아이패드의 용량을 관리하기 위해 종종 사진이나 비디오를 지워야 한다. 물론, 요즘은 구글 포토 등의 서비스를 이용해서 백업 후에 지워버리면 되니 큰 문제가 아닐 수도 있다.게다가 jpeg 대신 HEIF로 저장하면 파일의 크기는 더 줄어든다. 하지만, 반드시 장비에 남겨둬야 하는 사진도 있는 법이고, 이 역시 차곡차곡 쌓이다보면 용량을 고민해야 하기 마련이다. 이런 경우에 iBackupBot과 몇몇 프로그램들을 이용하면 공간을 좀 확보할 수 있는 꼼수가 하나 나온다. 일단, iBackupBot을 이용해서 사진과 동영상이 저장된 폴더를 PC로 추출한다.저장된 위치는 Raw File System/DCIM/***APPLE. 필요한 도구는 본 블로그의 자랑 iPress와 iTrans. 백업이 끝나면 파일들..
2017/03/20 - Google의 Guetzli는 정말로 높은 압축률을 달성한 것일까? 지난 포스팅에서 구글 guetzli와 모질라 mozjpeg의 성능을 간단히 비교해봤다.그런데, 스스로에게 약간 미심쩍은(?) 부분이 있어 추가로 비교를 수행했다. 미심쩍은 부분은 아래와 같았다. 1. libjpeg가 발생시키는 artifact를 줄였다고 하는데, artifact가 없는 인공적인 이미지에서 테스트하면 어떨까2. PSNR 외에 PSNR-HVS-M의 차이는 어떨까3. 다른 사진에서도 지난 포스팅과 비슷한 결과가 나올까4. png 압축의 최고봉인 pngquant와 비교하면 어떨까 그래서 테스트의 범위를 좀 확대해봤다.이미지는 총 5가지에 대해 수행했고, guetzli, mozjpeg 외에 pngquant로..
2017/03/18 - Guetzli: 구글이 만든, mozjpeg보다 더 압축률이 높은 jpeg 라이브러리 이전 포스팅에서 Google에서 공개한 Guetzli를 소개했다. mozjpeg에 참가하는 pornel 씨는 120배 느리다는 얘기를 했지만, 어쨌거나 동작도 하고 쓸만한 것 같다는 생각이 들었다. 그런데, 어느 정도 더 향상이 있는지 확인을 해보고 싶어졌다. 동일한 원본을 놓고 처리한 뒤 파일 크기와 PSNR을 비교함으로써 성능의 차이를 확인해보기로 했다. 대상 이미지는 아무런 기준 없이(ㅋㅋㅋ) 해상도 별로 3개를 선정했다. 1. 작은 크기(635×443) / 51.6KB 2. 중간 크기(3264×2448) / 1.17MB 3. 큰 크기(9803×6998) / 2.52MB 이 3개의 이미지에 ..
최근에 개발된 이미지 포맷이 많지만, 여전히 널리 쓰이는 포맷은 jpeg와 png이다. 아무래도 '바퀴를 다시 발명하는 것을 싫어하는' 본능도 한몫 했을 것 같고… 그리고, jpeg 압축률의 최강은 mozjpeg이었다. 적어도 어제까지는… 그런데, 구글이 또 뭔가를 저지른 것 같다… 2017.3.16 구글은 블로그를 통해 Guetzli라는 라이브러리를 공개했다. jpeg 표준을 만족시키는 범위에서 더욱 높은 압축률을 보여주는 솔루션이다. 그런데, 이전의 Zopfli와 Brotli가 그랬듯, 이번에도 빵 종류에서 이름을 따왔다. 아직 초기 단계라 그런지 정상적으로 동작만 하는 수준이고 무척이나 느리다. (mozjpeg보다 120배 느리다고) 직접 돌려보니 대략 아래와 같은 결과를 볼 수 있었음. 1. 느린..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 디카 뿐만 아니라 스마트폰, 태블릿 등이 보급되면서 카메라로 활용할 수 있는 장비는 굉장히 많다. 그런데, 사진을 찍고서 PC 한 대로 모으고 나면 정리가 쉽지 않다.Exif의 날짜순으로 정렬해주는 뷰어도 있긴 하지만, 많은 뷰어들은 파일명 순으로 보여준다.그러다보니 사진을 보려면 촬영시간 순이 아니라 카메라 기종별로 보게 되는 경우가 많다. JPEG 포맷의 이미지 파일에는 Exif 정보가 들어있다.이 정보에는 해상도, 플래쉬 여부, 초점 거리, ISO 감도 등과 함께 촬영일자가 포함된다. FPO는 이 Exif에 기록된 촬영일자 순으로 파일명을 수정해주는 프로그램이다. 이 프로그램의 기능은 아래와 같다. - Exif에 기록된 촬영일자 순으로 파일명..
jpeg 파일을 생성하는 과정은 아래와 같다. 1992년 9월에 나온 기술이라 위의 과정은 이미 기술적으로 충분히 안정화된 상태.그런데, 이 기능 중에 거의 사용되지 않는 부분이 하나 있다. 위 그림 하단 가운데에 보이는 Arithmetic Coding(산술 부호화[코딩]). 흔히들 jpeg 압축의 마지막 단계는 허프만 코딩이라고 알고 있는데, 원론적으로는 반만 맞는 것이다.마지막 단계는 엔트로피 코딩이며, 엔트로피 코딩으로 허프만 코딩 외에 산술 코딩도 사용할 수 있다. 산술 코딩은 허프만 코딩에 비해 압축률이 높고 연산이 복잡하여 속도가 느리다. 속도보다 더 큰 문제는 이 산술 코딩이 꽤 많은 특허가 걸려있었다는 것.무려 11개의 특허가 걸려있는데다 반드시 구현해야 되는 게 아니라서 그동안 거의 구현..
libjpeg에서 이미지를 읽어들이는 부분의 코드(example.c)는 아래와 같다. /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline a..
최초 단초가 됐던 트윗에 나와 앞의 테스트들에 사용됐던 이미지들의 원출처를 확인했다. hadto.net의 GENERATION LOSS란 글이다. 글의 핵심은 최고 화질에서 조금씩 낮춰가며 jpeg 포맷으로 계속 읽었다 저장했을 때의 화질 저하를 확인하는 것. 같은 방식으로 사진 하나를 저장한 뒤 그 결과를 동영상으로 만들어봤다.우선, 사진을 하나 준비… 이 사진을 Q를 100에서 0까지 줄여가며 저장하면 아래와 같은 영상을 뽑을 수 있다. 위 영상을 보면 Q가 50 이하로 줄어들면 화면이 다소 심하게 깨지는 결과를 확인할 수 있다.그런데, 이 동영상/사진은 자칫 오독의 우려가 있다. 해당 이미지를 Q=30으로만 50번 저장한 결과를 보자. 그런데, 서서히 줄여가며 저장한 경우 Q=30으로 저장한 이미지는..
jpeg 인코더들의 화질 관련 마지막 포스팅. 이전 포스팅들에서 확인했듯이, jpeg로 수백번씩 읽었다 저장해도 심각한 수준의 화질 저하는 없었다.그런데, 바로 앞 포스팅에서 잠깐 확인해봤던 서로 다른 jpeg 인코더로 반복하는 경우를 조금 더 확인을 해보기로 했다.앞 포스팅의 그래프엔 샘플링 간격이 짝수이기 때문에 한 쪽 인코더의 결과만 나와있다는 점도 신경쓰였고. 선택한 인코더는 jpeglib-turbo와 mozjpeg.두 인코더를 번갈아가며 100회 저장한 결과의 PSNR은 아래 그래프와 같다. 뭔가 이상하다. 일정한 범위에서 계속 진동하는 결과를 보여준다.이건 좀 생각해볼 필요가 있는 묘한 부분이다. 더불어 앞의 포스팅 때 시험한 결과를 70회 반복 저장하면서, 저장 간격을 조금 다르게 출력해서 ..
Mozilla JPEG Encoder ProjectThis project's goal is to reduce the size of JPEG files without reducing quality or compatibility with the vast majority of the world's deployed decoders. 나는 jpeg 라이브러리로 mozjpeg을 사용한다.이 라이브러리는 위에서 보는 것과 같이 같은 화질에서 품질의 저하 없이 파일의 크기를 줄이는 목적으로 시작된 프로젝트다. 첫 버전이 출시되었을 때는 libjpeg-turbo에 jpegcrush 기능을 추가한 형태였는데, 이 때는 정말로 화질의 변화가 전혀 없었다. 그런데, 이제 3.0까지 업데이트되었고, 확인해보니 화질의 저하도 약..
2015/04/05 - jpeg#1 : 같은 이미지를 jpeg로 반복 저장하면 정말로 박살나는가? 지난 포스팅에 이어지는 글이자, 위 트윗들 보고 어이 없어서 쓰는 포스팅. 물론, 위의 트윗들은 아래 트윗의 답글 중 일부다. 저 트윗을 쓴 분의 얘기는 그러니까… 1. 윈도우의 jpeg encoder는 DCT 변환 테이블을 잘못 만들었다고 추정함 2. C언어는 math.h의 오류로 sin/cos 함수는 오차가 꽤 나올 수 있음 대략 이렇게 정리될 수 있고, 요약하면 MS의 프로그래머들은 등신이라 저런 오류가 실제로 발생한다는 얘기다. 정말 저런 결과를 보여주는지 확인하기 위해 앞의 포스팅과 같은 기능을 하는 프로그램을 C#으로 만들었다. 이 프로그램은 이전의 프로그램과 사실상 동일한 기능을 한다. 딱 한 ..
발단은 한 줄의 트윗이었다.jpeg로 반복 저장을 600회하면 원래 없던 붉은 점이 가득 끼며 화질이 열화되는 것을 넘어 박살이 난다는 얘기다…이 트윗에 대한 답글로 온갖 이론이 난무하고, 결국 MS의 jpeg 인코더가 범인이라는 아무런 근거 없는 결론(?)이 났다. 근데, 근본적으로 생각해봤다.jpeg는 이미지를 저장할 때 코사인을 기반으로 하는 DCT 변환을 하고, 고주파 성분을 제거하는 방식으로 손실압축을 한다.즉, jpeg에서 화질의 열화는 있는 성분이 사라지는 것이지, 없던 게 태어나는 게 아니다.좀 쉽게 표현하면 날카로움이 사라지고, 흐릿해지며, 두리뭉실해지는 것이다. 반복 저장을 하면 화질이 열화되는 건 당연한데, 결코 저런 방식일 수가 없는 것이다. 이론은 이론일 뿐이고, 과연 얼마나 손상..
한 집안에 있는 카메라가 끽해야 두어대이던 시절이 있었다. 수학여행 간다고 아버지가 애지중지하시던 카메라를 빌려갔던 기억도 난다. 그런데, 요즘은 디지털카메라가 넘쳐난다. 우리 집만 해도 디카와 폰카를 다 합치니 여섯 대가 나온다. 난 사진을 날짜/시간순으로 정렬하고 폴더에 정리하는데, 디카가 여러대인데다 사진 장수도 많아 쉽지가 않다. 더군다나, 디카마다 시간이 미묘하게 다른데, 이게 가끔 신경이 쓰인다. 1. 동영상 변환 아이폰/아이패드 처럼 동영상을 mp4/H.264로 깔끔하게 떠주는 디카는 아직도 많지 않다. 여전히 AVI/mjpeg의 커다란 파일로 만들어주는 경우가 더 많다. 화질에 대비해 파일의 크기가 너무 크다… 그래서, iDevice용 동영상 변환기 iTrans v10.3a를 사용한다. 변..
지난 3월 5일 모질라에서는 mozjpeg라는 프로젝트를 발표했다. 이것은 기존 JPEG의 규격을 그대로 유지하면서 JPEG 압축률을 대폭 향상시키는 프로젝트다. 즉, 구글 WebP의 커다란 걸림돌이 나타난 것이다. 이번에 발표된 1.0을 직접 컴파일해보니 VS에서는 약간의 오류 수정이 필요했다. 제대로 동작하게 하려면 두 개의 파일을 수정해야 한다. 1. CMakeLists.txt 488행은 다음과 같다. SOURCES libjpeg-turbo.nsi) 이것을 아래와 같이 수정해야 한다. SOURCES libmozjpeg.nsi) 2. jcparam.c 741행부터는 다음과 같다. GLOBAL(void) jpeg_simple_progression (j_compress_ptr cinfo) { if (ci..
인터넷 환경이 아무리 빨라지더라도 그 바닥(?) 중요 테마 중 하나는 전송량을 줄이는 것이다.그리고, 전송량 중에서 이미지가 차지하는 비중은 굉장히 높다. 다양한 이미지 포맷이 있지만, 인터넷(특히 웹)에서는 JPEG과 PNG이 압도적으로 많이 쓰인다. JPEG가 1992년, PNG이 1996년에 발표됐으니 20년정도 지났고, 나올만한 기술은 다 나왔다고 봐야 된다. 즉, 이제 두 포맷의 압축률은 거의 한계점이라 보는 것이 정설이다. 많은 사람들이 그런 줄 알았다… 하지만, 현실은 언제나 외계인이 지배하는 법… 1. PNG 압축의 여력이 더 큰 쪽은 PNG이다.기본적으로 PNG은 무손실 압축이기 때문에 전처리를 거의 하지 않는다. 필터링 단계가 있기는 하지만, 큰 영향을 주는 정도는 아니다. PNG 파일..