人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで複数画像合成の方法を教えてください。

大きめの画像「base.png」に小さい画像「1.png」を合成するまでは成功したのですが、
「base.png」に連続して他の小さい画像「2.png」...「7.png」を合成したいと考えております。
2枚目以降の記述方法を教えてください。よろしくお願いいたします。

2枚合成のサンプルは下記です。

<?php
define("TEST_FILE1", "./test/base.png");
define("TEST_FILE2", "./test/1.png");

$src = imagecreatefrompng(TEST_FILE1) or die("error!\n");
$mrg = imagecreatefrompng(TEST_FILE2) or die("error!\n");

list($src_width, $src_height) = getimagesize(TEST_FILE1);
list($mrg_width, $mrg_height) = getimagesize(TEST_FILE2);

// イメージをマージ
imagecopymerge($src, $mrg, 0, 0,
0, 0, $mrg_width, $mrg_height, 100) or die("error!\n");

mb_http_output("pass");
header("Content-Type: image/png");
imagepng($src);

imagedestroy($src);
imagedestroy($mrg);
?>

●質問者: t_yasu
●カテゴリ:インターネット ウェブ制作
✍キーワード:base PHP PNG SRC test
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● wizemperor
●80ポイント

冗長になりますが、そのまま書くのであれば、

<?php
define("TEST_FILE1", "./test/base.png");
define("TEST_FILE2", "./test/1.png");
define("TEST_FILE3", "./test/2.png");
define("TEST_FILE4", "./test/3.png");
define("TEST_FILE5", "./test/4.png");
define("TEST_FILE6", "./test/5.png");
define("TEST_FILE7", "./test/6.png");
define("TEST_FILE8", "./test/7.png");

$src = imagecreatefrompng(TEST_FILE1) or die("error!\n");
$mrg1 = imagecreatefrompng(TEST_FILE2) or die("error!\n");
$mrg2 = imagecreatefrompng(TEST_FILE3) or die("error!\n");
$mrg3 = imagecreatefrompng(TEST_FILE4) or die("error!\n");
$mrg4 = imagecreatefrompng(TEST_FILE5) or die("error!\n");
$mrg5 = imagecreatefrompng(TEST_FILE6) or die("error!\n");
$mrg6 = imagecreatefrompng(TEST_FILE7) or die("error!\n");
$mrg7 = imagecreatefrompng(TEST_FILE8) or die("error!\n");

list($src_width, $src_height) = getimagesize(TEST_FILE1);
list($mrg1_width, $mrg1_height) = getimagesize(TEST_FILE2);
list($mrg2_width, $mrg2_height) = getimagesize(TEST_FILE3);
list($mrg3_width, $mrg3_height) = getimagesize(TEST_FILE4);
list($mrg4_width, $mrg4_height) = getimagesize(TEST_FILE5);
list($mrg5_width, $mrg5_height) = getimagesize(TEST_FILE6);
list($mrg6_width, $mrg6_height) = getimagesize(TEST_FILE7);
list($mrg7_width, $mrg7_height) = getimagesize(TEST_FILE8);

// イメージをマージ
imagecopymerge($src, $mrg1, 0, 0,
0, 0, $mrg1_width, $mrg1_height, 100) or die("error!\n");

imagecopymerge($src, $mrg2, 0, 0,
0, 0, $mrg2_width, $mrg2_height, 100) or die("error!\n");

imagecopymerge($src, $mrg3, 0, 0,
0, 0, $mrg3_width, $mrg3_height, 100) or die("error!\n");

imagecopymerge($src, $mrg4, 0, 0,
0, 0, $mrg4_width, $mrg4_height, 100) or die("error!\n");

imagecopymerge($src, $mrg5, 0, 0,
0, 0, $mrg5_width, $mrg5_height, 100) or die("error!\n");

imagecopymerge($src, $mrg6, 0, 0,
0, 0, $mrg6_width, $mrg6_height, 100) or die("error!\n");

imagecopymerge($src, $mrg7, 0, 0,
0, 0, $mrg7_width, $mrg7_height, 100) or die("error!\n");

mb_http_output("pass");
header("Content-Type: image/png");
imagepng($src);

imagedestroy($src);
imagedestroy($mrg1);
imagedestroy($mrg2);
imagedestroy($mrg3);
imagedestroy($mrg4);
imagedestroy($mrg5);
imagedestroy($mrg6);
imagedestroy($mrg7);
?>

みたいになるかと思います。

冗長なので、配列やループを使うなりして最適化したほうがいいとは思います。

◎質問者からの返答

できました!有り難うありがとうございます。

サーバーの負担が大きいためだと思うのですが、

大きな画像では出来ない場合もありました。

メモリ不足なのでしょうね。

配列やループなどはよく分かりませんが調べてみます。

有り難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