PHPに関する質問です。PHPでGDライブラリで画像処理をしていますが、大変時間がかかります。

それぞれのx、y座標にある色情報を高速に取得する方法などはあるのでしょうか。
例えばC#でしたら、getPixel、setPixelを使わずに、unsafeで高速に取得する方法がありましたが、そのようなテクニックが知りたいです。
また、GDで点を打つ命令があれば教えて頂けると助かります。今は、線を描画する命令を始点と終点を同じ座標にして、点を打つことにしております・・。

回答の条件
  • 1人2回まで
  • 登録:2009/05/24 20:37:55
  • 終了:2009/05/31 20:40:02

回答(3件)

id:tezcello No.1

tezcello回答回数459ベストアンサー獲得回数692009/05/24 23:22:54

ポイント27pt

コメント欄が開いていないので、こちらへ。(回答ほどのモノじゃ無くてごめんなさい)


点は、長さ=ゼロ、幅=ゼロの要素ですよね?

一般的には、点はデータ上にしか存在しないので、当然描画もされません。

点を「点のように」描画したい場合は、「半径の小さい円」や「小さい*」を使って擬似的に表現する場合が多いです。

今まで見て来た描画のエンジンは殆どそんな処理でした。

id:ymlab

回答ありがとうございます。

プログラミングをする上での点は、長さ1、幅1の要素です。

ちょっと表現が悪くてすみません・・・。

ドットのことです。

手元にリファレンスがなかったので、質問してしまいました。

あとで、調べたら、

点を打つ命令はhttp://www.phppro.jp/phpmanual/php/function.imagesetpixel.html

imagesetpixelでした。

高速に描画する方法があるとよいのですが、PHPは、そういう用途では

使われていないので難しいのかもしれません・・。

2009/05/25 12:04:34
id:karla No.2

karla回答回数130ベストアンサー獲得回数42009/05/26 13:02:27

ポイント27pt

アイディアレベルなのでポイントは不要です。

画像フォーマットが何か分かりませんが、ビットマップに変換してから処理をしてみてはどうでしょう?

圧縮されていなければ計算式でピクセル位置が分かります。


H = bitmapヘッダのサイズ(52byteだったような)

x = 対象X座標

y = 対象Y座標

w = 横サイズ

h = 縦サイズ

b = 色ビット数 / 8(バイトに換算)

p = ピクセル位置

計算式

p = H + (h - (y + 1)) * (w * b) + (x * b)


例えば、ビットマップがサイズ320×200、色ビット数24ビットで

座標45、90の色情報が取得したい場合は

52 + (200 - (90 + 1)) * (320 * 3) + (45 * 3) = 104827

といった内容になります。

先頭から104,827バイト目に色情報があることになります。

実際に試してないので微妙に違うかもしれません。

方法論の提案ということで。

id:ymlab

回答ありがとうございました。

一応それも考えましたが、ちょっと大変そうです・・。

C言語でBitmapを操作する本を持っているので読んでみます・・。

2009/05/31 19:37:32
id:sphire No.3

sphire回答回数115ベストアンサー獲得回数122009/05/27 01:52:59

ポイント26pt

http://jp2.php.net/imagecolorat

imagecolorat() 関数で指定ピクセルの色を取得できるようですが、これが遅いというお話でしたか?

http://jp2.php.net/imagick-getimagepixelcolor

Imagick拡張でも同等の関数 Imagick::getImagePixelColor() はあるようですが

GD拡張とどちらが早いかはすみません、未確認です。

なお、Imagickでの点を打つ関数は ImagickDraw::point() ですね。

http://jp2.php.net/imagickdraw-point

id:ymlab

回答ありがとうございました。

条件に書くのを忘れていてすみません・・。

ImageMagickは使えない仕様でした・・

2009/05/31 19:38:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません