SQLの窓

2016年06月12日


pChart2 に JKゴシックとラノベポップを使ってサンプルを作りました



良く使われると想定される、折れ線グラフの最もシンプルなサンプルで各実行単位の解説をコメントで付加しています。
(ソースコードは UTF-8N)
<?php

// *************************************
// ライブラリの読み込み
// *************************************
require_once("../pchart/class/pData.class.php");
require_once("../pchart/class/pDraw.class.php");
require_once("../pchart/class/pImage.class.php");

$main_font = "./JKG-L_3.ttf";
$ttl_font = "./lightnovelpop.ttf";

$w = 600;
$h = 250;

// *************************************
// データ作成
// *************************************
$MyData = new pData();

// *************************************
// 座標設定
// ※ 最後の文字列は凡例用
// *************************************
$MyData->addPoints(array(-4,VOID,VOID,12,8,3),"凡例 壱");
$MyData->addPoints(array(3,12,15,8,5,-5),"凡例 弐");
$MyData->addPoints(array(2,7,5,18,19,22),"凡例 参");

// *************************************
// X 座標の表示内容
// *************************************
$MyData->addPoints(array("1月","2月","3月","4月","5月","6月"),"横軸の月");
// 後から設定する
$MyData->setAbscissa("横軸の月");	// 表示名

// *************************************
// ライン設定
// *************************************
$MyData->setSerieTicks("凡例 弐",4);	// 間隔 4 の点線
$MyData->setSerieWeight("凡例 参",2);	// 線幅

// デフォルトは 0
$MyData->setAxisName(0,"縦軸1");


// *************************************
// 画像のサイズ指定
// *************************************
$myPicture = new pImage($w,$h,$MyData);

// *************************************
// 画像の枠線指定
// *************************************
$myPicture->drawRectangle(0,0,$w-1,$h-1,array("R"=>0,"G"=>0,"B"=>0));

// アンチエイリアス
$myPicture->Antialias = TRUE;
 
// *************************************
// 使用するフォント
// *************************************
$myPicture->setFontProperties(array("FontName"=>$ttl_font,"FontSize"=>12));
// *************************************
// タイトル
// drawText($X,$Y,$Text,$Format="")
// *************************************
$myPicture->drawText(10,35,"ラノベポップは太めです",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMLEFT));

// *************************************
// 使用するフォント
// *************************************
$myPicture->setFontProperties(array("FontName"=>$main_font,"FontSize"=>12));

// *************************************
// グラフエリアの定義
// setGraphArea($X1,$Y1,$X2,$Y2)
// *************************************
 $myPicture->setGraphArea(60,40,$w-70,$h-50);

// *************************************
// スケールの設定
// *************************************
$scaleSettings = 
	array(
		"XMargin"=>10,
		"YMargin"=>10,
		"Floating"=>TRUE,			// 座標外(マージン)をクリア
		"GridR"=>100,"GridG"=>100,"GridB"=>100,	// グリッド線の色
		"DrawSubTicks"=>TRUE,		// 目盛の中心に目盛
		"CycleBackground"=>TRUE		// 交互に色を付ける
	);

// *************************************
// スケールの描画
// *************************************
$myPicture->drawScale($scaleSettings);

// *************************************
// グラフの描画
// *************************************
$myPicture->drawLineChart();

// *************************************
// 凡例の描画
// drawLegend($X,$Y,$Format="")
// *************************************
$myPicture->drawLegend(350,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

// *************************************
// 表示
// *************************************
$myPicture->stroke();
?>

ちなみに、画像として img 要素に記述する場合は、php の最後に ? を付けておくと、右クリックで画像保存する際に .png として名前付けされました( Google Chrome で確認 )


posted by lightbox at 2016-06-12 22:10 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2015年05月23日


PHP の ImageMagick で作成した PNG 画像にオフセットが設定されてしまった場合の対応方法


 

GIMP でこのような表示がされてしまいました。無視すれば意図した状態にはなりますが、適用すると妙な事になります。( WEB上で表示するぶんには問題なさそうです )

何故このような事が起こるのかは解りませんが、背景を透過した時に画像の全体のサイズが調整されてしまってこのようになってしまいました。同様のトラブルも発見しましたが、それはコマンドラインの ImageMagick のお話でした。

ただ、リンク先の情報から、『+repage』というキーワードを知る事ができたので、それで調べると PHP のマニュアルの Imagick::trimImage というメソッドの User Contributed Notes に解答がありました。
<?php 
$im->trimImage(0); 
$im->setImagePage(0, 0, 0, 0); 
?>
上記処理で出なくなりました。



posted by lightbox at 2015-05-23 22:04 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2014年10月05日


PHP : 連想配列を「オブジェクト」に変換(キャスト)するとうまく動きますが、通常配列では参照できないようです

これは、連想配列云々では無く、プロパティ名が数字だと参照できないようです。( 0、a、2 という連想配列でテストしました )

PHP では、特別な文字列のプロパティ参照として、以下のような記述が可能です。
$z1->{'2011/07/08'}
$z1->{'日本語表示'}

※ ついでなので、可変変数でオブジェクトのプロパティを参照してみました
$v = '日本語表示';
print $z1->$v;
<?
header( "Content-Type: text/plain; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// ***********************************************
// 連想配列のテスト
// ***********************************************
$x['2011/07/08'] = 2;
$x['next'] = '2011/07/15';
$x['日本語表示'] = 'ここは SHIFT_JIS です';

$z1 = (object)$x;

print "\n";
print $z1->{'2011/07/08'} . "\n";
print "{$z1->next}\n";
print "{$z1->{'日本語表示'}}\n";

// 可変変数でオブジェクトのプロパティ
$v = '日本語表示';
print $z1->$v  ."\n";

print "\n";

var_dump($z1);

// ***********************************************
// 通常配列のテスト
// ***********************************************
$y[] = 2;
$y[] = '2011/07/15';
$y[] = 'ここは SHIFT_JIS です';

$z2 = (object)$y;

// 単独では表示されません??
print "\n";
print $z2->{0} . "\n";
print $z2->{'0'} . "\n";
print $z2->{"0"} . "\n";
$v = 0;
print $z2->$v . "\n";
$v = "0";
print $z2->$v . "\n";
print "\n";


// 中には入っているようですが・・・
var_dump($z2);


// ***********************************************
// その他の変換( マニュアル通りです )
// ***********************************************
$z3 = (object)'日本語表示';

print "\n";
print $z3->scalar . "\n";
print "\n";

var_dump($z3);

?>


2
2011/07/15
ここは SHIFT_JIS です
ここは SHIFT_JIS です

object(stdClass)#1 (3) {
  ["2011/07/08"]=>
  int(2)
  ["next"]=>
  string(10) "2011/07/15"
  ["日本語表示"]=>
  string(21) "ここは SHIFT_JIS です"
}







object(stdClass)#2 (3) {
  [0]=>
  int(2)
  [1]=>
  string(10) "2011/07/15"
  [2]=>
  string(21) "ここは SHIFT_JIS です"
}

日本語表示

object(stdClass)#3 (1) {
  ["scalar"]=>
  string(10) "日本語表示"
}
全く表示されません
最後に文字列を OBJECT に変換していますが、scalar と言うプロパティが作成されています。 ちなみに、説明の吹き出しは画像ですが、中の文字は普通の文字列で、PRE の枠の position を relative にして以下のようにして表示しています。
<img src="http://winofsql.jp/image/fd02.png" style='border:solid 0 #000;width:300px;position:absolute;left:220px;top:80px;box-shadow:none' /><div style='position:absolute;left:280px;top:160px;width:200px;font-size:20px;font-weight:bold'>全く表示されません</div>



posted by lightbox at 2014-10-05 11:44 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2014年08月05日


PHP でエラーが表示されない場合の ini_set( 'display_errors', "1" ) 使用時の注意事項

PHP のオンラインマニュアルでは以下のように書かれています。
注意:
display_errors は実行時にも設定可能(ini_set() 関数を用いて)ですが、スクリプトが致命的(fatal)なエラーを発生した場合は その設定は反映されません。なぜなら、要求されたアクションは 実行されなかったからです。
経験と記憶から言うと、PHP のバージョンアップのどこかのタイミングでこうなったようなのですが、PHP のマニュアルにそういう記述は無く、上記のような記述になっています。ですから、実際の記述は include してその中に書く事になります。( php.ini で設定できる場合はその限りではありません )
<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
include("file_with_errors.php"); 
?>

エラーの内容に関して言えぱ、error_reporting 関数を併用する事が多いと思います。


タグ:PHP
posted by lightbox at 2014-08-05 17:00 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2014年06月07日


特に変更しても支障の無い error_append_string php.ini ディレクティブを使用して PHP 全体のデバッグに利用する

PHP 全体のお話になるので、個人の開発環境を想定してはいますが、本番時には $debug = false; とすれば良いので運用のルールさえ確実であれば、いろいろ利用価値があると思います。
$debug = ini_get( "error_append_string" );
if ( $debug == "" ) {
	$debug = true;
}
else {
	$debug = false;
}

関連する PHP のドキュメント

php.ini ディレクティブのリスト


posted by lightbox at 2014-06-07 14:27 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2013年11月29日


PHP : 日本語を使った変数( 特殊文字列で変数 ) / 変数名を文字列として扱う

そのような需要が無かったので気付かなかったのですが、JSON 文字列を OBJECT に変換すると、日付フォーマットがプロパティで指定されていたので、PHP で参照する方法を調べたところ、json_decode のページのサンプルコードにそれがありました。

print $obj->{'foo-bar'}; // 12345

もともと、PHP では、$GLOBALS で、変数名を文字列として与えて参照できるのでこういう事なのだろうとテストをしてみました。
( 可変変数に文字列定数を使う )
<?

$var_name = array(
	"睦月", "如月", "弥生",
	"卯月",	"皐月", "水無月",
	"文月", "葉月", "長月",
	"神無月", "霜月", "師走"
	);

for( $i = 0; $i < count($var_name); $i++ ) {
	${$var_name[$i]} = $i+1;

}

print ${"睦月"} . "<br>";
print ${"如月"} . "<br>";
print ${"弥生"} . "<br>";
print ${"卯月"} . "<br>";
print ${"皐月"} . "<br>";
print ${"水無月"} . "<br>";
print ${"文月"} . "<br>";
print ${"葉月"} . "<br>";
print ${"長月"} . "<br>";
print ${"神無月"} . "<br>";
print ${"霜月"} . "<br>";
print ${"師走"} . "<br>";

${"表示"} = "SHIFT_JIS テスト";
${"山 田 太 郎"} = "スペースを含む";
${"2010/10/28"} = "日付";

print "${"表示"}<br>";
print "${"山 田 太 郎"}<br>";
print "{${"2010/10/28"}}<br>";

// 以下可変変数の説明
$a = "hello";
$$a = 'world';
echo "$a ${$a}" . "<br>";
echo "$a $hello" . "<br>";

print ${"hello"} . "<br>"; // この部分追加(特殊文字変数に使用可能)
print ${$a} . "<br>";
print $hello . "<br>";

?>


関連する記事

PHP : 可変変数を使用した特殊文字列による変数と JSON との関係  


タグ:PHP 変数
posted by lightbox at 2013-11-29 09:09 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり