業務で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が使えるか確認。
自分の場合、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などメジャー所であれば十分使えると思われ...