Linux

Ubuntuに最新版のImageMagickをインストールしてHEIC形式に対応させる手順

はじめに

Ubuntu18.04でHEIC形式の画像を一括して処理したい状況になり、libheifというライブラリを試してみものの、まだ一括処理には対応していませんでした。そこで調べたところ、ImageMagickの最新版ならばlibheifを使ってHEIC形式に対応させることができることがわかりました。この記事では、最新版のImageMagickをUbuntu18.04にインストールし、さらにHEIC形式の変換もできるようにするための手順をまとめます。

できるようになること

最新版のImageMagick(2019年4月28日時点でver 7.0.8-42)をUbuntu18.04にインストールし、さらにHEIC形式の画像ファイルにも対応させます。HEIC形式の画像ファイルに対応できると、例えば以下のようにImageMagickのコマンドであるconvertを使ってHEIC形式をJPG形式に変換できます。複数ファイルに対する一括処理も可能です。

$ convert test.heic test.jpg

前提と環境

以降の手順はUbuntu18.04で行ったものなります。なお、Vagrant上のUbuntu18.04でも同様の手順で可能です。
事前準備が重要になります。最新版のImageMagickをソースからインストールします。

事前準備

インストール済のImageMagickを確認する

すでにインストール済のImageMagickがあるかどうかを以下のコマンドで確認します。以下のように6.9.7.4がインストール済であることを確認できます。Ubuntu18.04では、apt経由でインストールできるImageMagickのバージョンが6.9.7.4です。

$ identify -version
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib

identifyはImageMagickに含まれるコマンドの1つで画像ファイルの情報を取得、表示するためのコマンドです。ImageMagickに含まれるコマンドであれば、identifyでなくても例えば画像の変換や編集などで使用するconvertmogrifyでも全く同じようにバージョンを確認できます。

$ convert -version
$ mogrify -version

当然ながら上記と全く同じ結果を返します。

Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib

インストール済のImageMagickを削除する

すでにインストール済のImageMagickがあれば、まずはインストール済のImageMagickを削除しておきます。

$ sudo apt remove imagemagick

関連するパッケージをインストールする

以降の作業で必要となるパッケージをいくつか事前にインストールしておきます。

$ sudo apt update
$ sudo apt install build-essential checkinstall

build-essentailcheckinstallの両方共にImageMagickを最新版のソースからコンパイルしてインストールするために必要なパッケージです。

続いて最新版のImageMagickをソースからインストールするための準備として、ImageMagickに関連するパッケージをbuild-depでインストールしておきます。

