人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: ymlab
●カテゴリ:ウェブ制作
✍キーワード:C# Gd PHP ライブラリ 画像処理
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●27ポイント

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


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

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

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

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

◎質問者からの返答

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

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

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

ドットのことです。

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

あとで、調べたら、

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

imagesetpixelでした。

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

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


2 ● karla
●27ポイント

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

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

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


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バイト目に色情報があることになります。

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

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

◎質問者からの返答

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

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

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


3 ● sphire
●26ポイント

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