SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

PHPで簡易デコメール/簡易アバター画像生成システムを作る

目的に応じて適材適所で使うPHPライブラリ(2)

画像の合成

 複数の画像を合成して1枚の画像を生成する簡易アバター的なサンプルを作成します。次の3つの画像を合成して1枚の画像として表示します。

合成する画像
合成する画像

 合成後の画像は、以下です。

合成後の画像
合成後の画像

 画像の合成にはImagickのcompositeImageメソッドを利用します。

[構文]compositeImageメソッド
$image->compositeImage(合成する画像のImagickオブジェクト, 合成する画像の合成演算定数, 合成開始の縦位置, 合成開始の横位置);

 合成演算定数とはcompositeImageメソッドで画像を合成する際の合成の属性を指定するPHPの予約済み定数です。代表的な合成演算定数には以下のものがあります。

compositeImageメソッドの定数
合成演算定数 概要
COMPOSITE_OVER 画像を画像にかぶせる
COMPOSITE_PLUS 画像を対象画像に加え、対象画像を置き換える
COMPOSITE_MINUS 画像を対象画像から引き、対象画像を置き換える
COMPOSITE_COPY 画像を対象画像の上に配置する
[リスト10]composite.php
// 顔の画像の読み込み
$image = new Imagick( 'images/base.gif' );

// 目の画像の読み込み
$imageEye = new Imagick( 'images/eye.gif' );
// 顔の画像に合成
$image->compositeImage( $imageEye, Imagick::COMPOSITE_OVER, 0, 0 );

// 口の画像の読み込み
$imageMouse = new Imagick( 'images/mouth.gif' );
// 顔の画像に合成
$image->compositeImage( $imageMouse, Imagick::COMPOSITE_OVER, 0, 0 );

// 画面出力
$image->setImageFormat("gif");
Header("Content-Type: image/gif");
echo $image;

 compositeImageメソッドを利用すると上記のようにImagickで読み込んだ画像の合成が比較的容易にできます。サンプルのように2枚以上の画像を連続して合成することも可能です。

まとめ

 本記事では画像上に文字列を描画する方法をImagickとImagickDrawクラスを使って説明しました。

 画像に文字を描いたり、枠をつけたりしてメールで送信するデコメールや複数の画像を合成してキャラクターを装飾するアバターシステムなど、Imagickを利用することで比較的楽に実現することができます。工夫次第では他にもさまざまな応用ができると思いますので、皆さんもぜひ使いこんでみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4661 2010/01/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー