PHP4で画像の合成方法を学ぼう

このQ&Aのポイント
  • PHP4を使用して画像の合成方法について学びます。
  • 具体的には、与えられた画像の上に数字の1を表示させる方法を検討します。
  • 必要な画像の作成方法や関数の使用方法について解説します。
回答を見る
  • ベストアンサー

画像合成について

PHP4で画像の合成を行ないたいのですが、イマイチよくわかりません。具体的には、以下のような画像を作成して、その上に、数字の1を表示させる方法を検討しています。一応予め「1.png」という数字の1の画像を用意して下記で作成した画像の上に表示したいです。 よろしくお願いします。 $im = imagecreate(200,200) or die("error!\n"); $bg = imagecolorallocate($im , 70, 130, 180); $fg = imagecolorallocate($im , 255, 255, 255); //四角形を描く imagerectangle($im , 0, 0,200, 200, $fg) or die("error!\n"); mb_http_output("pass"); header("Content-Type: image/png"); imagepng($im); imagecolordeallocate($im, $bg); imagecolordeallocate($im, $fg); imagedestroy($im);

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

サンプル作ってみました 背景が白の"one.png"を上に重ねて表示する場合の例です <?php //ベースの画像を作成 $im1 = imagecreatetruecolor(200,200) or die("error!".__LINE__."\n"); //ベース画像を青で塗りつぶす $blue = imagecolorallocate($im1 , 0, 0, 255) or die("error!".__LINE__."\n"); imagefill ($im1, 0, 0, $blue) or die("error!".__LINE__."\n"); //PNG画像を読み込む $im2 = imagecreatefrompng("one.png") or die("error!".__LINE__."\n"); //読み込んだ画像の背景色を透明に指定(例は白) $trans = imagecolorallocate($im2, 255, 255, 255) or die("error!".__LINE__."\n"); imagecolortransparent($im2, $trans) or die("error!".__LINE__."\n"); //画像を重ねる imagecopymerge($im1, $im2, 0, 0, 0, 0, 200, 200, 100) or die("error!".__LINE__."\n"); header("Content-Type: image/png"); imagepng($im1); imagedestroy($im1); imagedestroy($im2); exit; ?>

