概要
あるPHPシステムでImageMagickを入れる必要が出てしまったため、どのような手順で入れたかの忘備録です。
以下のシステムを想定しています
- Ubuntu 20.04.4 LTS
まず現在の状況を確認
phpinfo()を見たらすでにimagickが入っていたので、一応バージョンを確認したところImageMagick-6とのこと。
しかしapt系を使って未対応の画像を1件1件確認して潰していくのは大変すぎるので、./configureを利用して簡単に現在の対応・未対応形式を確認することのできるソースコードビルドを利用します。
ソースコードビルドの場合aptに公開されているバージョンには縛られないため、最新のImageMagick7を入れることにします。
①ImageMagick6のアンインストール
$ sudo apt remove imagemagick
「いろいろライブラリが残っているからそっちも消して」って感じの文字が出ますが今回はパス。
気になるかたは調べてそっちも行ってください。
②ImageMagick7の準備
公式サイトのインストール方法に則ってファイルをダウンロードしてしまいましょう。
$ cd ~
$ git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.0
$ cd ImageMagick-7.1.0
$ sudo ./configure
この時点でconfigureで出たシェルの中に、現在対応しているファイルの一覧が載っています。
Delegate Library Configuration:
BZLIB --with-bzlib=yes yes
Autotrace --with-autotrace=no no
DJVU --with-djvu=yes no
DPS --with-dps=yes no
FFTW --with-fftw=yes no
FLIF --with-flif=yes no
FlashPIX --with-fpx=yes no
FontConfig --with-fontconfig=yes no
FreeType --with-freetype=yes yes
Ghostscript lib --with-gslib=no no
Graphviz --with-gvc=yes no
HEIC --with-heic=yes no
JBIG --with-jbig=yes no
JPEG v1 --with-jpeg=yes yes
LCMS --with-lcms=yes yes
LQR --with-lqr=yes no
LTDL --with-ltdl=yes no
LZMA --with-lzma=yes yes
Magick++ --with-magick-plus-plus=yes yes
OpenEXR --with-openexr=yes no
OpenJP2 --with-openjp2=yes no
PANGO --with-pango=yes no
PERL --with-perl=no no
PNG --with-png=yes no
RAQM --with-raqm=yes no
RAW --with-raw=yes no
RSVG --with-rsvg=no no
TIFF --with-tiff=yes yes
WEBP --with-webp=yes no
WMF --with-wmf=yes no
X11 --with-x= yes
XML --with-xml=yes yes
ZLIB --with-zlib=yes yes
--with-xxx=
の部分はそれがImageMagick内で許可されているかどうかを示す部分で、スペースの後に
HEICの行に注目してください。
ここでHEICが--with-heic=yes yes
になっていればそのまま以下の手順をスキップして④に進んでしまって大丈夫です。
③HEICを有効にする
HEIC/HEIFを入れる時、gitを利用してこちらも最新をインストールしても良いのですが、調べたらapt
でインストールするためのリポジトリが整備されていたのでそれを利用することにします。
$ sudo add-apt-repository ppa:strukturag/libheif
$ sudo apt install libheif-dev=1.6.1-1
$ sudo apt install libheif1=1.6.1-1
現時点(2022/04/06)で最新の1.12.0はheifのメタタグが正しく読み込めないエラーが出るバグが出ているため、一つ前のapt installできるバージョンを利用しています。
④ImageMagick7をインストールする
HEIC/HEIFを扱えるライブラリを入れたところで、もう一度ImageMagickのconfigureを確認します。
~~
Graphviz --with-gvc=yes no
HEIC --with-heic=yes yes
JBIG --with-jbig=yes no
~~
きちんと認識されているのを確認してからインストールを行いましょう。
$ sudo make
$ sudo make install
以下が動くことを確認し、問題がないようならば次へいきましょう
$ sudo convert -version
Version: ImageMagick 7.1.0-29 Q16-HDRI x86_64 966a769a6:20220323 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jpeg lcms lqr ltdl lzma openexr png tiff wmf x xml zlib
Compiler: gcc (9.4)
またセキュリティについて考慮するならばこの時点でpolicy.xmlを弄っておきましょう。
そのあたりはもっと詳しい人が居るのでググってください。
⑤Imagickをインストールする
まずデフォルトでImagickが入ってしまっていないかphpinfoを確認します。
存在した場合はライブラリを確認して削除を行いましょう。
筆者の手元のはPHP8.0が入っていたので以下のように削除しました。
$ sudo apt remove php8.0-imagick
現在、aptで取得できるimagickはImageMagick6系にしか対応していません。
しかし最新版は7系に対応しているため、gitから直接ソースコードを取得して入れてしまいます。
$ git clone https://github.com/Imagick/imagick
$ cd imagick
$ sudo phpize && sudo ./configure
$ sudo make
$ sudo make install
またphp.iniファイルの拡張機能にimagick.soを登録したら完了です。
extension=imagick.so
apacheを再起動して、phpinfo()の中にimagickの項目があり、ImageMagick7と連携されていることを確認してください。
$ sudo service apache2 restart
以上です。がんばってください。
参考サイト