[ImageMagick7][Imagick]PHPのシステムにImagickを入れてHeicファイルをエンコードできるようになるまで

# 概要
あるPHPシステムでImageMagickを入れる必要が出てしまったため、どのような手順で入れたかの忘備録です。

以下のシステムを想定しています

* Ubuntu 20.04.4 LTS

# まず現在の状況を確認

phpinfo()を見たらすでにimagickが入っていたので、一応バージョンを確認したところImageMagick-6とのこと。
しかしapt系を使って未対応の画像を1件1件確認して潰していくのは大変すぎるので、./configureを利用して簡単に現在の対応・未対応形式を確認することのできるソースコードビルドを利用します。
ソースコードビルドの場合aptに公開されているバージョンには縛られないため、最新のImageMagick7を入れることにします。

# ①ImageMagick6のアンインストール

```shell
$ sudo apt remove imagemagick
```

「いろいろライブラリが残っているからそっちも消して」って感じの文字が出ますが今回はパス。
気になるかたは調べてそっちも行ってください。

# ②ImageMagick7の準備

公式サイトのインストール方法に則ってファイルをダウンロードしてしまいましょう。

```shell
$ cd ~
$ git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.0
$ cd ImageMagick-7.1.0
$ sudo ./configure
```

この時点でconfigureで出たシェルの中に、現在対応しているファイルの一覧が載っています。

```shell
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`でインストールするためのリポジトリが整備されていたのでそれを利用することにします。

```shell
$ 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を確認します。

```shell
~~

 Graphviz          --with-gvc=yes		no
 HEIC              --with-heic=yes     yes
 JBIG              --with-jbig=yes		no

~~
```

きちんと認識されているのを確認してからインストールを行いましょう。

```shell
$ sudo make
$ sudo make install
```

以下が動くことを確認し、問題がないようならば次へいきましょう

```shell
$ 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が入っていたので以下のように削除しました。

```shell
$ sudo apt remove php8.0-imagick
```

現在、aptで取得できるimagickはImageMagick6系にしか対応していません。
しかし最新版は7系に対応しているため、gitから直接ソースコードを取得して入れてしまいます。

```shell
$ git clone https://github.com/Imagick/imagick
$ cd imagick
$ sudo phpize && sudo ./configure
$ sudo make
$ sudo make install
```

またphp.iniファイルの拡張機能にimagick.soを登録したら完了です。

```ini:php.ini
extension=imagick.so
```

apacheを再起動して、phpinfo()の中にimagickの項目があり、ImageMagick7と連携されていることを確認してください。

```shell
$ sudo service apache2 restart
```

以上です。がんばってください。

# 参考サイト


http://www.imagemagick.org/script/install-source.php

https://medium.com/praaveen/compiling-imagemagick-with-heic-support-17d39119e80

https://github.com/libjxl/libjxl