• 締切済み

PHPで、テーブル(表)をimagecreate()で動的に書こうとし

PHPで、テーブル(表)をimagecreate()で動的に書こうとしています。 PHP初心者です。 imagerectangle(),imagettftext()、fopen()辺りを組み合わせれば良いのだとは思いますが… 各行と列の幅/高さを指定してボーダー(罫線)を引くところまではできて、その後の「各セルに文字を書く」ところでつまずいています。 別ファイルにカンマ区切りで記述しておいた文字列を、fgetcsv()で呼び出せばいいのかなと考えていますが、fgetcsv()の使い方がよくわからず、うまく書けません。 例示をいただければと想います。 現在は、以下のような感じです。 <?php header( "content-type: image/png" ); $image = imagecreate( 228,480 ); //初期化 $bg = imagecolorallocate( $image,0,0,0 ); $border_color = imagecolorallocate( $image,128,0,0 ); $white = imagecolorallocate( $image,255,255,255 ); $font_family = "msgothic.ttc"; //暫定的に。 $wid = 0; //セルの幅 $hgt = 20; //セルの高さ $x = 0; //描画開始位置の横座標。後のfor文の中で値が代入される $y = 0; //描画開始位置の縦座標。後のfor文の中で値が代入される $font_size = 8; $angle = 0; //ここから表の描画 for( $c = 1; $c <= 13; $c++ ) { //cは「何列目か」 if( $c == 1) { $wid = 10; } elseif( $c % 2 == 0 ) { $wid = 5; } else { $wid = 30; } for( $r = 1; $r <= 13; $r++ ) { //rは「何行目か」 $y = $hgt * ($r-1); if( $c == 1) { //1列目ならすべて塗りつぶし imagefilledrectangle( $image, $x , $y , $x + $wid , $hgt , $border_color ); } elseif( $r == 1 && $c % 2 !=0) { //1行目なら奇数列目のセルを塗りつぶし imagefilledrectangle( $image, $x , $y , $x + $wid , $hgt , $border_color ); } else { imagerectangle ( $image, $x , $y , $x + $wid , $hgt , $border_color ); } } $x = $x + $wid; //描画開始位置の変更 } imagepng($image); imagedestroy($image); ?>

みんなの回答

回答No.1