$ sudo apt build-dep imagemagick
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  avahi-daemon geoclue-2.0 gstreamer1.0-plugins-base iio-sensor-proxy libavahi-core7 libavahi-glib1 libbrotli1 libcdparanoia0
  libdaemon0 libdouble-conversion1 libegl-mesa0 libegl1 libevdev2 libgbm1 libgeoclue-2-0 libgl1-mesa-glx
  libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libgudev-1.0-0 libhyphen0 libinput-bin libinput10 libmbim-glib4 libmbim-proxy
  libmm-glib0 libmtdev1 libnss-mdns libogg0 libopus0 liborc-0.4-0 libqmi-glib5 libqmi-proxy libqt5core5a libqt5dbus5 libqt5gui5
  libqt5network5 libqt5positioning5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5sensors5 libqt5svg5 libqt5webchannel5
  libqt5webkit5 libqt5widgets5 libtheora0 libvisual-0.4-0 libvorbis0a libvorbisenc2 libwacom-bin libwacom-common libwacom2
  libwayland-server0 libwoff1 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0
  libxcb-util1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 modemmanager qt5-gtk-platformtheme
  qttranslations5-l10n usb-modeswitch usb-modeswitch-data
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  autoconf automake autopoint autotools-dev chrpath cm-super-minimal debhelper dh-autoreconf dh-exec dh-strip-nondeterminism
  diffstat doxygen doxygen-latex fonts-lmodern gettext ghostscript gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-harfbuzz-0.0
  gir1.2-pango-1.0 gir1.2-rsvg-2.0 graphviz gsfonts icu-devtools intltool-debian libann0 libapt-pkg-perl libarchive-zip-perl
  libbz2-dev libcairo-script-interpreter2 libcairo2-dev libcdt5 libcgraph6 libclang1-6.0 libclass-accessor-perl libclone-perl
  libcupsimage2 libdigest-hmac-perl libdjvulibre-dev libdjvulibre-text libdjvulibre21 libemail-valid-perl libexif-dev libexif12
  libexpat1-dev libexporter-tiny-perl libfftw3-bin libfftw3-dev libfftw3-double3 libfftw3-long3 libfftw3-quad3 libfftw3-single3
  libfile-basedir-perl libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgd3 libgdk-pixbuf2.0-dev
  libglib2.0-bin libglib2.0-dev libglib2.0-dev-bin libgraphite2-dev libgs9 libgs9-common libgts-0.7-5 libgvc6 libgvpr2
  libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz-icu0 libice-dev libicu-dev libicu-le-hb-dev libicu-le-hb0 libiculx60
  libijs-0.35 libilmbase-dev libilmbase12 libio-pty-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-string-perl
  libipc-run-perl libipc-system-simple-perl libjbig-dev libjbig2dec0 libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libkpathsea6
  liblab-gamut1 liblcms2-dev liblist-moreutils-perl libllvm6.0 liblqr-1-0 liblqr-1-0-dev libltdl-dev libltdl7 liblzma-dev
  libmailtools-perl libmime-charset-perl libnet-dns-perl libnet-domain-tld-perl libnet-ip-perl libnet-smtp-ssl-perl
  libnet-ssleay-perl libnspr4 libnss3 libopenexr-dev libopenexr22 libpango1.0-dev libpangoxft-1.0-0 libpaper-utils libpaper1
  libparse-debianchangelog-perl libpathplan4 libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libperl-dev libpixman-1-dev
  libpng-dev libpoppler73 libpotrace0 libptexenc1 libpthread-stubs0-dev libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  librsvg2-bin librsvg2-dev libsm-dev libsocket6-perl libsombok3 libsub-name-perl libsynctex1 libtexlua52 libtexluajit2
  libtext-levenshtein-perl libtiff-dev libtiff5-dev libtiffxx5 libtool libtool-bin libunicode-linebreak-perl libwmf-dev
  libwmf0.2-7 libx11-dev libxapian30 libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev
  libxft2 libxml-libxml-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-perl libxml-simple-perl libxml2-dev
  libxml2-utils libxrender-dev libxt-dev libyaml-libyaml-perl libzzip-0-13 lintian m4 patchutils perl-openssl-defaults pkg-config
  pkg-kde-tools po-debconf poppler-data preview-latex-style python python-minimal python2.7 python2.7-minimal python3-distutils
  python3-lib2to3 t1utils tex-common texlive-base texlive-binaries texlive-extra-utils texlive-font-utils
  texlive-fonts-recommended texlive-latex-base texlive-latex-extra texlive-latex-recommended texlive-pictures x11proto-core-dev
  x11proto-dev x11proto-xext-dev xdg-utils xorg-sgml-doctools xsltproc xtrans-dev
0 upgraded, 202 newly installed, 0 to remove and 33 not upgraded.
Need to get 192 MB of archives.
After this operation, 643 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

build-depではImageMagickそのものがインストールされるのではなく、ImageMagickに依存する関連パッケージをインストールします。
ImageMagick本体はこの後ソースからインストールします。なお、ここでbuild-depによって関連するパッケージをインストールしておかなくとも以降の手順で最新のImageMagickをインストールすることは可能ですが、その場合は動作が制限されます。詳しくは後述します。

build-depでエラーが出る場合

build-depを実行して以下のようなメッセージが表示される場合があります。

$ sudo apt build-dep imagemagick
Reading package lists... Done
E: You must put some 'source' URIs in your sources.list

この場合は、/etc/apt/sources.listの中にあるdev-srcという行がコメントアウトされていることが原因です。したがって、このdeb-srcの行を全てアンコメントすれば解決できます。
例えば、viエディタで修正してもいいですし、その他のエディタで編集しても大丈夫です。

$ sudo vi /etc/apt/sources.list

詳しくは以下のサイト様に原因と手順が書かれており大変助かりました。

apt build-dep がエラーになるときの対処方法 – Qiita

新しく立てた仮想マシンなどで `apt build-dep` を実行すると以下のようなエラーになることがあります。 …

/etc/apt/sources.listの中にあるdev-srcという行を全てコメントから外したら、updateした上で再度buid-depを実行します。

$ sudo apt update
$ sudo apt build-dep imagemagick

HEIC形式に対応するためのパッケージをインストールする

メモ

もしHEIC形式に対応する必要がない場合はこの節は飛ばし、次の「最新版のImageMagickをソースからインストールする」に進んでください。

HEIC形式に対応させたい場合は、上記のbuild-depでインストールしたパッケージに追加していくつかのパッケージをインストールしておきます。

$ sudo apt install libwebp-dev libopenjp2-7-dev librsvg2-dev libde265-dev

上記のパッケージ全てがHEIC形式に対応のためだけのものではなく、他のファイル形式に対応させるためのものも含まれています。さらに、ImageMagickの最新版をHEIC形式に対応させるためには、libheifをソースからインストールしておく必要があります。

libheifをソースからインストールする

libheifはapt経由でもインストール可能ですが、apt経由でインストールしてしまうと、最新版のImageMagickをインストールする際にエラーが出ます。したがって、libheifのソースを公式リポジトリからダウンロードしてインストールしておきます。ソースからインストールすると言ってもいくつかのコマンドを実行すれば完了します。
libheifの公式リポジトリは以下です。

strukturag/libheif – GitHub

libheif is a ISO/IEC 23008-12:2017 HEIF file format decoder and encoder.

具体的な手順としては、公式リポジトリに記載がある通り以下のコマンドを順番に実行します。
libheifのソースのダウンロード先はどこでも大丈夫ですが、以下ではホームディレクトリとしています。

~/$ git clone https://github.com/strukturag/libheif.git
$ cd libheif
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

上記のautogen.shはインストールに必要なファイルを作成のために実行します。
これで最新版のImageMagickをインストールするための全ての準備は完了です。

最新版のImageMagickをソースからインストールする

最新版のImageMagickをインストールするには、最新版のソースをダウンロードしてインストールする必要があります。ソースからのインストールとなると少々ハードルが高く感じますが、基本的には公式サイトにある通りのコマンドを実行すれば問題なく可能です。

ImageMagick

Convert, Edit, or Compose Bitmap Images

ここでは、ホームディレクトリにImageMagickのソースをダウンロードしています。

~/$ wget https://imagemagick.org/download/ImageMagick.tar.gz
--2019-04-28 03:38:18--  https://imagemagick.org/download/ImageMagick.tar.gz
Resolving imagemagick.org (imagemagick.org)... 198.72.81.86
Connecting to imagemagick.org (imagemagick.org)|198.72.81.86|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13712984 (13M) [application/x-gzip]
Saving to: ‘ImageMagick.tar.gz’

ImageMagick.tar.gz               100%[==========================================================>]  13.08M   225KB/s    in 47s

2019-04-28 03:39:06 (282 KB/s) - ‘ImageMagick.tar.gz’ saved [13712984/13712984]

ダウンロードが完了したら、tarコマンドで解凍し、展開されたディレクトリに移動します。

~/$ tar xvzf ImageMagick.tar.gz
$ cd ImageMagick-7.0.8-42/

./configureを実行します。

~/ImageMagick-7.0.8-42/$ ./configure

./configureが完了するまでに少々時間がかかりますが、最終的に以下のように表示されます。

~/ImageMagick-7.0.8-42/(...上省略...)

