透過画像の取り扱い

2012/02/27 | PHPの基本

PHPで画像を扱えるのはいいとして、透過画像を扱う際のメモ書き。

画像リソースはimagecreatetruecolorで作成。

$imgObj = imagecreatetruecolor($width, $height);

透明色で塗りつぶすのはこんな感じ。

$bg = imagecolorallocatealpha($imgObj, 0, 0, 0, 127);
imagefill($imgObj, 0, 0, $bg);

画像を上に重ねるときはimagecopy。

$overlay = imagecreatefrompng($path);

imagecopy($imgObj, $overlay, 0, 0, 0, 0, $width, $height);

あと以下も必要かな。

imagealphablending($imgObj, false);
imagesavealpha($imgObj, true);

imagecopymergeがいいかと思ったけど、これだと上手くいかなかった。

realpathの嫌な仕様

2011/11/27 | PHPの基本

realpathは引数として与えられた文字列に対してシンボリックリンクや「./」、「../」を解析してちゃんとした(?)絶対パスを返してくれる関数。と単にそれだけだと思ってた。それだけの機能のほうが絶対いいに決まってる。

しかし調べたら違ってた。ちゃんとした絶対パスを返す部分に関してはそれでよかったんだけど、返される絶対パスを実際に走査して、その有無も調べるらしい。そしてその構成が実在しなければエラーになる。そしてアクセス権がなくてもエラーになる。

仕様だからいかんともしがたいのだが、果たしてそんな必要があるのか。ファイルの有無なんてfile_exists関数を使えばいいのであって、realpathは単に正規化したパスを返せばそれでいいのに。

あーむかつく。

ImageMagickのインストール

2011/10/14 | PHPの基本

インストール、というか、PHPからImageMagickが使えるようにしたくて作業した際のメモ。基本的になるべく余計なことはしたくないのだが、ImageMagickをPHPから使えるようにするための単一パッケージは存在しないようだ(CentOSで)。peclコマンドを使わないといけないらしい(仕方なし)。

  • とりあえずyumでImageMagickをインストールしてみた。これがほんとうに必要かどうか分からないけれど。
  • 以下のコマンドを実行してみた。
    pecl install imagick
  • エラーが出た。どうやらpeclコマンドがインストールされていないようだ。
  • php-pearをyumでインストール(勝手にphp-devel他インストールされた)。
  • httpd-develをyumでインストール(ウェブでそう書いてあったからとりあえず)。
  • 再度peclコマンド実行。
  • extension=imagick.soの記述をPHPの設定ファイルに追加

結果として、phpinfo()で有効になっていることを確認できた。

SESSIONの有効時間

2011/10/12 | PHPの基本

セッションの有効時間の設定ってどうやるんだっけ、と毎回調べるのでメモする。

セッション時間の根本的な設定として、以下の3項目がある。

  1. session.gc_maxlifetime
    ガベージコレクションされるまでの時間(秒)
    デフォルト値:1440
  2. session.gc_probability
    ガベージコレクション時に、ガベージコレクションする確率を設定する(分子)
    デフォルト値:1
  3. session.gc_divisor
    ガベージコレクション時に、ガベージコレクションする確率を設定する(分母)
    デフォルト値:100

上記3つは、以下の文章で表すことが出来る。

セッションは少なくとも(1)で指定した時間はキープされる。(1)で指定した時間が経過すると、(2)を(3)で割り算した値(確率)で破棄される。デフォルト値でいうと、1440秒間は間違いなくセッションが有効だが、それを過ぎると1/100の確率でセッションが破棄される、ということになる。

preg_matchの便利な書き方

2011/08/09 | PHPの基本

preg_match関数は以下のようにして使う(第三引数以降はオプション)。

preg_match($pattern,$subject,$matches,$flag,$offset);

第三引数$matchesには$subjectのうち$patternにマッチした文字が配列で格納される。例えばこんな感じ。

preg_match(‘/^(question([0-9]{2}))\.class\.php$/’,’question01.class.php’,$matches);
var_dump($matches);

array(3) {
[0]=>string(20) “question01.class.php”
[1]=>string(10) “question01″
[2]=>string(2) “01”
}

パターンマッチした箇所が配列で取得できるのだが、キーが数字なので、あとの取り扱いで少し不便。これを以下のように書きなおすことが出来る。

preg_match(‘/^(?P<name>question(?P<number>[0-9]{2}))\.class\.php$/’,’question01.class.php’,$matches);
var_dump($matches);

array(3) {
[0]=>string(20) “question01.class.php”
[“name”]=>string(10) “question01″
[1]=>string(10) “question01″
[“number”]=>string(2) “01”
[2]=>string(2) “01”
}

これでキーがnameとかnumberとか、わかりやすくて使いやすくなる。マニュアルに書いてあったのを見つけた。名前付きサブパターンというらしい。便利そうなのでメモ。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net