이미지프로세스 모듈을 대대적으로 손보고 있는 중입니다.

 

우선은 EXIF 처리 방침의 변경으로 애드온과 연계해서 삭제했지만 DB에 넣어서 보관하는 방식으로 변경중입니다.

 

두번째는 Rhymix 내부기능을 최대한 이용하는 것입니다.

이렇게 되면 XE나 하위버전 호환성은 떨어지겠지만 속도는 많이 개선되는 것같습니다.

 

세번째는 imagick 적용입니다.

GD의 단점을 극복하고자 그동안 외부실행화일인 ImageMagick을 주로 이용했었습니다.

뒤에 좀더 자세히 살펴보겠지만 imagick이 화질이나 이미지크기면에서는 좋기는 한데 체감상 속도는 약간 떨어지는 듯합니다.

문제는 사용이 제한적입니다.

PHP 7.X에서는 메모리문제가 심각해서 거의 사용이 불가합니다.

PHP 8.0에서만 그나마 조금 쓸만한 것같습니다.

PHP 7.3에서 사용해보려고 노력했지만 걸핏하면 메모리문제로 에러가 생겨서 프로세싱이 안되는 현상이 생기더군요.

특히 조금 큰사이즈이미지는 아예 리사이징을 하지 못하는 현상이 있었습니다.

이번 이미지프로세스 버전에서는 PHP 8.X에서만 사용이 가능하게 수정했습니다.

 

작업하는 과정에서 역시 Imagick소리가 절로 나더군요.

 

1400x 811크기의 원본이미지로 작업을 했습니다. 크기는 294K

 

GD

imageMagick

imagick

ResizeOnly

704

470

209

Fullprocess 화질100

760

481

214

Fullprocess 화질80

561

289

214

 

이미지마크나 텍스트로고를 제외한 리사이즈만 했는데도 GD의 경우 사이즈 3배가까이 늘어나 버렸습니다.

화질을 80%로 조절해도 풀프로세싱을 하면 561K로 두배 가까이 됩니다.

반면 Imagick의 경우 214K로 이미지사이즈는 물론 화일사이즈로 쓸만합니다.

육안으로 화질을 확인하는 것이 한계가 있기는 하지만

GD로 리사이즈만 한 것보다 Imagick으로 풀프로세싱한 것이 화질이 나빠보이지 않습니다.

 

최근에는 rhymix 내분에서 리사이즈 및 이미지 방향교정등의 기능이 들어가 있습니다.

코어에서는 75% 화질은 78K, 80% 화질에서는 90K등으로 압축효율이 좋습니다.

물론 GD의 한계로 100% 화질을 적용하면 704K로 늘어나기는 마찬가지입니다.

어쩌든 프로세싱이 구태여 필요없고 단순한 리사이징문제라면 코어의 기능만으로 충분할 것같습니다.

karma

profile
imageprocess, 통합검색확장모듈
아빠팬더곰은 영원한 초보
  • profile

    100% 화질은 무조건 낭비죠. GD 디폴트가 75%인데 억지로 끌어올려서 압축을 방해하는 꼴이니, 원본보다 용량이 오히려 커지는 경우가 대부분입니다. XE에서 오랫동안 100%로 썸네일을 생성하는 바람에 수많은 사이트들이 불필요한 용량과 트래픽을 사용해 왔습니다.

     

    GD와 ImageMagick의 화질 설정을 1:1로 비교하기는 어렵습니다. 표준화된 수치가 아니기 때문입니다. GD는 디폴트가 75이므로 80으로 설정하면 원본과 비슷하거나 더 높은 화질일 가능성이 높습니다. 반면, ImageMagick은 디폴트가 92이므로 80으로 설정하면 낮은 화질이 됩니다. 다른 포맷으로 변환한 것도 아닌데 파일 크기가 절반 이하로 줄어들었다면, 육안으로 구분하기 힘든 화질 저하가 있을 가능성이 높지요.

     

    라이믹스 2.1에서 ImageMagick 외부실행파일과 연동하는 기능이 추가되었습니다. GD가 지원하지 않는 HEIC 같은 포맷을 변환하거나, GD로 처리하기에는 메모리가 부족한 초고화질 사진을 조작할 때 사용합니다. 단, HEIC 문제로 IM6의 "convert" 명령은 지원하지 않고, IM7의 "magick" 명령을 기준으로 연동되어 있습니다. 최신 버전 기준으로 연동하실 생각이시라면 IM7을 시도해 보시는 것을 추천합니다.^^

  • profile profile
    예 magick 도 잠깐 살펴보기는 했습니다.
    command line도 미세하게 차이가 있는 것같았습니다.
    문제는 실행화일 달랑 하나 있어서 리사이즈만 하는 경우는 문제가 없지만 composite 등의 다른 기능을 활용할 방법을 아직 찾지 못해서 적용을 못하고 있었습니다.

    현재 록키리눅스 기준으로 dnf 설치가 가능한 ImageMagick 버전은 6.9.12입니다.
    magick이 7.1.1이고 홈페이지에서 배포중인 7.1.1 버전을 rpm으로 설치했는데 작동을 안합니다.
    GLIBC_2.35 가 필요하다네요...ㅎ헉
    현재 깔려있는 것은 glibc 2.34 한끝발 차이로...
  • profile profile

    rpm 말고 그냥 바이너리 실행파일 magick을 다운받아서 /usr/local/bin에 넣으셔도 됩니다.

     

    복잡한 기능을 넣으려면 command line 파라미터가 굉장히 복잡해지겠네요.

    IM 7 버전도 빨리 PECL 확장모듈로 패키징해 주면 좋을 텐데...

    현재 주요 리눅스 배포판들 중에는 Fedora와 Arch만 7 버전으로 넘어온 것 같습니다.

  • profile profile

    magick은 설치해서 테스트 해봤습니다.
    문제는 convert의 기능은 그대로 사용이 가능하지만 이미지워터마크의 경우 composite를 사용하는 관계로 magick만으로 모든 기능을 구현하는데는 한계가 있어서 정식7.1.1을 rpm으로 설치하려고 했던 겁니다.
    현재로서는  개인적으로 php8.0 extesnsion인 Imagick으로 만족하고 있습니다.

  • profile
    php 7.4인데 8로 갈아타야할 때가 된건가요? 에러 뿜으면 그거 잡느라 또 전투력이 상승할텐데 암튼 기대됩니다. 변함을 두려워하지 말고 받아들이기로 했습니다. ^^
  • profile

    유용한 테스트 자료 감사합니다.
    webp 및 heic 도 사용자가 업로드할 수 있게 처리해야 할 것 같아서, 저도 요즘 여러가지 살펴보고 있었는데, 도움이 되는 자료네요.