==============================================================================
ImageMagick is configured as follows. Please verify that this configuration
matches your expectations.

  Host system type: x86_64-pc-linux-gnu
  Build system type: x86_64-pc-linux-gnu

                 Option                        Value
  ------------------------------------------------------------------------------
  Shared libraries  --enable-shared=yes         yes
  Static libraries  --enable-static=yes         yes
  Build utilities   --with-utilities=yes        yes
  Module support    --with-modules=no           no
  GNU ld            --with-gnu-ld=yes           yes
  Quantum depth     --with-quantum-depth=16     16
  High Dynamic Range Imagery
                    --enable-hdri=yes           yes

  Install documentation:                        yes

  Delegate Library Configuration:
  BZLIB             --with-bzlib=yes            yes
  Autotrace         --with-autotrace=no         no
  DJVU              --with-djvu=yes             yes
  DPS               --with-dps=yes              no
  FFTW              --with-fftw=yes             yes
  FLIF              --with-flif=yes             no
  FlashPIX          --with-fpx=yes              no
  FontConfig        --with-fontconfig=yes       yes
  FreeType          --with-freetype=yes         yes
  Ghostscript lib   --with-gslib=no             no
  Graphviz          --with-gvc=yes              no
  HEIC              --with-heic=yes             yes
  JBIG              --with-jbig=yes             yes
  JPEG v1           --with-jpeg=yes             yes
  LCMS              --with-lcms=yes             yes
  LQR               --with-lqr=yes              yes
  LTDL              --with-ltdl=yes             no
  LZMA              --with-lzma=yes             yes
  Magick++          --with-magick-plus-plus=yes yes
  OpenEXR           --with-openexr=yes          yes
  OpenJP2           --with-openjp2=yes          yes
  PANGO             --with-pango=yes            yes
  PERL              --with-perl=no              no
  PNG               --with-png=yes              yes
  RAQM              --with-raqm=yes             no
  RAW               --with-raw=yes              no
  RSVG              --with-rsvg=no              no
  TIFF              --with-tiff=yes             yes
  WEBP              --with-webp=yes             yes
  WMF               --with-wmf=yes              yes
  X11               --with-x=                   yes
  XML               --with-xml=yes              yes
  ZLIB              --with-zlib=yes             yes
  ZSTD              --with-zstd=yes             no

  Delegate Program Configuration:
  GhostPCL          None                                pcl6 (unknown)
  GhostXPS          None                                gxps (unknown)
  Ghostscript       None                                gs (9.26)

  Font Configuration:
  Apple fonts       --with-apple-font-dir=default
  Dejavu fonts      --with-dejavu-font-dir=default      none
  Ghostscript fonts --with-gs-font-dir=default  /usr/share/fonts/type1/gsfonts/
  URW-base35 fonts  --with-urw-base35-font-dir=default  none
  Windows fonts     --with-windows-font-dir=default     none

  X11 Configuration:
        X_CFLAGS        =
        X_PRE_LIBS      =  -lSM -lICE
        X_LIBS          =
        X_EXTRA_LIBS    =

  Options used to compile and link:
    PREFIX          = /usr/local
    EXEC-PREFIX     = /usr/local
    VERSION         = 7.0.8
    CC              = gcc
    CFLAGS          = -I/usr/include/libxml2   -I/usr/include/libpng16  -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/OpenEXR  -I/usr/include/lqr-1 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/openjpeg-2.3   -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -pthread -fopenmp -g -O2 -Wall -mtune=core2 -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
    CPPFLAGS        =   -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
    PCFLAGS         =
    DEFS            = -DHAVE_CONFIG_H
    LDFLAGS         =
    LIBS            =  -ljbig -llcms2 -ltiff -lfreetype  -ljpeg  -llqr-1 -lglib-2.0 -lpng16 -lz  -ldjvulibre -lfftw3   -lfontconfig-lfreetype -lheif -lwebpmux -lwebp -lwebp -lwmflite  -lXext -lXt   -lSM -lICE -lX11  -llzma -lbz2 -lIlmImf -lImath -lHalf -lIex -lIexMath -lIlmThread -lpthread -lopenjp2 -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lcairo   -lxml2  -lz     -lm
    CXX             = g++
    CXXFLAGS        = -g -O2 -pthread
    FEATURES        = DPC HDRI Cipher OpenMP
    DELEGATES       = bzlib djvu mpeg fftw fontconfig freetype heic jbig jng jpeg lcms lqr lzma openexr openjp2 pango png ps tiff webp wmf x xml zlib
==============================================================================

上記でDelegate Library Configuration:という項目があり、その下にImageMagickが対応できるファイル形式等についてリストされています。ここで自身の目的とするファイル形式等がyesになっていることを確認してください。この段階でnoになっているものについてはこの後の手順を進めても、ImageMagickでは扱えません。
例えば、上記ではHEIC --with-heic=yes yesという部分がありますが、これはHEIC形式に対応するという意味になります。もしこの部分がnoになっていると、ImageMagickはHEIC形式に対応しません。

ここのyesnoを決めるのは、冒頭で説明したbuild-depによってImageMagickが使用するパッケージが事前にインストールされているかどうかになります。もしbuild-depを実行せずに./configureを実行すると、その結果はほとんどnoになると思います。
また、libheifを事前にインストールしていなければ、HEIC形式にも対応せずに該当部分はnoになります。

./configureの結果が問題なければ、続いてmakeします。

~/ImageMagick-7.0.8-42/$ make
(...上省略...)
cp -f MagickCore/ImageMagick.pc MagickCore/ImageMagick-7.Q16HDRI.pc
cp -f MagickCore/MagickCore.pc MagickCore/MagickCore-7.Q16HDRI.pc
cp -f MagickWand/MagickWand.pc MagickWand/MagickWand-7.Q16HDRI.pc
cp -f Magick++/lib/Magick++.pc Magick++/lib/Magick++-7.Q16HDRI.pc
make[1]: Leaving directory '/home/vagrant/ImageMagick-7.0.8-42'

上記のように表示されると思います。次に管理者権限でcheckinstallを実行します。
checkinstallが成功すると、最終的に以下のようにInstallation successfulもしくは日本語でインストールに成功しました。というメッセージが表示されます。

~/ImageMagick-7.0.8-42/$ sudo checkintsall
(..上省略...)

======================== Installation successful ==========================

Copying documentation directory...
./
./LICENSE
./README.txt
./ChangeLog

Some of the files created by the installation are inside the home directory: /home

You probably don't want them to be included in the package.
Do you want me to list them?  [n]: n
Should I exclude them from the package? (Saying yes is a good idea)  [n]: y

Copying files to the temporary directory...OK

Stripping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Writing backup package...OK
OK

Deleting temp dir...OK


**********************************************************************

 Done. The new package has been installed and saved to

 /home/vagrant/ImageMagick-7.0.8-42/imagemagick-7.0.8_42-1_amd64.deb

 You can remove it from your system anytime using:

      dpkg -r imagemagick-7.0.8

**********************************************************************

checkinstallを使うことで、sudo apt remove imagemagick-7.0.8でアンインストールが可能です。

checkinstallについては、以下のサイト様が詳しく、大変参考になりました。ありがとうございます。

最後に、管理者権限でリンクを更新します。

~/ImageMagick-7.0.8-42/$ sudo ldconfig

上記を実行しても何も表示されませんが、以下のようにconvertコマンドのバージョンを確認して表示されれば無事に最新版のImageMagickがインストールできています。
以下は使い方も表示するため色々な情報が一気に表示されます。

~/ImageMagick-7.0.8-42/$ convert -v
Version: ImageMagick 7.0.8-42 Q16 x86_64 2019-04-28 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr lzma openexr pangocairo png tiff webp wmfx xml zlib
Usage: convert [options ...] file [ [options ...] file ...] [options ...] file
(...以下省略...

上記で重要な点は、Delegates (built-in)の部分です。ここにインストールしたImageMagickが対応できるファイル形式等が記載されています。この部分は./configureで確認したDelegate Library Configuration:と同じです。

動作確認としてHEIC形式を変換する

以下のようにImageMagickのconvertコマンドを使ってHEIC形式のファイルを変換できます。

~/mypicutre/$ convert test.heic test.jpg

また、以下のようにmogrifyも使用できるので、複数ファイルに対して一括処理も可能です。
以下ではHEIC形式を一括してJPG形式に変換します。

~/mypicutre/$ mogrify -format jpg *.heic

参考文献

この記事作成にあたって、手順の流れについて以下のサイト様が大変参考になりました。ありがとうございます。

How to install the latest version of ImageMagick?

I am trying to install the latest version of ImageMagick. I’m using Ubuntu 14.04. After I apt-get update, the version of ImageMagick it lists is …

How to install delegate libraries for Image Magick 7.0.7

I built Image Magick 7.0.7 from source on my Ubuntu 18.04 system.* Typing magick identify -version into the terminal now returns

Version: ImageMagick 7.0.7-37 Q16 x86_64 2018-05-31 https://www.

まとめ

HEIC形式を使うために最新版のImageMagickをインストールしました。手順自体は少々多くなりますが、順番に実行すれば問題なく進められると思います。

SPONSORED LINK

コメントを残す

メールアドレスが公開されることはありません。