• 締切済み

円グラフ

PHPで円グラフを作成しています。 以下のサンプルをサイトで入手し動作を確認しました。このままでは色分けのみで何のデータか解りにくいので、データに何のデータであるかの文章を挿入したいのですが方法が解りません。解る方よろしくお願いします。 <?php header("Content-Type: image/png"); ?> <?php // 画像のサイズ $im = imagecreate(200,200); // キャンパスの大きさ $ix = 100; // 中心のx座標 $iy = 100; // 中心のy座標 $iw = 200; // 画像の横幅 $ih = 200; // 画像の縦幅 $rs = 270; // 開始角度(上:270) // データ $data[0] = 80; $data[1] = 50; $data[2] = 30; $data[3] = 20; $data[4] = 10; // 色の定義(データの数だけ必要) $white = imagecolorallocate($im,255,255,255); $red = imagecolorallocate($im,255,0,0); $yellow = imagecolorallocate($im,255,255,0); $lime = imagecolorallocate($im,0,255,0); $cyan = imagecolorallocate($im,0,255,255); $blue = imagecolorallocate($im,0,0,255); $cd = array($red,$yellow,$lime,$cyan,$blue); // 合計値の計算 $length = count($data); $m=0; for($i=0; $i<=$length; $i++) { $m += $data[$i]; } // 画像の描画 for($i=0; $i<$length; $i++) { $st = $rs; $rs += $data[$i] / $m * 360; if($rs >= 360) $rs -= 360; imagefilledarc($im,$ix,$iy,$iw,$ih,$st,$rs,$cd[$i],4); } imagepng($im); ?>

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

みんなの回答

  • tom233
  • ベストアンサー率17% (61/352)
回答No.1

PEARのImage_Graphを利用した方がいいと思いますよ。 Image_Graphは中ではGDが動いているようなので 質問者のソースだとGDでの描画しているから大丈夫でしょう。

