menu-icon

CentOSでPHPのImagickを使って画像処理のお試し

CentOSでPHPのImagickを試す機会がありましたので、構築手順をメモしておきます。

環境

  • CentOS 7.8
  • PHP 7.3
  • ImageMagick 7.0.10

手順

EPELリポジトリの追加

# yum install -y epel-release

ImageMagickのインストール

yum install ImageMagick だと古いバージョンがインストールされます。新しいバージョンを使用するため、rpmを使用してインストールします。配布先はコチラで確認できます。

# yum install -y  https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.10-14.x86_64.rpm
# yum install -y https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.10-14.x86_64.rpm
# yum install -y https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-devel-7.0.10-14.x86_64.rpm

インストールできたら、バージョンを確認しておきます。

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

remiリポジトリの追加

# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHPのインストール

# yum install -y --enablerepo=remi,remi-php73 php php-devel php-pear

本体がインストールできたら、PECLでimagick拡張をインストールします。が、その前に念のためバージョン確認しておきます。

$ php -v
PHP 7.3.18 (cli) (built: May 12 2020 08:04:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.18, Copyright (c) 1998-2018 Zend Technologies
# pecl version
PEAR Version: 1.10.12
PHP Version: 7.3.18
Zend Engine Version: 3.3.18
Running on: Linux tdomy-test.mshome.net 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64

PHPとPECLのバージョンが7.3.18で一致しているので問題ありません。拡張をインストールしていきます。

# pecl install imagick
# echo extension=imagick.so > /etc/php.d/20-imagick.ini

php -m でモジュールを確認して、imagickがあればOKです!

サンプルスクリプト

試しに画像のExif情報を削除するスクリプトを用意しました。

<?php

$path = './cmyk.jpg';
$outpath = './output.jpg';
$img = new \Imagick($path);
$profiles = $img->getImageProfiles("*", true); // 全プロパティ取得
print_r(array_keys($profiles));

$img->stripImage();
$img->profileImage("icc", $profiles['icc']); // iccは残す
$img->writeImage($outpath);

$outimg = new \Imagick($outpath);
print_r(array_keys($outimg->getImageProfiles("*", true)));

実行結果

Array
(
    [0] => exif
    [1] => icc
)
Array
(
    [0] => icc
)

元画像と処理後を比較するとExifが消えているのがわかると思います。

元画像
処理後