애플이 새로 선보인 HEIC 포맷은 이 글을 작성하는 시점에서는 아직 pure java로 다룰 수 있는 라이브러리가 없는 상황이다.
따라서 ImageMagick을 설치하고 im4java로 호출해서 변환하는 게 최선이다.
heic 확장자인 HEIF 포맷은 x265 기술 기반이 있어야 돌아간다.
libheic -> libde265 -> x265 순서로 의존 관계가 있다.
이 HEIC가 최신 포맷이고 최신 소스라 몇몇 리눅스 배포판에서는 빌드툴부터 최신버전으로 갖추고 시작해야 한다.
Amazon Linux2 도커 이미지가 그러했다.
각 툴마다 선제적으로 설치 되어야 하는 툴은 yum으로 설치 했다.
yum이 여러번인데 이렇게 기술한 이유는 구글링 해서 나오는 설치 예제들은 yum을 한방에 해서 어느 과정에서 해당툴이 필요하게 되는지 알 수 없었기 때문이다. 난 C 개발자가 아니라 그렇게 해서는 잘 모른다.
참고로 이번에 이미지매직을 설치하면서 알았던 것은 어떤 프로그램을 빌드하기 위해 yum이나 apt로 라이브러리를 설치할 때는 해당 라이브러리와 함께 -dev나 -devel 을 붙인 패키지를 같이 설치해야 한다는 점이었다. devel 패키지는 C 소스를 빌드하는데 필요한 헤더 파일 및 pkgconfig 빌드툴에서 사용하는 pc 파일 등을 시스템에 설치하는 역할을 하기 때문이다. 이것도 한참 헤맸다.
제일 설치가 어려웠던게 x265와 libde265였다.
x265는 빌드 스크립트에 ccmake란 툴이 기술되어 있는데 이 툴은 gui용 프로그램을 빌드하는 툴이다. 자바 웹 서버로 이미지를 컨버트 해서 변환된 파일만 내려주는 app을 만들거였기 때문에 결국 빌드 과정에서 스크립트 안의 필요한 명령만 실행하는 것으로 해결 했다.
libde265는 빌드 하고 나서 별도로 pkgconfig에서 이용해야 하는 pc 파일을 수동으로 만들어줘야 했다. 그런데 libde265.pc.in이라고 예제처럼 있는 파일에는 라이브러리 이름이 de265라고 되어 있어 그걸 그대로 이용 했더니 그 뒤 빌드에서 이 라이브러리를 제대로 못찾는 상황이 벌어졌다. libde265라고 써야 제대로 인식한다. 젠장... 예제를 적으려면 좀 제대로 적던가 C 개발자들도 소스 개판으로 관리하기는 마찬가지다.
마지막에 convert -version 명령을 실행 했을 때 정보가 나오는데 마지막 줄이 아래와 같이 나오면 성공이다.
처음에는 ImageMagick에 대해 전혀 몰라 빌드 했을 때 Delegates 목록이 아무것도 나오지 않아 변환이 되지 않았었다.
변환하고자 하는 이미지 파일을 늘리려면 해당 포맷 라이브러리를 미리 설치하면 된다.
하지만 자바도 몇몇 포맷 빼고는 ImageIO와 연결하는 플러그인인 TwelveMonkey로 해결 가능하니 이쪽을 이용하면 된다.
Delegates (built-in): heic jng jpeg png tiff webp zlib
도커에서는 보통 이렇게 설치하고 난 후 설치했던 도구들을 uninstall 해서 이미지 크기를 줄이는데 ImageMagick은 너무 과정도 복잡해서 어떤 툴을 uninstall 가능한지 알 수가 없었다. 물론 하나씩 지워서 실행하는 방식으로 알 수는 있겠으나 그냥 그대로 쓰기로 했다.
아래는 설치 과정을 쭉 적었다. 이만.
# 도커 진입 후
cd ~
export PATH=$PATH:/usr/local/bin
#libtool install
cd ~
yum -y install tar gzip autoconf gcc-c++ make
curl -O -L https://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar xzf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure
make
make install
#nasm install
cd ~
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.gz
tar xzf nasm-2.15.05.tar.gz
cd nasm-2.15.05
./autogen.sh
./configure
make
make install
#yasm install
cd ~
curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install
#x264 install
cd ~
curl -O -L https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.gz
tar xzf x264-master.tar.gz
cd x264-master
./configure --enable-static
make
make install
# cmake install
cd ~
curl -O -L https://github.com/Kitware/CMake/releases/download/v3.19.1/cmake-3.19.1-Linux-x86_64.tar.gz
tar xzf cmake-3.19.1-Linux-x86_64.tar.gz
mv cmake-3.19.1-Linux-x86_64 cmake
mv cmake /opt
ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
#x265 install
cd ~
yum -y install unzip
curl -L https://github.com/videolan/x265/archive/master.zip -o x265-master.zip
unzip x265-master.zip
cd x265-master
cd build/linux
cmake -G "Unix Makefiles" ../../source
make
make install
#libde265 install
cd ~
curl -O -L https://github.com/strukturag/libde265/releases/download/v1.0.8/libde265-1.0.8.tar.gz
tar xzf libde265-1.0.8.tar.gz
cd libde265-1.0.8
mkdir build
cd build
cmake ..
make
make install
cd ..
#libde265 pkgconfig 파일 만들어 넣기
vi /usr/local/lib/pkgconfig/libde265.pc
--파일내용. 이 줄은 제외--
prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib64
includedir=${prefix}/include
Name: libde265
Description: H.265/HEVC video decoder.
URL: https://github.com/strukturag/libde265
Version: 1.0.8
Requires:
Libs: -llibde265 -L${libdir}
Libs.private: ${LIBS} -lstdc++
Cflags: -I${includedir}
--파일내용. 이 줄은 제외--
#libheif install
cd ~
yum -y install automake libpng libpng-devel libjpeg-turbo libjpeg-turbo-devel openjpeg openjpeg-devel turbojpeg turbojpeg-devel libtiff libtiff-devel libwebp libwebp-devel
curl -O -L https://github.com/strukturag/libheif/releases/download/v1.9.1/libheif-1.9.1.tar.gz
tar xzf libheif-1.9.1.tar.gz
cd libheif-1.9.1
./autogen.sh
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure
make
make install
#ImageMagic install
cd ~
curl -L https://github.com/ImageMagick/ImageMagick/archive/master.zip -o ImageMagick-master.zip
unzip ImageMagick-master.zip
cd ImageMagick-master
./configure
make
make install
# last test
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
convert -version
Version: ImageMagick 7.0.10-46 Q16 x86_64 2020-12-01 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): heic jng jpeg png tiff webp zlib