PHPを使うと、パラメータを与えてそれに応じて描画する、ということができます。
例えば「http://myhost/imagetest.php?p=abcd&q=jpg」というURLを指定し「abcd」というパラメータを与え、これに応じてJPG画像を作成するケースがあったとします。
この場合、描画した画像を保存する場合、ファイル名がすべて「imagetest.jpg」となってしまいます。パラメータが異なってもファイル名が同じなのです。
もしURLが「http://myhost/imagetest.php/abcd.jpg」ならばファイル名は「abcd.jpg」と保存されるので、次のような処理ができないか、考えます。
「http://myhost/imagetest.php/abcd.jpg」を
「http://myhost/imagetest.php?p=abcd&q=jpg」に読み替える。
サンプル
$pathinfo=$_SERVER['PATH_INFO'];
$arrs=split("[/\.]",$pathinfo);
$p=$arrs[1];
$q=$arrs[2];
$_SERVER["PATH_INFO"]はファイル名「imagetest.php」より後の部分を取得しますので、$pathinfoには「/abcd.jpg」が入ります。
これをsplitを使い「/」と「.」で分割します。1種類の記号で分割する場合はexplodeを使いますが、ここでは2種類なのでsplitを使いました。もっと複雑な分割が必要ならばpreg_matchなどを使うことになるでしょう。
$arrs[0]=>”"
$arrs[1]=>”abcd”
$arrs[2]=>”jpg”
となります。
あとは$_GET['p']や$_GET['q']を使ってパラメータを得る場合と同じ処理になります。
PHPにはmb_convert_kanaという便利な関数があります。
全角と半角を相互に変換するだけでなくカタカナとひらがなを変換してくれます。
どのように変換するかはオプションを文字列として与えます。
整理してみました。
| パターン |
全角⇒半角 |
半角⇒全角 |
| 英字 |
r |
R |
| 数字 |
n |
N |
| 英数字 |
a |
A |
| スペース |
s |
S |
| 全角カタカナ⇔半角カタカナ |
k |
K |
| 全角ひらがな⇔半角カタカナ |
h |
H |
| 全角ひらがな⇔全角カタカナ |
c |
C |
JavaScriptで配列をコピーするときは次のような注意が必要です。
配列変数aを配列変数bにコピーしています。
これで配列変数bをaの代わりに使うことができます。
次にpopを使ってaの最後の要素をクリアします。
この場合、bには何も影響しないように思われますが、実行結果は次のようになります。
bもaと同じく最後の要素がクリアされます。
つまり「b=a」とすると各要素がコピーされるのではなく「bはaを参照する」ということになるのです。
したがって各要素をコピーするためには次のようにします。
a=[10,20,30];
for(i=0;i<a.length;i++){
b[i]=a[i];
}
a.pop();
実行結果は次の通り。
意図通り、aだけが処理されました。
なお次のような簡単な方法もあります。
sliceを使うと配列を部分的に抜き出すことができます。
第1引数にセットした位置から第2引数にセットした位置の前まで抜き出します。
第1引数に「0」をセットし、第2引数を省略すると、最初から最後までを抜き出しますので、配列の各要素をコピーするのと同じ効果があります。
a=[10,20,30];
b=a.slice(0);
a.pop();
PHPで図形を描くプログラムを書いているのですが、印刷して使うことと前提とすると、どれくらいのサイズにすればよいか分からないので調べてみました。
プログラムはピクセル単位でこれを長さ(センチなど)に換算するとどうなるか。
300ピクセルの図形をインターネットエクスプローラに表示して印刷したところ、7.9センチでした。1センチあたり37.97ピクセルになります。「半端な値だ」と思い、考えたのはインチ単位ではないかということ。
1インチは2.54センチとすると1インチあたり96.44ピクセル。これも半端ですが「96」に思い当たる節が。
調べるとWindowsの解像度は通常、96dpiであるそうです。つまり1インチあたり96ドット(ピクセル)となっているのです。
これさえ分かっていれば計算は簡単です。
| サイズ |
センチ |
インチ |
ピクセル |
| 横 |
縦 |
横 |
縦 |
横 |
縦 |
| A4 |
21.0 |
29.7 |
8.3 |
11.7 |
794 |
1123 |
| A5 |
14.8 |
21.0 |
5.8 |
8.3 |
559 |
794 |
| A6 |
10.5 |
14.8 |
4.1 |
5.8 |
397 |
559 |
もし印刷してA4サイズにしたければ横797ピクセル、縦1123ピクセルになるようにすればよいことになります。
ただし96dpiはWindowsの標準的なソフトの場合であり、これ以外のケースもあるそうです。またMacは違うそうです。
「123」が3桁であることは見ればすぐ分かるのですが、計算で求めるにはどうしたらよいでしょうか。
3桁の数は100以上1000未満ですので
102≦3桁の数<103
となります。
つまり、数yの桁数xは
10x-1≦y<10x
を満たす数となります。
簡単に言えば
y=10x
となるxを求めればよいことになります。
これは10を底とする対数を使えば求められます。
x=log10y
Excelの場合
この先はExcelを使います。
Excelには10を底とする対数を求める「LOG10」というワークシート関数があります。
LOG10(123) = 2.0899
となります。
これを切り上げた数が桁数を表します。
ROUNDUP(LOG10(123),0) = 3
しかしこの方法には問題があります。
ROUNDUP(LOG10(100),0) = 2
となって、100なのに2桁となってしまいます。
そこで次のように切り捨てて1を加えます。
ROUNDDOWN(LOG10(100),0)+1 = 2
まとめると次の通り。
桁数=ROUNDDOWN(LOG10(数),0)+1
JavaScriptの場合
JavaScriptには底を10とする対数を求めるための関数はありませんが、自然対数(底をネイピア数とする対数)を求める関数「Math.log()」があります。
底を10とするyの対数=yの自然対数÷10の自然対数

