XE나 Rhymyx나  GD를 기본으로 하고 있습니다.

 

오래전부터 GD가 싫었지만 PHP 4x, 5x 시절에 imagick 설치에 실패하고 울며겨자먹기로 GD와 외부화일인 imagemagick을 이용해왔었습니다.

요즘에는 php 7.x에 들어서면서 기본으로 설치되는 경우가 많고 기본으로 들어있지 않아도 예전처럼 소스구해서 컴파일하는 번거러움 하나도 없이 yum이나 apt-get 으로 간단하게 설치가 되네요.

 

오늘은 작정하고 rhymix 코어를 조금 건드려봤습니다.

FileHandler::createImageFile() 요놈입니다.

 

if (extension_loaded('imagick'))
{
    imageick 실행
}
else
{
    기존 GD 실행
}

 

요즘 스마트폰 카메라 성능이 좋아지면서 이미지화일의 사이즈가 기하급수적으로 증가하고 있습니다.

최신 핸프폰에서 최고화질로 찍은 사진을 바로 올리면 어지간한 서버에서는 썸네일도 못만들어냅니다.

GD는 모든 이미지를 몽땅 메모리에 올려서 프로세싱하기 때문에 php의 memory_limit에 제한을 받습니다.

하지만 imagick이나 imagemagick은 필요한 만큼 읽고 프로세싱을 점진적으로 시행하기 때문에 php의 memory_limit에 제약을 받지 않습니다.

 

프로세싱 속도면에서는 큰 이득이 없다고 알려져있습니다.

하지만 같은 화질에서 이미지크기의 차이는 3배이상 나는군요.

 

GD로 프로세싱한 썸네일

위는 기존 GD로 프로세싱한 썸네일입니다.

파일크기가 9.53KB

아래 imagick에서 프로세싱한 썸네일 2.17KB 1/4로 사이즈가 줄어드는군요.

imagick으로 프로세싱한 썸네일

 

XE는 그렇다치더라도 라이믹스라도 imagick을 지원해주면 좋겠네요.

karma

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

    제가 예전에 한번 메일로도 알려드린 적이 있는데요. 이미지매직으로 사용할 경우 한가지 현재 치명적인 문제가 있습니다. (현재 저희는 해당 포맷 자체를 다른 포맷으로 변경해서 제공하면서 문제가 되지 않게 되긴 했습니다.)

    이미지프로세서 모듈 gif 리사이즈 문제인데요. 이미지매직이 gif 포맷을 리사이즈까지 해주어 정말 좋았습니다. 그런데 gif 이미지중 동일한 프레임을 최적하해서 만들어주는 툴을 이용해 만든 gif 를 리사이즈시 오히려 용량이 다시 10배 이상 까지도 늘어나고 리사이즈만 5분 넘게 걸리고 서버가 무리가 가는 경우가 발생하더군요.

    이러한 문제점이 있다는 정도 알려드리고 싶어 예전에 메일로 한번 보내드렸었습니다.

    일단 저희는 gif 포맷 자체가 너무 비효율적이고 위와 같은 문제가 있어서 현재는 mp4로 변환해서 업로드하는 방식으로 변경했습니다.(관련 모듈 사이트에 적용했습니다.)

     

     

    https://xetown.com/questions/741648

  • profile profile
    imagemagick과 imagick은 또 다릅니다.
  • profile profile
    네. 일단 저희는 이미지매직이었고 위와 같은 문제가 서버가 다운되는 상황이 발생될 수 있어 GD로 전환했다가 지금은 다시 gif 포맷은 동영상으로 건버팅하는것으로 하고 이미지매직으로 복귀했습니다.
  • profile
    memory_limit을 적용받지는 않지만, 용량이 큰 이미지를 로딩하면 memory_limit보다 훨씬 많은 메모리를 멋대로 할당해 버려서 서버가 통째로 뻗는 것을 본 적이 있습니다. PHP 5.x 시절이었으니 이제는 달라졌을지도 모르지만, 쉘에서 실행하는 convert 프로그램과 PHP의 imagick 확장모듈은 지원하는 기능뿐 아니라 리소스 사용량 측면에서도 뭔가 많이 다르다는 느낌을 받았어요.

    PHP.net에서 제공하는 공식 매뉴얼이 완전 개판이라는 점도 왠지 imagick 사용을 꺼리게 하네요. ㅎㅎ 만약 라이믹스에 적용한다면 imagick 함수를 직접 호출하는 형태가 아니라 Imagine이나 Intervention Image 같은 라이브러리를 끌어다 쓰는 형태가 될 것 같습니다.