これまで「画像掲示板の泉」に投稿された画像のサムネイル作成には、PHPのGDライブラリを使っておりましたが、GDではアニメーションGIFの取り扱いができないため、掲示板スレッドにアニメーションGIFを投稿してもらっても静止GIF画像になってしまっておりました。

そこで、脆弱性に難があることで有名なImageMagickを使って、GIFアニメーションを残しつつサムネイル画像として縮小する方法に変更してみましたので、この記事ではその経緯をご紹介したいと思います。

はじめに

いつもながら本業が忙しく、サイト運用に全く手が回らずの日々が続いてしまいましたが、ふと画像掲示板の泉」を見ると、また荒らし投稿が目につき始めるぐらいに荒れ始めていたので、眠い目をこすりつつサイトメンテナンスをやることにしました。

個人サイトの一番つらいところかもしれないです。

急なPHPのバージョンアップ

メンテナンス作業中、眠さで頭がバカになっていたのか、管理画面でPHPのバージョン変更を何も考えずにやってしまい、PHPをversion 5.xからVersion 7.3に一気上げてしまっておりました。

すると、これまでPHP5.x系に甘えて手抜きをしていた変数宣言あたりが原因となり、dtn.jpサーバ全体にWarningが表示されるようになってしまいました。

慌ててプログラム修正をしておりましたが、途中に何度かお問い合わせまでいただいてしまい大変ご迷惑をお掛けしました。

メンテナンスに合わせて機能追加

Warning潰しもひと段落したので、折角なので何か少しでも機能改良できそうなことはないかと考えまして、ふとやってみたことが画像掲示板の泉でアニメーションgif画像の貼り付けに対応させることでした。

今思えば、PHPのバージョンUPとは全く関係ありませんね。

アニメーションgifのアップロード処理

GIFアニメーションなんて、いつの時代の話をしてるんだと笑う方も多いと思いますが、実はこれまでアニメーションGIF画像を画像掲示板の泉にアップロードをしても、ファイルアップロードは自体は問題なくできおりましたが、サムネイル画像の生成時にアニメーションを残すことができておりませんでした。

GDライブラリでサムネイル生成

画像アップロードをした際に、画像サイズが大きい場合にはサムネイル画像を別途生成していましたが、このサムネイル生成の画像リサイズにはPHPのGDライブラリを使っておりました。

このGDライブラリがgifアニメーションに実は対応しておらず、せっかくアニメーションgifをアップしてもらっても、サムネイル画像ではアニメーションが消えた単なる固定gifファイルになってしまうという問題がありました。

ImageMagickでサムネイル生成

そこで、アニメーションも残しつつリサイズするため、GDでのリサイズをやめてImageMagickを使う方法に変更してしまいました。

ImageMagickとは、100種類以上の画像形式に対して操作が可能なソフトウェアで、ほとんどのレンタルサーバにインストールがされていると思いますが、最近は脆弱性の問題がかなり話題になったりしているため、php.iniで切られていることも多いかもしれません。

私が借りているさくらのレンタルサーバでもImageMagickはデフォルトで切られていたので、 extension=imagick.sophp.iniに追加する必要はあったりしました。

php.ini編集後、無事にPHPからサムネイル画像を生成することができ、GIFアニメーションのアニメーションを残してサムネイル生成をすることができるようになりました。

修正をした画像掲示板の泉のサイトイメージ
アップ最大容量も10MBに変更しました

おわりに

ImageMagickはWEBで取り扱いのある画像のほとんどを操作することができる為、対応画像形式の多さが起因して、脆弱性の問題がでることが多いです。このため、ファイル形式を絞ってサムネイル生成に活用するといった配慮をすれば、そこまで恐れることもないのかとも思います。

アニメーションをGIFはファイル容量が多くなることも多いので、「画像掲示板の泉」のアップロードの画像の最大容量を最大1MBとしていたものを、最大10MBにまでアップしておきました。

iphoneなんかで写真を撮ると、平気で1MBを超える画像が撮れてしまうので、これで多少なりとも使える画像掲示板になったのかとは思います。