このような変換ができますので、これを利用します。
桁数=Math.floor(Math.log(数)/Math.log(10))+1
JavaScriptの日付オブジェクトは、年、月、日とバラバラにセットして使いますが、日付を表す文字列をセットしても日付として認識します。
document.write(new Date("15 June 2008"));
これを実行すると次の通り表示されます。
Sun Jun 15 00:00:00 UTC+0900 2008
では、どのような日付文字列ならば正しく処理されるのでしょうか。 続きを読む…
JavaScriptのmatchは正規表現に合致した文字列を配列で返します。
「g」を付けない場合と「g」を付ける場合で内容が変わります。
| gを付けない場合 |
gを付ける場合 |
0個目 合致した部分全体
1個目 1個目の括弧で括られた部分
2個目 2個目の括弧で括られた部分 |
0個目 最初に合致した部分全体
1個目 2番目に合致した部分全体 |
gを付けない場合のサンプル
str="xayxbyxcy";
ret=str.match(/(x.)y/);
ret[0]=”xay”
ret[1]=”xa”
「x□y」という文字列を探しています。
gがないので一つ見つけたら終わりです。
返り値の0個目は合致した部分全体です。「xay」になります。
返り値の1個目は合致した部分のうち括弧に挟まれた部分です。「(xa)y」と見て「xa」になります。
gを付ける場合のサンプル
str="xayxbyxcy";
ret=str.match(/(x.)y/g);
ret[0]=”xay”
ret[1]=”xby”
ret[2]=”xcy”
上のサンプルと同じく「x□y」という文字列を探しています。
gがあるので合致する文字列をすべて見付けます。
返り値の0個目は最初に合致した文字列です。
返り値の1個目は2番目に合致した文字列です。
返り値の2個目は3番目に合致した文字列です。
括弧に挟まれた部分を返すようなことはありません。
iPhoneのカメラロールで複数の写真を選択する方法です。

カメラロールを開き、右上の矢印アイコンをクリックします。 続きを読む…
Google APIを使うと、検索の仕組みを自分のサイトに簡単に組み込むことができます。
しかし、色々できるおかげでページも色々あって、とても分かりにくいです。
理屈抜きで、とにかく使ってみたいということであれば、次のページを開いてください。
http://code.google.com/intl/ja/apis/loader/signup.html
このページで自分のサイトのURLを入力し「Generate API Key」をクリックします。
すると、自分のキーが発行され、次のようなサンプルページ(のコード)が表示されます。
このサンプルページがないのが分かりにくさの原因だと思います。 続きを読む…
Windows用のビデオプレイヤーは色々ありますが、最もよく使うのは、前後へのスキップ(ジャンプ)だと思います。
ソフトによって違いますし、よく忘れてしまうので、まとめてみました。
Windows Media Center
前へスキップ Ctrl+F
後へスキップ Ctrl+B
VLC
前へスキップ Shift+Right < Alt+Right < Alt+Ctrl+Right
後へスキップ Shift+Left < Alt+Left < Alt+Ctrl+Left
Gom Player
前へスキップ Right < Ctrl+Right < Shift+Right
後へスキップ Left < Ctrl+Left < Shift+Left
なお、WindowsメディアプレイヤーとiTunesについては見付かりませんでした。
最近のコメント