이미지프로세스 작업을 하다 좀 뜨끔했습니다.

 

GD프로세싱은 화질은 떨어지고 파일사이즈는 크고 메타데이터는 소실됩니다.

이미지매직을 선택한 큰 이유가 바로 이런 GD의 단점때문이었습니다.

즉 외부실행파일을 구동하는 불편이 있지만 화질은 유지되고 화일사이즈는 큰 차이가 없으면서 메타데이터는 유지됩니다.

 

이번에 PHP extension인 imagick을 작업하다보니 위의 둘다 정답은 아니었던 것같습니다.

 

사실 화질, 파일크기, 메타데이터의 세마리 토끼를 다 잡는 방법은 없습니다.

하지만 세마리 토끼를 다 잡을 수 있는 방법이 있을 것같습니다.

 

우선 그 첫번째로 화질과 파일사이즈를 비교해봤습니다.

 

원본파일 2560 X 1440 화질의 821KB 크기입니다.

 

GD의 경우 80% 화질에서 229K 사이즈에 벌써 노이즈가 보이기 시작합니다.

K-20190320-386658.png

화질을 40%로 낮추면 파일 사이즈는 줄어들지만 노이즈는 왕창 늘어납니다.

K-20190320-387133.png

 

 

 

아미지매직으로 프로세싱을 하면 같은 80% 화질에서 GD에 비해 노이즈가 훨씬 적고 파일 사이즈도 작습니다.

K-20190320-387841.png

 

이번에는 PHP imagick으로 프로세싱을 했습니다.

K-20190320-382953.png

이미지매직과 비슷하게 화질도 나쁘지 않고 파일 사이즈도 비슷합니다.

imagick extension이 이미지매직의 한 형태이기때문에 어찌보면 당연한 것일지도 모르겠습니다.

 

작업을 하다보니 이미직은 이미지최적화가 되어있어서 copression과 상관이 없습니다.

과거에는 GD처럼 quality 설정에 따라서 화질과 사이즈가 변했지만 최근 버전에서는 아무 변화가 없습니다.

quality 변수과 상관없이 동일한 화질의 동일한 사이즈로 프로세싱됩니다.

 

근데 imagick에서 획기적으로 파일사이즈를 줄이는 방법이 있으니 메타데이터를 제거하는 겁니다.

K-20190320-395696.png

 

동일한 조건에서 메타태그만 제거했을뿐인데 146K로 줄었습니다.

일반적인 사이트들의 경우 메타태그는 불필요한 기능입니다.

따라서 메타태그를 제거해서 화일을 줄일 수 있으면 최상일 것같습니다.

 

다만 사진위주의 사이트들에서 메타태그를 보존해야한다면 추출해서 별도의 .테이블에 넣어서 보관하는 방법이 가장 좋은 방법일 것같습니다.

 

imagick의 또 한가지 장점이자 단점은 php 내부에서 실행되지만 memory_limit의 제한을 받지 않습니다.

이론적으로 무한대까지 메모리를 차지할 수 도 있다는 의미입니다.

하지만 이것도 $image->setResourceLimit()로 제어 할 수 있어서 큰문제는 아닐 듯합니다.

 

검색하다보니 imagick의 memroy leak에 대한 문서이 꽤 있어서 프로세싱과정에서 메모리를 찍어봤더니 GD보다 높지는 않습니다. 거의 비슷하거나 미미하지만 약간 낮은 정도...

 

한줄요약 : imagick extension이 쵝오다!!!

karma

profile
imageprocess, 통합검색확장모듈
아빠팬더곰은 영원한 초보
  • profile
    위 이미지 캡춰부분은 500배 확대한 화질입니다.
  • ?
    오호라..
  • profile
    오오 좋네요 ㅎㅎ 개선된 버전 기대됩니다.