LaravelにImageMagick(最新版)をインストールして使用する



## 動作環境
- CentOS7
- PHP 7.2.6
- Laravel 5.5

## 注意点

installするパッケージのURLが頻繁に変わる可能性があるため、以下を参照しながらインストールしてください

- [imageMagick](https://www.imagemagick.org/script/download.php)
- [openjpeg2](https://pkgs.org/download/openjpeg2)

## 1. imageMagickのインストール

まず、CentOS7本体にImageMagickをインストールします。

1. imageMagickの依存関係であるパッケージをインストール

    ```
    # openjpeg2 
    # imageMagick-develインストールのために必要
    $ yum install https://rpmfind.net/linux/mageia/distrib/cauldron/x86_64/media/core/release/lib64openjp2_7-2.3.0-2.mga7.x86_64.rpm
    $ yum install http://springdale.math.ias.edu/data/puias/computational/7/x86_64/openjpeg2-devel-2.1.0-7.sdl7.x86_64.rpm
    $ yum install fftw3
    $ yum install libXt
    $ yum install libtool-ltdl
    ```

2. imageMagickのインストール

    ```
    # imageMagick-libs
    $ yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.8-12.x86_64.rpm

    # imageMagick
    $ yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.8-12.x86_64.rpm
   
    # imageMagick-devel
    $ yum install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-devel-7.0.8-12.x86_64.rpm
    ```

3. 以下のコマンドを叩いて、バージョンが確認できればOK

    ```
    $ convert -version
    Version: ImageMagick 7.0.8-12 Q16 x86_64 2018-09-23 https://imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in): bzlib cairo djvu fftw fontconfig fpx freetype gslib jbig jng jp2 jpeg lcms ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlib
    ```


## 2. Peclをインストールする
PHPにimageMagickをインストールするために必要です

1. peclのインストール

    ```
    # peclのインストール
    $ wget http://pear.php.net/go-pear.phar
    ```

2. phpで実行するための設定を行う

    以下のコマンドを実行した際に設定の確認があるが、Enterを押せばOK

    ```
    $ php go-pear.phar
    ```

## 3. PHPにImageMagickを適応させる

1. 以下のコマンドを実行し、適応させる

    ```
    $ pecl install imagick
    ```

2. php.iniを編集


    ```
    # このコマンドでphp.iniの場所が確認できます
    $ php -i | grep "Loaded Configuration File"
    ```

    ```
    # Dynamic Extensionsの項目より下に以下のコードを記述
    extension=imagick.so
    ```

3. apacheサーバの再起動

    ```
    $ service httpd restart
    ```

4. php-fpmの再起動

    ```
    $ service php-fpm restart
    ```
5. phpにインストールされているかを確認する

    ```
    $ php -i | grep Imagick
    imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick compiled with ImageMagick version => ImageMagick 7.0.8-12 Q16 x86_64 2018-09-23 https://imagemagick.org
Imagick using ImageMagick library version => ImageMagick 7.0.8-12 Q16 x86_64 2018-09-23 https://imagemagick.org
    ```

    ```
    $ php -i | grep -Ei '^(gd|imagic|gmagic|imagemagick)' | grep enabled
    GD Support => enabled
    imagick module => enabled
    ```

## intervention/imageのインストール

- intervention/imageとは?

    phpで画像加工ができるライブラリで、ImageMagickまたはGDライブラリを選択して画像加工ができます。

1. composerでインストール

    ```
    $ composer require intervention/image
    ```

2. laravelのapp/config/app.phpに以下を記述

    ```php
    'providers' => [
        .
        .
        .
        /*
         * Package Service Providers...
         */
        # 以下のコードを記述
        Intervention\Image\ImageServiceProvider::class,
    ]

    'aliases' => [
        .
        .
        .
        'Image' => Intervention\Image\Facades\Image::class
    ]
    ```
3. Intervention/imageのデフォルトを変更する

    Intervention/imageで使用するライブラリのデフォルトがGDなので、変更する

    ```
    # 設定ファイルを生成する
    php artisan vendor:publish
    ```

    `config/image.php`に以下の記述を行い、設定する
    
    ```
    'driver' => 'imagick'
    ```
    
3. intervention/imageの動作確認

    ```php
    <?php
    .
    .
    .
    use Intervention\Image\Facades\Image;
    .
    .
    .
    public function convertImage() 
    {
        $image = Image::make('image.png')->encode('jpg');
        $path = public_path() . '.jpg';
        $image->save($path);
    }
    ```

以上です。 お疲れ様でした。
# 参考

- [CentOS7.4.x に ImageMagick6.9.x に入れるときにいろいろめんどくさかったのでメモ](http://hackerhouse.hatenablog.com/entry/2018/03/16/184317)
- [php+nginxでphp.iniを変更したらphp-fpmも再起動しよう](https://blog.e2info.co.jp/2016/11/02/lets-php-fpm-restart/)
- [Laravelで画像処理（アップロード／リサイズ／サムネイル）を行なう方法](https://manablog.org/laravel-image-manipulation/)