PHP
画像処理

Imagineで簡単に画像操作する

More than 3 years have passed since last update.

WEBアプリケーションを開発してるとアップロード画像のリサイズやトリミングなどすることが割と多いですよね。
そこでPHPで簡単に画像操作できそうなライブラリを試してみました。

公式サイト Imagine
Github https://github.com/avalanche123/Imagine

インストール

imagineのインストール

composer.jsonに以下のように記述する。

composer.json
{
    "require": {
        "imagine/imagine": "~0.6.0"
    }
}

そんで、imagineをインストール。

$ composer install

依存モジュールの確認

imagineの動作には下記いずれかPHP拡張モジュールが必要らしい。

  • GD2
  • Imagick
  • Gmagick

なので調べてみる。ぼくの場合はこんな感じだった。

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

試してみる

元画像

sample_320_240.png
sample_320_240.png

  • w320 x h240

スクリプトを書く

公式ドキュメントを見ながら簡単なスクリプトを書いてみる。

hoge.php
<?php
require 'vendor/autoload.php';

class MyImagine {
    public static function factory() {
        if (class_exists('Imagick')) {
            return new Imagine\Imagick\Imagine();
        }
        if (class_exists('Gmagick')) {
            return new Imagine\Gmagick\Imagine();
        }
        if (function_exists('gd_info')) {
            return new Imagine\Gd\Imagine();
        }
        throw new Exception('Not found dependency modules');
    }
}

$path = '/path/to/sample_320_240.png';

$imagine = MyImagine::factory();
$size = new Imagine\Image\Box(200, 200);

$imagine->open($path)
    ->resize($size)
    ->save('/path/to/sample_resize_200_200.jpg');

$imagine->open($path)
    ->thumbnail($size)
    ->save('/path/to/sample_thumbnail_200_200.jpg');

実行結果

$ php hoge.php

resize()で出力された画像。

sample_resize_200_200.jpg
sample_resize_200_200.jpg

  • w200 x h200 に縮小された。
  • new Imagine\Image\Box()で指定したサイズにリサイズされるっぽい。 ※ 縦横比は維持されない。

thumbnail()で出力された画像。

sample_thumbnail_200_200.jpg
sample_thumbnail_200_200.jpg

  • w200 x h150 に縮小された。
  • new Imagine\Image\Box()で指定したサイズに収まるように縦横比を維持したままリサイズされるっぽい。
  • thumbnail()メソッドはよく使いそうな感じ。

そのた

ドキュメント読んでるとすごく色んな操作ができるっぽい。

画像にwatermark(著作権表示)つけたり
http://imagine.readthedocs.org/en/latest/usage/introduction.html#image-watermarking

アニメGIF作ったり
http://imagine.readthedocs.org/en/latest/usage/layers.html#generate-animated-gif