関連するQ&A

  • PHP+GDについて

    PHPでGDを用いてPNGファイルを生成するスクリプトを作成したのですが、うまく動作しません。 <?php $filename = "G".date("Ymdhis").".png"; $im = imagecreate(550, 250) or die ("画像の作成に失敗しました"); $bg = imagecolorallocate($im, 255,255,255); $trans = imagecolortransparent($im, $bg); imageline($im, 60,0,60,140, $trans); $filedir="graph_img/".$filename; imagepng ($im,$filedir); imagedestroy($im); echo "作成完了!"; ?> このスクリプトを実行すると、PNGファイルは生成されるんですが、ファイルサイズが0で、スクリプトの実行がそこで中断されてしまいます。 何かよい解決方法はないでしょうか?よろしくお願いいたします。

    • 締切済み
    • PHP
  • 画像に文字を入れて出力

    いつもお世話になってます。 phpで、画像に文字を入力して出力(画像として)したいのですが 画像を育成し、そこに文字を入力して画像として出力 というようなスクリプトは多く見つけられました(以下の通り) --- <?php Header("Content-type: image/gif"); $im = imagecreate(400,30); $black = ImageColorAllocate($im, 0,0,0); $white = ImageColorAllocate($im, 255,255,255); ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Testing... Omega: Ω"); ImageGif($im); ImageDestroy($im); ?> --- 元々用意した画像に文字を入力して出力させる事は可能でしょうか?

    • ベストアンサー
    • PHP
  • PHPで半透明画像を作りたい

    半透明の画像(全てのピクセルのalphaが50の画像)を作りたいのですがうまくいきません。 元画像を$imとして、透明の背景($bg)を作成し、その上に alpha=50でコピーすれば、半透明になるか・・・と思ったのですが、 黒っぽい画像になってしまいます。 ($bgが透明ではなく、黒画像になっているようです。) 半透明の画像を作りたいときは、どのようにすれば作成できますでしょうか? $bg = imagecreatetruecolor(100, 100); imagefill($bg,0,0,imagecolorallocatealpha($bg,0,0,0,127)); imagecopymerge($bg, $im, 0, 0, 0, 0, 100, 100, 50); imagealphablending($bg, false); imagesavealpha($bg, true); header('Content-type: image/png'); imagepng($bg);

    • 締切済み
    • PHP
  • GD(php)での image関数 イメージ関数でブラウザ出力が出来ない

    下記ソースのimage.phpというファイルを作りました。 直接http://url/image.phpでアクセスすると画像が表示されません。 <? header("Content-Type: image/png"); $image = imagecreate(120,120); $black = imagecolorallocate($image,0,0,128); $yellow = imagecolorallocate($image,255,255,0); imageline($image,10, 60, 110, 60, $yellow); imagepng($image); imagedestroy($image); ?> imagepng($image);を imagepng($image,"test.png"); に変えたら、正しく同フォルダーにtest.pngが出力され、こちらは問題ないファイルとなっています。今回の処理ではphpを画像ファイルとして扱いたいのですが、 このケースで考えられる原因教えてください。 参考までにtest.htmlに <html><head><title>test</title> <img src="image.php"></body></html> と書いても結果は同じく画像表示が出来ませんでした。 <html><head><title>test</title> <img src="test.png"></body></html> では表示出来ます。

    • 締切済み
    • PHP
  • レンタルサーバでPHPを動かす時

    http://tok2.com/というところで PHP(バージョン5)を動かそうとしています。 レンタルサーバで、PHPがつかえるということは Apacheや、PHPのインストールはいらず エディタなどで、test.phpなどファイルを作って サーバにあげるだけでいいのでしょうか? 単純な文字の表示などは、できるのですが 画像の生成をして表示など、できないことが多々あります。 プログラムの内容は、サンプルをそのままコピーして いるので間違ってはないと思うのですが・・・ 何か、ほかに必要なことがありましたら 教えていただけませんか? 画像の表示の内容は下記になります。 <?php header("content-type: image/png"); $image = imagecreate(100,100); $back = imagecolorallocate($image, 0, 0, 0); $red = imagecolorallocate($image, 255, 0, 0) imagepolygon( $image, array( 10, 80, 80,80, 80, 10 ), 3, $red ); imagepng($image); imagedestroy($image); ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • イメージ関数の使い方について

    ローカルテスト環境で、簡易画像掲示板を自分で作ってみたいと思い、まずimage関数がどういったものかphpマニュアルで見てました。 imagecreatetruecolor()を調べていて、実際どんなものか動かしてみようと思い、マニュアルのサンプルコードのメッセージ部分だけ変えてやってみました。以下がコードの内容です。 <?php header ("Content-type: image/png"); $im = @imagecreatetruecolor(120, 20) or die("新しいイメージストリームを作成できませんでした。"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, "ここが表示されるテキスト", $text_color); imagepng($im); imagedestroy($im); ?> しかし、これを実行してみても画像が×印になって表示されません。 imagecreatetruecolor()とかimagepng()とかちゃんと動いているのかと思い、自分なりに確認してみようと、コードを少し変えました。 まずimagecreatetruecolor()は成功時に画像リソースIDを返すと書いてあったのでprint文で出力して確認できないかと思いやってみました(返される値がarrayとかstoringじゃないので、出力できないのではと思いましたがとにかくやってみました。) つぎにimagepng()は失敗した場合に FALSE を返すって書いてあったので、失敗したら"false"と出力させてみようと思いました。 以下がそのコードです。 <?php header ("Content-type: image/png"); $im = @imagecreatetruecolor(120, 20) or die("新しいイメージストリームを作成できませんでした。"); print($im); $flag=imagepng($im); if($flag==false){ print("false");} imagedestroy($im); ?> これを試してみましたが、出力結果は同じでした。 なんか反応があるかもとおもい、一応imagecreatetruecolor(120, 20)の前の@マークをはずしてみたりもしましたが別にエラーが表示されるわけでもなく、ただ画像が表示されないだけです。 phpinfoのgdのところは、 GD Support enabled GD Version bundled (2.0.34 compatible) FreeType Support enabled FreeType Linkage with freetype FreeType Version 2.1.9 T1Lib Support enabled GIF Read Support enabled GIF Create Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled XBM Support enabled になっています。 php.iniのmemory_limit は32Mになってます。memory_limitを-1にしたらちゃんと表示されるかもと思ったのですがやはり×印のままでした。 C:\xampp\php\extの中にphp_gd2.dllがあるのも一応確認しました。 動作環境はwindows vistaにxampp1.6.5で、phpのバージョンは5.2.5です。マニュアルを見た限りでは、windowsではphp.iniのphp_gd2.dllのコメントを外すだけでちゃんと動作すると思っていたのですが、他に抜けていることがありましたらアドバイスをお願いします。

    • ベストアンサー
    • PHP
  • PHPで行う最速の画像合成を教えて下さい。

    PHPを使用して、画質をあまり落とさず、1秒以下の処理時間で23個の画像を合成する方法(ロジック)を教えて下さい。 画像の合成をPHPで下記のソースのように組みましたが、横1120×縦2016のPNGファイル(容量は1ファイル当たり約 6.6KB~140KB)を23個合成して一つのファイルにする処理が終了すると、結果として合成された画質はキレイ(10段階中10の画質)ですが、処理時間が5.5秒程かかります。 そこで、合成素材の23個のファイルを全て半分の大きさ横560×縦1008にすると、結果として合成された画像の画質は結構落ちました(10段階中6の画質)が、処理時間は2.5秒程で終わりました。 希望としては、画質をあまり落としたくないので、小さくても横560×縦1008の画像を23個合成して処理時間を1秒以下にしたいのですが、以下のソースのやり方よりも処理が早く終わる やり方をご存知の方はいませんか? ご存知の方は、ご教授願います。 ちなみに、画像の種類は、使用できる色の種類が多いPNG形式で1秒以下の処理時間を実現したいです。 宜しくお願い致しますm(__)m ■環境 windows vista xampp/apache 2.2.4 PHP Version 5.2.3 //23個のファイルをロード $img1 = imagecreatefrompng(一個目のファイル); $img2 = imagecreatefrompng(二個目のファイル); ~ $img23 = imagecreatefrompng(23個目のファイル); //(白)の色を作成 $white1 = imagecolorallocate($img1, 255, 255, 255); $white2 = imagecolorallocate($img2, 255, 255, 255); ~ $white23 = imagecolorallocate($img23, 255, 255, 255); //白色を透過色へ imagecolortransparent($img1, $white1); imagecolortransparent($img2, $white2); ~ imagecolortransparent($img23, $white23); //それらをひとつの画像に統合($img1を背景とすると。) imagecopymerge($img1, $img2, 0, 0, 0, 0, 1120, 2016, 100); imagecopymerge($img1, $img3, 0, 0, 0, 0, 1120, 2016, 100); ~ imagecopymerge($img1, $img23, 0, 0, 0, 0, 1120, 2016, 100); //マージした後いらなくなった画像リソースをとりあえず解放 imagedestroy($img2); ~ imagedestroy($img23); imagepng($img1,出力ファイル名); imagedestroy($img1);

    • ベストアンサー
    • PHP
  • PHPのアニュアル17章をみて

    x.phpを <?php Header("Content-type:image/png"); $string=implode($argv," ");//変更場所 $im=imageCreateFromPng("x.png"); $orange=ImageColorAllocate($im,220,210, 60); $px=(imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImagePng($im); ImageDestroy($im); ?> としx.htmlを <html><body> <img src="x.php?text"/> </body></html> とし画像x.pngとx.htmlとx.phpを /var/www/html/において 外部のPCからブラウザでx.htmlを呼び出したのですが絵が出ません $string=implode($argv," ");//変更場所 を $string="text"; に変更すれば絵が出ます このままでは引数を引き渡すことができません どうしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • 画像描画と一般の関数は同じphpファイルには書けないのでしょうか?

    画像描画と一般の関数は同じphpファイルには書けないのでしょうか? 再びお世話になります。 phpで100以下の素数の数だけ、四角い黒い画像を横に並べて表示としています。 できれば、素数の数字の中身を画像の中に書き込めれば良いのですが、 どうしても文字化けなどしてうまくいきません。 以下のソースを打つと、黒い図形のみが表示されます。 どのように解決したらよいでしょうか?お願いいたします。 コードは以下のようになります(ご参考までに) <?php function draws() { header ("Content-type: image/png"); $image = imagecreatetruecolor(30,35); $bcolor = imagecolorallocate($image, 255,255,255); $fcolor = imagecolorallocate($image, 0,0,0); imagepng($image); imagecolordeallocate($image, $bcolor); imagecolordeallocate($image, $fcolor); imagedestroy($image); } function testprint1() { for ($i = 0; $i < 100; $i++) { printf("%d\n", $i); } } function testprint2() { printf("333333333333333333333333333333333333"); } draws(); testprint1(); testprint2(); ?>

    • ベストアンサー
    • PHP
  • PHPで画像縮小

    質問します。自分は今PHPで画像の縮小をしようと思っています。 しかしうまくいきません。 コードは <htm> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>画像縮小</title> </head> <body> <?php $size = getimagesize("dl_button.png"); $image_in = imagecreatefrompng("dl_button.png"); $image_out = imagecreate( 90, 90 ); imagecopyresized( $image_out, $image_in, 0, 0, 0, 0, 90, 90, $size[ 0 ], $size[ 1 ] ); imagepng($image_out,"small.png"); imagedestroy( $image_in ); imagedestroy( $image_out ); ?> <img src = "dl_button.png" border = "0"> <img src = "small.png" border = "0"> </body> </html> となっています。 今のままだとエラーが出て、 「small.pngが見あたらない」と言われてしまいます。 ディレクトリは index.phpとdl_button.pngが同じ場所にあります。

    • ベストアンサー
    • PHP

専門家に質問してみよう