예전에는 이런현상을 발견하지 못했는데 오늘 우연히 gif 이미지를 설정된 사이즈로 리사이즈 하는 과정에서 오히려 이미지용량이 7배 정도 늘어나는 것을 확인했습니다. 3메가 짜리가 26메가로 변하더군요,.
혹시 이미지매직의 리사이즈방식을 이미지프로세서모듈에서 관여하는 것인가요? 이러한 문제가 있다면 이미지프로세서모듈에서 수정을 해야 하는건지 궁금합니다.
사이즈는 분명 설정된 사이즈로 줄지만 레이어를 다시 만들때 뭔가 더 용량이 커지는 방식으로 다시 조립되는 것 같은데요.
혹시 이런 문제 발견하시고 해결하신 분 있나요 ?
일단 우선 GD로 변경해 놓은 상태입니다.
댓글 20
GD는 움짤을 리사이즈하면 첫 프레임밖에 안 남을 텐데요.
이미지매직에서 GIF를 어떻게 처리하는지는 모르겠습니다만, JPG도 화질을 지나치게 높게 설정해 놓으면 리사이즈 후 용량이 오히려 커지는 일을 종종 봅니다.
그런데 혹시 원본이 GIF로 위장한 일반 동영상 파일(예: mp4)은 아니었겠지요? 80년대에 만들어진 GIF보다 요즘 동영상 포맷들의 압축률이 훨씬 좋기 때문에 imgur 같은 곳에서도 트래픽 절약을 위해 GIF를 동영상으로 바꿔서 보여주곤 하거든요. 다시 GIF로 바꾸면 당연히 용량이 몇 배나 커지고요. 만약 이런 파일을 GIF인 척 올렸다면...?
제가 영상을 웹에서 gif로 변환해서 3.5메가로 만든건데요. 이게 업로드 되면서 한 5분 걸립니다. 26메가로 됩니다 ㅜㅡ
같은 프레임 스킵(동일 프레임이 반복되는 경우 계속 프레임을 넣기보다는 딜레이를 넣습니다) 등 최적화가 된 gif 파일을 변환하는 경우 최적화된 것이 사라지면서 용량이 늘어나는 경우가 있습니다. 대표적으로 http://blog.bahraniapps.com/gifcam/ gifcam을 사용해 만들어진 gif의 경우 각종 최적화 기법이 적용되어 있기에 변환시 최적화한 것이 사라지면서 용량이 늘어나게 됩니다.
이런 이미지를 리사이즈가 하는 경우 사이트가 멈춘 듯한 상황에 처할텐데 이미지매직을 계속 쓰기 부담스러운 경험을 했네요.
이거 큰일이네요.
혹시 모든 gif가 다 그런가요?
저는 제가 영상 컨버팅 한것만 테스트해봐서요.
이전에는 이런 경우가 전혀 없었는데 오늘 발견했는데 뭔가 이상하기만 해요.
최적화가 된 경우가 뭔지 미리 알수 없을것 같아..고민입니다.
흠...신기하네요. 우연히도... 곰돌이 이미지......
이미지매직을 사용해서 GIF 프레임 수 및 최적화 여부를 확인하는 방법을 찾아냈습니다.
1. 프레임 수 확인
$frames = trim(shell_exec('identify ' . escapeshellarg($filename) . ' | wc -l'));
결과값 $frames가 1보다 크면 움직이는 GIF입니다. 50~100을 넘어간다면 상당히 복잡한 동영상이겠지요.
2. 최적화 여부 확인
$optimized = trim(shell_exec('identify -format "%wx%h%O\n" ' . escapeshellarg($filename) . ' | sort | uniq | wc -l'));
결과값 $optimized가 1보다 크면 프레임마다 크기가 다른 (프레임마다 화면 전체를 저장하지 않고 그때그때 필요한 부분만 갱신하도록 만들어진) GIF입니다. 프레임 크기를 달리하는 것이 가장 효과적인 최적화 방법이기 때문에 아마 이것만으로도 꽤 많이 걸러낼 수 있을 것 같네요.
파일 용량, 프레임 수, 최적화 여부 등을 기준으로 일정 기준을 넘어가면 리사이즈를 시도하지 않도록 해야겠습니다. 문제의 파일로 테스트해 보세요. 파일명을 $filename에 넣으면 됩니다.
이미지매직이 설치된 서버라면 identify 명령은 대개 convert 명령과 같은 경로에 있습니다. (예: /usr/bin/identify)