単純なCSV、つまり 1,2,3,4 a,b,c,d とかなっていて、総数もそんなに多くないのであれば、file関数を使ったほうが早いのではないでしょうか。 <?php $data = file('example.csv'); foreach($data as $line){ $ary = explode(',', $line); } ?> こんな感じで。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • *******imagetext.php***************

    *******imagetext.php***************:: <?php //画像(JPEG)ヘッダを追加 header("Content-type: image/jpeg"); //作成する画像の設定 //幅 $width = 400; //高さ $height = 100; //画像を作成 $img = imagecreate($width, $height); //色の設定(背景/文字列) imagecolorallocate($img, 255, 255, 255); $textcol = imagecolorallocate($img, 255, 0, 0); //書き込む座標 $x = 50; $y = 50; //文字サイズ $size = 20; //角度 $r = 0; //フォントファイルへのパス $font = "C:/WINDOWS/Fonts/MSGOTHIC.TTC"; //画像に文字列を書き込む $string = "文字列を書き込む"; $string = mb_convert_encoding($string, "UTF-8", "SJIS"); imagettftext($img, $size, $r, $x, $y, $textcol, $font, $string); //画像を出力 imagejpeg($img); ?> ************************** MSゴシックのファイルパスはこのように設定しています。 C:/WINDOWS/Fonts/MSGOTHIC.TTC エラーっぽいような文字化け画面になってしまいます。 質問1>>上記のような症状を解決するには? 質問2>>上記のことを解決したうえで、      //画像を出力      imagejpeg($img);      の部分をなくして、      //画像をファイルへ保存      ??????      へ変更するにはどのようにすればいいですか?

    • ベストアンサー
    • PHP
  • phpのImageColorAllocate関数について

    PHPではじめてGDライブラリについて勉強していますが、どうも合点がいかないところがあります。以下、ソースです。 $image = ImageCreate(100, 100); *1 $black = ImageColorAllocate($image, 0, 0, 0); $white = ImageColorAllocate($image, 255, 255, 255); *2 ImageString($image, 5, 5, 5, 文字, $white); イメージクリエイト関数でイメージの土台を作成します。その後、ImageColorAllocate関数で第一の引数に$image(イメージクリエイト関数で作成したイメージオブジェクト?)を指定していますが、これはイメージオブジェクトに関連付けるということなんでしょうか? また、上記ソースで文字列が白になるのはImageString関数で$whiteをしているから理解できますが、画像の背景色が勝手に最初にImageColorAllocate関数で指定した色になるのが理解できません。どこにもそんな命令自体が書いてないと思いますが・・ 初歩的だと思いますが、ネットや持っている書籍をみても載っていませんでした。 分かるかた、ご回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列への代入

    入力画像ファイルの画素を取り込むところで input[x][y] = c(画素) を代入しているのですが、printfで結果を出力すると全て0になってしまい代入されません。なぜか教えてください #define X_wid 512 #define Y_wid 512 main(int argc,char *argv[]) { int x=0,y=0,X=0,Y=0,c; long input[X_wid+1][Y_wid+1],Input1[(X_wid)*(Y_wid)+1]; FILE *fp,*fp_w; if((fp = fopen(argv[1],"r")) != NULL){ while((c = getc(fp)) != EOF){ input[x][y] = c; Input1[x] = c; if(y==Y_wid){ y=0; x++; } else y++; printf("%d %d %d %d\n",x,y,input[x][y],c); } } }

  • FLASHとPHPの連携について

    プログラミング初心者です。 いまポストカード作成システムを大学の課題で作っています。 環境はWindowsXP FLASH8Proです。 最後の保存するところで詰まっています。 現時点でできているところまでHPにアップしたので載せます。 ​http://www.geocities.co.jp/ysmnh028/otameshi.html​ URLより画像を読み込み最後に保存をしたくていろいろ調べていて、PHPと連携させてブラウザ上に新しいページで画像を生成し、それを右クリック⇒保存という形で保存できる事はわかりました。 SAVEボタンのASは以下のとおりです。 on (press) { // 保存用Bitmapを生成 var bmpSnap = new flash.display.BitmapData(300, 444, false); // 保存したいMovieClipをBitmapに描画する bmpSnap.draw(_root.photo_mc); // BitmapデータをRGB配列にする var img_data = new Array(); for (var x = 0; x<bmpSnap.width; x++) { for (var y = 0; y<bmpSnap.height; y++) { var col = bmpSnap.getPixel(x, y); img_data.push(("000000"+col.toString(16)).substr(-6, 6)); } } // データを送信 System.useCodepage = true; myLoader = new LoadVars(); myLoader.img_width = bmpSnap.width; // 画像幅 myLoader.img_height = bmpSnap.height; // 画像高さ myLoader.img_data = img_data.join(""); // 画像データ myLoader.send("snapshot.php", "_blank", "POST"); } PHP側は <?php // 送信データを取得 $img_data = $_POST['img_data']; $width = $_POST['img_width']; $height = $_POST['img_height']; $type = $_POST['img_type']; // IMAGE生成 $source_img = imagecreatetruecolor ($width, $height); // 背景色を生成 $bg_col = imagecolorallocate($source_img, 0xFF, 0xFF, 0xFF); $border_col = imagecolorallocate($source_img, 0x00, 0x00, 0x00); // イメージを描画 $p = 0; for ($x = 0; $x < $width ; $x++) { for ($y = 0; $y < $height ; $y++) { $rgb = hexdec(substr($img_data, $p, 6)); $p+=6; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $col = imagecolorallocate($source_img, $r, $g, $b); imagesetpixel($source_img, $x, $y, $col); } } header("Content-Type: image/jpeg"); imagejpeg($source_img); exit; // JPEG出力 touch("test.jpg"); // まずは空ファイル生成 imagejpeg($source_img, "test.jpg"); // 画像を保存 header("Content-Type: image/jpeg"); readfile('test.jpg'); exit; ?> 以上です。 ローカルでためしたところ画像は表示されず、かわりに代替画像としてアドレスが表示されます。 考えられる原因はなんでしょうか?? よろしくお願いします。

    • 締切済み
    • PHP
  • 配列のとれる領域

    #include<stdio.h> #define X_wid 512 #define Y_wid 512 main(int argc,char *argv[]) { int x=0,y=0,X=0,Y=0,c; int input[X_wid+1][Y_wid+1],middle[X_wid][Y_wid]; FILE *fp,*fp_w;  :  : } middle[X_wid][Y_wid]配列のとる領域の値を大きくとるとエラーメッセージがでてしまいます。 [1][1]や[X_wid][Y_wid]などは正常にコンパイルできるのですが、[X_wid*2][Y_wid*2]みたいに領域を多くするとエラーメッセージがでてしまいます。 やはり、配列のとれる領域は制限があるのでしょうか? また、それでもその領域([X_wid*2][Y_wid*2)を使わなければならない時はどうすればよいでしょうか?

  • 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
  • C#について

    C#で画像の色を変更しようと頑張っているのですが・・・ クリックした座標と同じ色の場所を青にしたいです。 XとYは画像の座標の大体の最大値です。 public partial class Form1 : Form { Bitmap bmp; public Form1() { InitializeComponent(); bmp = new Bitmap(pB1.Image); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { Color c = bmp.GetPixel(e.X, e.Y); for (int Y = 0; Y < 280; Y++) { for (int X = 0; X < 240; X++) { Color c2 = bmp.GetPixel(X, Y); if (c.R == c2.R && c.G == c2.G && c.B == c2.B) { bmp.SetPixel(X, Y, Color.FromArgb(0, 0, 255)); } } } } } } クリックしたところと同じ色を青(0, 0, 255)に変更したいのですが変更されません。 間違っているところなどがあれば教えてください。

  • 円グラフ

    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
  • 文字化け

    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で$_GET[’m’]の意味が分かりません。

    市販の本を参考にPHPを勉強しています。 以下の(2箇所あります)$_GET['m']の'm'とは何なのでしょうか。mを得たらリセット・・?でもmを得るってなんなんでしょう?? 突然出てきて困っております。 初歩的な質問かもしれませんが、よろしくお願いします。 <?php //------------------------------------------------------- //宝探しゲーム //----------------------------------------------------- //セッションの開始 session_start(); //タイトルと説明表示 echo "<h1>宝探し</h1>"; echo "<p>マップ上の適当な場所をクリック!</p>"; //ゲーム状態を判定する $stat = $_SESSION['stat']; if (!$stat || $_GET['m'] == "reset"){ //初めての場合、リセット時 init_game(); draw_map(); exit; } //パネルを開くとき if ($_GET['m'] == 'click'){ click_panel(); } // ゲームパラメータの初期化 function init_game() { //ゲームの初期化 $_SESSION['stat'] ='playing'; $_SESSION['turn'] =0; //宝の位置を設定する $_SESSION['takara_x'] = rand(0,8); $_SESSION['takara_y'] = rand(0,8); //マップを初期化 for ($y = 0; $y < 9; $y++){ for ($x = 0; $x < 9; $x++){ $_SESSION["map"][$y][$x] = "*"; } } } //マップの描画(tableタグ表示) function draw_map() { //マップを描画する $map = $_SESSION['map']; $s = "<table border='1'>"; for ($y = 0; $y < 9; $y++) { $s .="<tr>"; for ($x = 0; $x < 9; $x++){ $v = $_SESSION["map"][$y][$x]; $color = "#FFFFFF"; if ($v == "*"){ $v = "<a href ='?m=click&x=$x&y=$y'>*</a>"; $color = "#COCOCO"; } $s .= "<td width='24' align='center' bgcolor='$color'>"; $s .= "$v</td>"; } $S .="</tr>"; } $s .= "</table>"; echo $s; echo "<p>現在、{$_SESSION['turn']}手目です。</p>"; echo "<p><a href='?m=reset'>* RESTART *</a></p>"; } //パネルクリック時の処理 function click_panel() { $x = intval($_GET['x']); $y = intval($_GET['y']); $takara_x = $_SESSION['takara_x']; $takara_y = $_SESSION['takara_y']; $_SESSION['turn']++; //宝を有無を判定 if ($takara_x == $x && $takara_y == $y) { //宝を見つけた判定 $_SESSION["map"][$y][$x] = '<font color="red">@</font>'; echo '<h1>☆大当たり☆</h1>'; draw_map(); init_game(); }else{ //間違えた場合は宝までの距離を表示 $dist = abs($takara_x - $x) + abs($takara_y - $y); $_SESSION['map'][$y][$x] = $dist; echo "<p>残念でした!ヒント・・あと $dist の距離のところ</p>"; draw_map(); exit; } } ?>

    • ベストアンサー
    • PHP
LIFEBOOKが立ち上げられません
このQ&Aのポイント
  • LIFEBOOK AH/53UのPIN入力で文字が入力できない
  • 外付けのUSBキーボードでも同じ状態
  • PCを立ち上げることができない状態
回答を見る