カテゴリー: メモ
投稿者: Mocchi

PHPのGDライブラリ・バインディングでは、BMPフォーマット(正式にはMicrosoft Windows Bitmap Image)を扱うことが出来ません。

BMPフォーマットは、現在はMicrosoft社が仕様を公開しています。元々はIBM社と共同で策定したフォーマットでしたが、OS/2とWindowsの2つのオペレーティングシステムで異なるフォーマットが使われだし、OS/2が下火になった今、Microsoft社のフォーマットが主流になっているといった感じです。

Bitmaps (Windows) @ msdn.microsoft.com

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

Mediumクラスのコンストラクタで、プロパティ$medium->mimeにファイルのMIME型を設定するように作ってあります。

MIME型の検出は以下のプロセスで実装してあります。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

JPEGやTIFFには、カラーマネジメントのためのプロファイルが埋め込まれることがあります。

カメラやスキャナなどでは、ハードウェアが取得できる色の幅が、装置によって決まっています。この色の幅は「色空間(カラースペース)」と呼ばれます。デジタルカメラやスキャナの中には、取得したデータに、色空間に関する情報、すなわちカラーマネジメントのためのプロファイルを埋め込むものがあります。

このプロファイルは、インターナショナル・カラー・コンソーシアムという標準化団体が規格を出していて、この規格に沿ったものは頭文字を取ってICCプロファイルと呼ばれたりします。

映像を取得する側もそうですが、映像を映し出すディスプレイや、映像を印刷するプリンタもこのプロファイルを持っています。特にプリンタは、光学的な3要素(赤・緑・青、RGB)を塗料の4要素(シアン・マゼンダ・イエロー、キーカラー=ブラック)に変換する必要から、このプロファイルを個別に持っています。たいていはプリンタドライバがこのプロファイルをシステムにインストールするようになってます。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

NP_MediaUtils ver.0.9.6 (RC2)ではウェブログIDをブラウザに保存するため、InitSkinParse、PostAuthentication、PreSendContentTypeの各イベントでクッキーを設定していました。が、昨日風呂に入りながら考えていたら、これはおかしいことに気づきました。

ネットワーク 関数 > setcookie @ php.net

クッキーの設定タイミングは、HTTPヘッダー以外の出力がなされる前です。ウェブサーバからブラウザに送信されるHTTPヘッダーの中でクッキーが送信されます。そのため、PreSendContentTypeイベントで送信しておくだけで十分でした。

NP_MediaUtilsの次期バージョンであるver.1.0.0はこのように変更します。なお、この変更によって、システム全体から見たスクリプトの役割が変化することはありません。多少効率がよくなるくらいです。

カテゴリー: メモ
投稿者: Mocchi

PHP側の実行時間制限は非セーフモード環境下では関数「set_time_limit」で設定できます。

今度はウェブブラウザ側のHTTP接続時間制限を考慮する必要があります。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

リサンプリングをバッチ処理するにあたり、スクリプト実行時間の問題があります。リサンプリングは結構重い処理なので、それなりに時間がかかります。スクリプトの実行時間制限が来てもバッチ処理が終わらない可能性があります。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

問題点

PHPで大きな画像をGDバインディングで処理する際、「Fatal error: Allowed memory size of XX bytes exhausted (tried to allocate XX bytes) in XXXX」が発生することがあります。これは、リサンプリングに必要なメモリ消費量に対して、サーバからPHPに割り当てられているメモリ量が少ないために発生します。

原因

通常、PHPのGDバインディングで画像をリサンプリングするには、以下の2つのデータ用にサーバ上でメモリを確保する必要があります。

  1. 元画像をGDフォーマットに展開したデータ
  2. リサンプリング画像の雛形となるGDフォーマットデータ

1.で確保したGDフォーマットのデータからリサンプリング後のピクセルを算出して2.の雛形に流し込むことで、リサンプリングを行っています。もし画像が大きすぎる場合は、1.の途中でメモリを使い切ることになります。エラーの原因はこれです。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

そもそも、メモリーオーバーの原因は、GDがメモリー上に展開するGDイメージ画像が原因。先の投稿で見たGDイメージの構造体から判断するに、このファイルフォーマットのサイズは、縦ピクセル×横ピクセル×RGBAの4チャンネル×1バイト(256階調)で予想できるかなと判断。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

PHPを利用してサムネイルを生成するために色々調べているのだけれど、なんか、ビルトイン関数が微妙だったり、有用なモジュールが標準で使えなかったりと、やりにくい。

サムネイル生成ルーチンは出来ているんだけれど、どのくらいメモリを消費するのかの判定式がうまくかけない。つまり、imagecreatefromjpegといった関数でどのくらいメモリを消費するんだろうってところ。

これらimagecreatefromXXX関数はGDイメージを生成する。私の予想では、このGDイメージというのは無圧縮のビットマップデータで、画像の幅と高さを引数に生成される。そのバイナリのサイズは幅×高さ×ビット深度×チャンネル数(RGBなら3、YCrCbなら3、BGBAなら4、YCrCbRなら4)で表せて、それに応じたメモリ数を占有するはず。あらかじめここら辺を計算しておいて、PHPが使える余剰メモリ数との比較を取れば、メモリーオーバーすることなく処理を回せるんじゃなかろうかという青写真。

けれど、実際にやってみると壁ばっか。

» 続きを読む

カテゴリー: メモ
投稿者: Mocchi

例のプラグイン作成なんですが、どうも全体のデザイン(プログラム的にもインターフェース的にも)しっくりこなかった、というか自分の力のなさを痛感しちゃったので、なんとかしなきゃと思っていろいろ考えてみた結果、いろんなプログラムをいじってみようという結論に落ち着いたのが5月ころ。そこで白羽の矢を立てたのがUbuntu StudioというLinuxディストリビューション。個人的にDTPソフトや表計算ソフトをいろいろ試しても楽しくなさそうというのがあって、それに対してこのディストリビューションは音楽製作から映像製作まで、クリエーターのための機能が備わっているという評判でした。それ以来、絵を描いたり音楽を作ってみたり、はたまた映像を動画共有サイトに投稿したりという感じで、いろんなソフトウェアを使っています。Linuxのジャーナリングシステムもちょっと勉強したんですが、やっぱりファイル管理システムって作り込むのが難しいらしく、Linuxのそれも、とても有能な人が世界で指折り数えることができるくらいしかいないそうです。

さてと、そろそろこちらのプロジェクトも再始動しないと。JavaScriptやPHP、XHTML、CSSをぼちぼち思い出していきまっしょい!!Flashもありかもと思う今日この頃。