Edited at

Vagrant(CentOS7)環境にImageMagick導入して画像変換

More than 1 year has passed since last update.

業務でImageMagick使ってTIFF変換することあったので、ざっくり環境構築から使い方までメモ書き。

ImageMagickはTIFFに限らず色んなフォーマットをサポートしてるっぽいので結構重宝するかも。


仮想環境構築に必要なものインストール

vagrantとVirtualBox導入

https://www.virtualbox.org/wiki/Downloads

https://www.vagrantup.com/downloads.html


仮想環境構築(CentOS7)

Vagrant初期設定に関して既に多くの方がQiita上に投稿されているので簡単な手順のみ記述。

CentOSのboxを拾って初期化。

//box追加

vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

//初期化
vagrant init centos7

作成されたVagrantfileの中身で以下ソースのコメントアウトを外す。

config.vm.network "private_network", ip: "192.168.33.10"

vagrant起動してsshでログイン出来るか確認。

//vagrant起動

vagrant up

//ユーザ・パスワードはvagrant
//接続可能なのは設定ファイルのconfig.vm.networkで設定したIPアドレス


CentOS環境を最新化してapacheやPHP導入

これはやらなくても良いのでやりたい人だけやる。

yum update

ただしyum updateを行った場合、再度vagrant起動時にエラー表示される。どうやらyum updateでカーネルが更新されたことでVirtualBoxのGuest Additionsが動作しなくなり、vagrant up の途中で共有フォルダのマウントに失敗していた、というのがこのエラーの原因とか。以下リンク先に対応方法が記載されている。

http://blog.chopschips.net/blog/2014/09/08/vagrant-problem-with-yum-update/

//apacheインストール

yum install httpd

//普通にyum叩くと古いバージョン持ってくるのでリポジトリから取得
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

//古いバージョンが入っていたら一応消す
rpm -qa | grep php
yum remove php-*

//PHPインストール
yum install --enablerepo=remi,remi-php56 php php-common php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

今回はPHP5.6だが7入れたい人は7をインストールすべし。


ImageMagickライブラリインストール

画像変換に必要なライブラリについて

ライブラリ
内容

ImageMagick
C言語で記述された画像処理ライブラリ

ImageMagick-devel
C言語で記述された画像処理ライブラリ

imagick
PHPからImageMagickを呼び出すのに必要なライブラリ

コマンドで変換する場合はimagick不要。

以下実行すれば一応ImageMagickはインストール出来るが最新バージョンが欲しい場合はrpm実行

ダウンロード先 : https://www.imagemagick.org/script/binary-releases.php

//古いバージョンで良いならyum経由

yum -y install ImageMagick
yum -y install ImageMagick-devel

//新しいのが欲しいなら自分でも持ってきて実行
rpm -Uvh ImageMagick-libs-7.0.3-10.x86_64.rpm
rpm -Uvh ImageMagick-7.0.3-10.x86_64.rpm

PHPから呼び出したい場合にはimagickもインストール。

//imagickインストール

pecl install imagick

インストール後、/etc/php.ini中に「extension=imagick.so」追記して再起動後、Imagickが使えるか確認。

imagick1.png

自分の場合、TIFF画像をPDFやJPGにする必要があったのでconvertコマンド実行。

convert 変換対象ファイル.tiff 変換後ファイル.pdf

convert 変換対象ファイル.tiff 変換後ファイル.jpg

PHPでもImagickが使えるか確認。

<?php

//サンプル
$filename = '/var/www/html/test.jpg';
$image = new Imagick($filename);
$image->setImageFormat('gif');

header("Content-Type: image/gif");
echo $image;
$image->clear();

convertでTIFF変換する時、ファイルによってはTagがサポートされてない的なメッセージが結構表示される。一応変換して閲覧は出来るがエラー内容が消えず気味が悪い。

convert: Unknown field with tag 32931 (0x80a3) encountered. TIFFReadDirectory @ warning/tiff.c/TIFFWarnings/918.

convert: Unknown field with tag 32934 (0x80a6) encountered. TIFFReadDirectory @ warning/tiff.c/TIFFWarnings/918.
convert: 2015120824-0077.tif: Null count for "Tag 32934" (type 4, writecount -3, passcount 1). _TIFFVSetField' @ error/tiff.c/TIFFErrors/565.

海外でも同じ事象に遭遇した方がいるが、libtiffのバグでは!?と書かれているだけで解決法は見つからず...。TIFF自体が良くも悪くも自由度の高いフォーマットらしく変換時には色々問題あるようだけど、jpg・pdf・pngなどメジャー所であれば十分使えると思われ...