関連するQ&A

  • 画像に文字を入れて出力

    いつもお世話になってます。 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
  • 画像合成について

    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
  • 「imagejpeg」(GD)で作成した画像を保存できない

    <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> http://www.php.net/manual/ja/function.imagejpeg.php を参照して(そのまま利用して)、画像を作成して表示させてみました。 すると、これはその通り、うまく画像が表示されました。 しかし、 <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // 【追加分】: 画像を保存する imagejpeg($im, 'new.jpg'); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> のように imagejpeg($im, 'new.jpg'); を挿入して、その画像を保存しようとしているのですが、うまくいきません。(何も起こりません。) ちなみに、保存するためのディレクトリのパーミッションはその親ディレクトリを含め、(7,7,7)です。 「new.jpg(相対パス)」を「/www/.../new.jpg」のように絶対パスを使ってやっても結果は同じでうまくいきませんでした。 どのようにすれば、新しく作成した画像を保存できるのでしょうか? ちなみに、OSはLinux(Fedora10)です。もちろん、GDは先のテストで証明される通り、動作していると思います。 よろしくお願い致します。

    • 締切済み
    • 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+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のアニュアル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ソースだけなら正しく表示できるのですが、 htmlソースを加えるとphpソースの部分が文字化けし、画像が表示できません。どうしてなのでしょうか? 画像を扱わないプログラムは、文字化けしないのですが、GDで画像を扱うと文字化けしてしまいます。 文字化けする↓ <html><head><title>sample</title></head> <?php $width=$_GET{'wid'}; $height=$_GET{'hei'}; $red=$_GET{'red'};$green=$_GET{'gre'};$blue=$_GET{'blu'}; $text=$_GET{'tex'};$size=$_GET{'siz'}; $red1=$_GET{'red1'};$green1=$_GET{'gre1'};$blue1=$_GET{'blu1'}; $angle=$_GET{'ang'};$x1=$_GET{'x1'};$y1=$_GET{'y1'}; header("Content-type: image/jpeg"); $im = imagecreate($width,$height); $bground = imagecolorallocate($im, $red,$green,$blue); $text_c = imagecolorallocate($im,$red1,$green1,$blue1); imagettftext($im, $size, -$angle,$x1,$y1, $text_c,"Century",$text); imagepng($im); ?> </form></body></html>

    • ベストアンサー
    • PHP
  • PHP GDでテキストを含む最小の画像を作りたい

    PHP GDでテキストを描画し、画像の幅・高さがそれを含む最小になるように したいのです。 まずimageftbboxでバウンディングボックスを取得し、そのサイズにすればいいかと思い 以下のコードを書いてみましたが、うまくいきません。 <?php $fontSize = 20; $angle = 0; $fontFile = './msgothic.ttc'; // MSゴシック for ($code = ord('A'); $code <= ord('Z'); $code++) { $text = chr($code); $bbox = imageftbbox($fontSize, $angle, $fontFile, $text); $w = $bbox[2] - $bbox[0]; $h = $bbox[3] - $bbox[7]; var_dump($bbox); echo "w = $w h = $h\n"; $im = imagecreatetruecolor($w, $h); $backcolor = imagecolorallocate($im, 0x00, 0x00, 0x00); $forecolor = imagecolorallocate($im, 0xff, 0xff, 0xff); imagefill($im, 0, 0, $backcolor); $x = 0; $y = -$bbox[7]; echo "x = $x y = $y\n"; imagefttext($im, $fontSize, $angle, $x, $y, $forecolor, $fontFile, $text); imagegif($im, $text .'.gif'); } この場合、Iの右半分が切れてしまいます。 $xを調整すればいいのかと思い、$x = $bbox[0]などとしてみましたが、 どうやっても必ずどれかの文字の一部が切れてしまいました。 これを正しく描画するにはどのようにすればいいでしょうか?

    • 締切済み
    • 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での画像ランダム表示方法

    リロードする度に違う画像を表示させたいのですが なかなかうまくいかないのでお力を貸してください! ・boxaには5枚の中から1枚をランダム表示させる ・boxbには10枚の中から3枚をランダム表示させる(重複させないで表示) -----index.php----- <div class="boxa"> <?php require("test.php"); ?> </div> <div class="boxb"> <?php require("test2.php"); ?> <br /> <?php require("test2.php"); ?> <br /> <?php require("test2.php"); ?> </div> -----test.php(http://php.eweb-design.com/0203_rt.phpさんのサンプルソースです)----- <?php $hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image1.gif" alt="バナー1" width="500" height="200" /></a>'; ~~省略~~ $hit[4] = 1; $rtxt[4] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image4.gif" alt="バナー5" width="500" height="200" /></a>'; $length = count($hit) - 1; for($i=0; $i<=$length; $i++) { $m += $hit[$i]; } srand( (double)microtime()*1000000 ); $n = round(rand(1,$m) ); for($i=0; $i<=$length; $i++) { $x = $y; $y += $hit[$i]; if($x<$n && $n<=$y) $ad = $rtxt[$i]; } print("$ad"); ?> -----test2.php----- <?php $hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image6.gif" alt="バナー1" width="200" height="200" /></a>'; ~~省略~~ $hit[9] = 1; $rtxt[9] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image15.gif" alt="バナー10" width="200" height="200" /></a>'; $length = count($hit) - 1; for($i=0; $i<=$length; $i++) { $m += $hit[$i]; } srand( (double)microtime()*1000000 ); $n = round(rand(1,$m) ); for($i=0; $i<=$length; $i++) { $x = $y; $y += $hit[$i]; if($x<$n && $n<=$y) $ad = $rtxt[$i]; } print("$ad"); ?> boxaにはtest.phpで指定した画像がランダム表示されるのですが boxbにはtest.phpとtest2.phpで指定した画像が出てしまい重複表示されてしまいます。 boxbにはtest2.phpで指定した画像のみを重複しないでランダム表示 させたいのですがどのようにしたらよいのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう