온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇번 소개했던 mozjpeg, ZopfliPNG, pngquant, Gifsicle에 웹 프론트엔드를 얹은 서비스들이다. 다시 말하면 이 프로그램들을 로컬에서 실행하면 동일한 서비스를 누릴 수 있으며, 업로드 제한 따윈 걱정할 필요도 ..
이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인/모바일 환경에선 정렬을 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 HEIF/JPEG의 Exif 정보 중 촬영일자 정보를 읽어 파일명을 수정하고, 최대한 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 크기를 조금이라도 더 줄이고, 추가로 resample을 적용해서 사진 크기도 축소시켜준다. 또한, 사진과 더불어 함께 저장된 PNG, WebP, avi, mp4 등의 다양한 미디어 자료들도 함께 파일명..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. TinyPNG가 가장 잘 알려져있는데, 최근에는 여기서 JPEG도 지원하도록 기능이 추가되었다. 그런데, 이런 사이트를 통해 이미지를 압축하려면 내가 가진 이미지를 업로드해야 한다는 근본적인 문제가 있다. 왜 내 개인 이미지를 온라인에 올려줘야 되지? 그리고, 그 사이트들이 내 이미지를 다른 목적으로 사용하지 않는다는 보장이 있나? 사실, 이 사이트들이 사용하는 알고리즘은 대동소이 아니, 동일하다. 본 블로그에서도 몇번 소개했던 mozjpeg, ZopfliPNG, pngquant, Gifsicle에 웹 프론트엔드를 얹은 서비스들이다. 다시 말하면 이 프로그램들을 로컬에서 실행하면 동일한 서..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 이제 DSLR 이외의 수많은 장비들이 카메라의 자리를 대신하고 있다. 이러다보니, 여행을 가서 찍은 사진을 모아보면 의외로 정리가 쉽지 않다. 온라인/모바일 환경에선 정렬을 Exif 촬영일자 순으로 하는 경우가 많지만, PC에선 파일명 순인 경우가 일반적이다. 그러다보니 촬영시간 순서는 알기 힘들고 카메라 기종순으로 파일을 보게 되는 경우가 대부분이다. FPO는 HEIF/JPEG의 Exif 정보 중 촬영일자 정보를 읽어 파일명을 수정하고, 최대한 파일을 줄여주는 프로그램이다. mozjpeg를 활용해서 파일 크기를 조금이라도 더 줄이고, 추가로 resample을 적용해서 사진 크기도 축소시켜준다. 또한, 사진과 더불어 함께 저장된 PNG, WebP,..
JPEG 포맷은 표준안이 나온지 30년이 되어가지만, 여전히 널리 사용되는 포맷이다. 심지어, 차세대 JPEG을 표방하는 코덱이 좀 나왔었는데, 다 나가떨어질 때까지 JPEG는 버티고 있다. 물론, 영상을 전문으로 하시는 분들께는 그냥 한물 간 포맷이겠지만, 현실세계에선 그렇지 않다. JPEG는 압축률이 꽤 뛰어나다는 장점이 있지만, artifacts라 흔히 통칭되는 노이즈가 가장 큰 약점이다. 그리고, 나온지 오래된 포맷답게 이 artifacts를 없애는 방법들이 꽤 검토되었고, 대표적으로 다음 두 가지 방식이 있다. 1. 이미지 자체에서 artifacts로 인식되는 영역 제거 가장 손쉽게 접근한 방식은 파일을 읽은 뒤에 각 픽셀을 인접 픽셀들과 비교하는 것이다. Paint.NET의 플러그인 중 하나인..
새 버전이 나왔습니다. 새 버전을 사용해주시기 바랍니다. 온라인에서 이미지의 크기를 줄여주는 많은 사이트들이 있다. 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를 활용해서 파일 자체의 크기를 조금이..
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에 기록된 촬영일자 순으로 파일명..
아이들 방학숙제를 도와주는데, 사진첩을 만드는 숙제가 있었다.찍어놓은 사진들은 많은데, 문제는 이 사진들을 비슷한 크기로 인쇄하는 자체가 손이 많이 간다는 것. 그래서 하나 급조해봤다.사진들을 떨어뜨리면 이를 지정된 크기로 설정해서 하안글(정확히는 HML) 파일로 만들어주는 프로그램.긴 변의 길이를 지정한 크기에 맞춰 일정 비율로 줄여서 하안글 파일에 끼워넣어준다. 삽입 가능한 이미지는 JPEG, PNG, GIF의 세 종류.리스트 컨트롤에 떨어뜨린 뒤 파일을 생성한 뒤 하안글에서 읽으면 아래와 같은 화면을 볼 수 있다. 이 프로그램은 아래 링크에서 다운받을 수 있다.
며칠간 삽질한 것을 잊지 않으려고 적는 포스팅 jpeg 파일에서 다양한 정보를 담는 Exif영역은 IFD로 구분되고, 제일 먼저 등장하는 것이 IFD0이다. 그리고, 각 IFD와 데이터의 저장 위치는 TIFF 헤더로부터의 offset으로 위치를 표현한다. 그리고, IFD0의 offset는 당연하게도 8이다. 자작 프로그램들 중에 exif를 수정하는 프로그램들은 이 값을 8로 하드코딩해서 만들었다. 그런데, 이 값이 8이 아닌 jpeg 파일을 만나게 됐다. 당연히 프로그램은 오류를 유발하고 exif 영역이 망가졌다. 결국 8로 하드코딩한 부분을 모두 정상적으로 읽어서 처리하도록 수정해서 문제 해결.
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에서 화질의 열화는 있는 성분이 사라지는 것이지, 없던 게 태어나는 게 아니다.좀 쉽게 표현하면 날카로움이 사라지고, 흐릿해지며, 두리뭉실해지는 것이다. 반복 저장을 하면 화질이 열화되는 건 당연한데, 결코 저런 방식일 수가 없는 것이다. 이론은 이론일 뿐이고, 과연 얼마나 손상..
iTrans를 업데이트하면서 이미지의 해상도를 읽어야 할 상황이 생겼다.IJG 및 libpng를 사용하면 되긴 하지만, 고작 해상도 정보 얻자고 라이브러리까지 쓰긴 좀 그래서 간단한 방법을 쓰기로 했다. 간단히(응?) 파일을 뒤져서 해상도 정보를 찾는 것. cplusplus.com에서 관련된 소스를 찾을 수 있었다.그런데, 이 코드에는 사소한 문제들이 있다. - GIF도 포함된 소스인데, 난 GIF는 안 쓰기 때문에 제거 가능 - 파일 크기를 얻기 위해 fseek() 등을 쓰는데, 필요 없음- JPEG 헤더를 읽을 때 EXIF가 앞에 들어있는 경우는 제대로 처리하지 못함- 파일의 형식은 알려주지 않음 아래 코드는 이 내용이 반영된 코드이다. // itype: 1=JPEG 2=PNG bool getImag..
멍청하게 실수한 내용을 정리해서 나중에 똑같은 반복을 하지 않기 위해 기록 디카들로 찍은 사진을 손쉽게 정리하기 위해 디카 사진 정리 도구 FPO(Family Photo Organizer)를 만들어 쓰고 있다. 한땀 한땀 만든 코드라, 버그가 없다고 착각생각하며 쓰고 있었는데…치명적인 버그를 발견했다.실수로 Exif에서 GPS 위치 정보를 삭제하도록 만든 것이다. 더 미치는 건, 깔끔하게 GPS 정보를 날리는 게 아니라 계산 오류로 GPS 정보 필드를 반토막… lllorz 1. 아이 클라우드 일단 PC로 복사하고 폰에서 삭제한 사진들의 백업본을 뒤져봤다.잡스 느님의 은혜로우신 작품 아이 클라우드가 있어 사진들이 다 백업되어있…을줄 알았다.하지만, 뒤져보니 70장 정도밖에 백업이 안 되어있었다. 일단 이 ..
한 집안에 있는 카메라가 끽해야 두어대이던 시절이 있었다. 수학여행 간다고 아버지가 애지중지하시던 카메라를 빌려갔던 기억도 난다. 그런데, 요즘은 디지털카메라가 넘쳐난다. 우리 집만 해도 디카와 폰카를 다 합치니 여섯 대가 나온다. 난 사진을 날짜/시간순으로 정렬하고 폴더에 정리하는데, 디카가 여러대인데다 사진 장수도 많아 쉽지가 않다. 더군다나, 디카마다 시간이 미묘하게 다른데, 이게 가끔 신경이 쓰인다. 1. 동영상 변환 아이폰/아이패드 처럼 동영상을 mp4/H.264로 깔끔하게 떠주는 디카는 아직도 많지 않다. 여전히 AVI/mjpeg의 커다란 파일로 만들어주는 경우가 더 많다. 화질에 대비해 파일의 크기가 너무 크다… 그래서, iDevice용 동영상 변환기 iTrans v10.3a를 사용한다. 변..
인터넷 환경이 아무리 빨라지더라도 그 바닥(?) 중요 테마 중 하나는 전송량을 줄이는 것이다.그리고, 전송량 중에서 이미지가 차지하는 비중은 굉장히 높다. 다양한 이미지 포맷이 있지만, 인터넷(특히 웹)에서는 JPEG과 PNG이 압도적으로 많이 쓰인다. JPEG가 1992년, PNG이 1996년에 발표됐으니 20년정도 지났고, 나올만한 기술은 다 나왔다고 봐야 된다. 즉, 이제 두 포맷의 압축률은 거의 한계점이라 보는 것이 정설이다. 많은 사람들이 그런 줄 알았다… 하지만, 현실은 언제나 외계인이 지배하는 법… 1. PNG 압축의 여력이 더 큰 쪽은 PNG이다.기본적으로 PNG은 무손실 압축이기 때문에 전처리를 거의 하지 않는다. 필터링 단계가 있기는 하지만, 큰 영향을 주는 정도는 아니다. PNG 파일..
2년쯤 전에 libjpeg 6b-SIMD와 libjpeg-turbo 등을 비교해본 적이 있었다. (JPEG 라이브러리 성능 비교)VCPP6에서도 컴파일되는 6b-SIMD와 VS2005 이상에서만 되지만 탁월한 성능의 turbo 등을 비교했었다. 그 때에 비해서 libjpeg-turbo의 성능이 훨씬 빨라진 것 같다.같은 이미지를 100번 읽었다 쓰는 테스트를 두 라이브러리를 이용해서 해본 결과…6b-SIMD에서는 28.689초 걸렸고… libjpeg-turbo에서는 21.918초 걸렸다. 즉, 현재 버전(1.3.0)은 6b-SIMD에 비해 1.3배 빠른 성능을 보여준다.요즘은 무슨 오픈 소스 만들 때도 외계인 몇 명 갈아넣는 거 같다… ㄷㄷㄷㄷ 덧1. libjpeg-turbo는 구글 크롬에서도 사용되는 ..