PHPで画像に別の画像を重ねる方法

PHPで既存の画像に別の画像を重ねる方法です。

例えば左上の隅にロゴ画像を挿入したいと思ったときに使える方法です。

重ねて上になる画像(ロゴ画像の方)の背景は透明にしておいたほうがうまくいきます。

 

同じ作業を繰り返すことで複数の画像を重ねることも可能です。

大きな画像を定義して、そこに並べて結合することも可能です。

PHPで画像に別の画像を重ねる方法

画像を重ねるときは、前回の記事「PHPで読み込んだ画像のサイズを変更する方法」で使った関数imagecopyresampled()を使います。

imagecopyresampled()は、サイズを変えながら画像を別の画像にコピーする関数でした。

これの座標を使えばできます。

サンプルの仕様

blue.jpgというただ青いだけの画像があります。

そこに、neko.jpg を配置します。

サイズは、blue.jpgの1/3で、左から10px、上から10pxの位置に配置します。

結果は、buleneko.jpg というファイル名で出力します。

画像を重ねるコード

コード解説

まず、ベースになる blue.jpg と、コピー元の neko.jpg を読み込み、サイズも取得します。

画像ファイルの読み込みには imagecreatefromjpeg() を使います。

画像のサイズは、getimagesize() を使い取得し、結果の配列の0番目が横幅で1番目が高さになります。

 

neko.jpgのリサイズ後のサイズを、blue.jpgのサイズから計算します。

ベースになる blue.jpg の横幅の1/3を取得し、リサイズ後の横幅とします。

リサイズ後の横幅と、neko.jpgの横幅の比率を計算し、その比率からリサイズ後の高さを算出します。

 

「リサイズしてコピー」のimagecopyresampled()で実際に重ねた画像を作成します。

「コピー先の x 座標」は neko.jpg を配置する場所を左上を基点に右方向の隙間幅を指定します。単位はピクセルです。

「コピー先の y 座標」は neko.jpg を下方向の隙間幅を指定します。

「コピー先の幅」と「コピー先の高さ」に neko.jpg を配置するサイズを指定します。

 

最後に imagejpeg() でファイル名を付けて作成した画像をファイルに出力します。

まとめ

今回は画像を重ねる方法を紹介しました。

ベースになる画像は今回はただの青い画像ですが、これはファイルを読み込まなくてもGDで作成しても大丈夫です。

また、ベース画像を生成してそこに複数の画像を並べることも可能です。

コロナの影響でみんな大変だから俺もなんかできること

僕は福井県に住んでいるのですが、戦時中に福井大空襲にあい、その直後に大震災にあってボロボロになった話をおばあちゃんに聞きました。

それでも復活することができ、不死鳥の町と言われるようになりました。

先人達には心から感謝し尊敬します。

リーマンショック、東日本大震災、コロナと数十年に一度と言われる被害が立て続けに起きていますが、僕たちは強いです。

今は苦しいかもしれませんがきっと復活できます。

僕は低学歴ですし小さな小さな粒でしかないですが、プログラミングに関しては必死に勉強し15年以上ごはんにありつけています。

プログラミングを勉強している人の役に立てるほどのスキルはあると思っています。

なので1人でもんもんと悩んでいる若手のエンジニア向けに質問を受け付けることにします。

自宅で待機されている間もパソコンとインターネットがあればプログラミングの勉強はできます。

  • PHP
  • SQL
  • HTML・CSS
  • jQuery

とは言ってもいきなり答えを聞いていたのではなかなか成長できないと思うのです。

なので質問の際には次のことをご連携ください。

  • 何をやりたいか
  • どんなことを調べたか、検索キーワードと参考にしたページのURL
  • 調べた結果どこが分からないか
  • できるなら試したコード

メッセージいはとりあえずTwitterにでもください。

質問はこちら

すぐに返事できないかもしれませんがご了承ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA