2016-10-25 22 views
0

私は画像のエッジから色を読み取るためにPHPとImageMagickを使用しています。画像のピクセル座標

$x = 1; 
$y = 1; 
$pixel = $image->getImagePixelColor($x, $y); 
$colors = $pixel->getColor(); // rgba 

しかし、私は座標がどのように機能するかは分かりません。そこで私はこの4px pngを作成しました。

enter image description here

1,1

代わりに透明なピクセルのrgba(0,30,255,0)を与えます。また、広い範囲のピクセルを選択するとどうなりますか?

+0

戻ってきたRGBA値によれば、実際に透明ピクセルが選択されています。 'a'はアルファチャンネルを表し、通常は不透明度に使用されます。 「a」の値が0の場合は、完全に透明であることを意味します。 –

+0

@ User5842右ですが、なぜ青色の '0,30,255'のrgbですか? – 3zzy

+0

そのピクセルをRGBA値で設定しようとするとどうなりますか? RGB値は依然として '0,30,255 'である可能性があります。単に不透明度の_blueを意味します。 –

答えて

2

の座標を保持する配列を宣言します透明で、その色は無関係になります。まだです。です。

我々はランダムノイズの不透明512x512の画像を作るのであれば、次のように:

convert -size 512x512 xc:gray +noise random a.png 

enter image description here

とそのサイズをチェックし、あなたはそれが1で見ることができます。5メガバイト:それは今、透明性とオリジナルを記憶しているので、あなたは、ファイルを(1.7メガバイトで)大きくなっています見ることができます

convert -size 512x512 xc:gray +noise random -alpha transparent b.png 

[email protected] 1 mark staff 1.5M 26 Oct 09:14 a.png 

私は今、他の点では同じ、透明バージョンを作成した場合ランダムデータ参照するには何もありませんので、私は、画像が表示されません。

[email protected] 1 mark staff 1.7M 26 Oct 09:16 b.png 

を私は今、透明層が完全に不透明にすることができ、ランダムなピクセルが再び見えるようになる - そう、彼らはすべてに沿ってそこにまだあった - 場合でも、画像

convert b.png -alpha opaque c.png 

enter image description here

、しかし、私は再びピクセルを透明にする、AND(その色は無関係であるため)、画像の背景の色にそれらすべてを設定した場合、このような::透明であった

convert -size 512x512 xc:gray +noise random -alpha transparent -alpha background d.png 

[email protected] 1 mark staff 1.8K 26 Oct 09:22 d.png 

そして、すべての(目に見えない/透明)の色が1つの、固体の背景色あるとして、それははるかに良い圧縮しているため、今急に1.5メガバイトのファイルは、1.8Kで約1,000倍小さいです。

座標に関するご質問にお答えします。私たちは、このような小さな画像にすることができます。

convert -size 1x1    \ 
     xc:red xc:cyan +append \ 
    \(xc:yellow xc:magenta +append \) -append a.png 

enter image description here

をそして、このようにそれをダンプ:

convert a.png txt: 

# ImageMagick pixel enumeration: 2,2,65535,srgb 
0,0: (65535,0,0) #FF0000 red 
1,0: (0,65535,65535) #00FFFF cyan 
0,1: (65535,65535,0) #FFFF00 yellow 
1,1: (65535,0,65535) #FF00FF magenta 

そして、そのピクセルが左上隅にImageMagickの開始座標参照してください。

+0

うわー、詳細な説明をくれてありがとう!今すぐ入手してください。 – 3zzy

1

画面/画像上の画素座標系:

任意のピクセルシステムは原点呼ばスクリーン/画像の下左端の点から始まります。ピクセルのマッピングは0番目のインデックスから始まります。 (すなわち、緑の点は(0,0)の座標を有する)。 enter image description here


例:

Green pixel => (0,0) 
Transparent => (1,0) 
Blue => (1,1) 
Red => (0,1) 

あなたが一度にそれぞれの画素を選択する画素の多数を選択し、別の

すなわちを選択するために、座標をインクリメントしません。

大きなピクセルセットを取得する場合は、1つのピクセルでその色を分析し、別のピクセルを選択します。座標を何度も何度も提供しないようにするには、選択したいピクセルの座標を格納するか、ループを作成して特定の領域を選択します。

例:

すべての4つの画素の色を取得したい場合は、(1,1)と(0,0)から座標のループの自動インクリメント値を書き込み、選択されたピクセルの色を取得し、座標を提供次の画素と色を取得(あなたが望むまで繰り返す)

OR

はこれを理解する最も簡単な方法は、画素である場合ということを覚えておくべき所望のピクセルarray => ([0]=> [0,0] [1]=> [0,1]....)

+1

結果は私のものと一致しません。あなたはマッピングが左下から来ているのですか?私はこれを得る: '0,0 =赤; 0,1 =緑; 1,0 =青; 1,1 = transparent'は左上のマッピングを示す。 – 3zzy

+0

はいあなたの声明は正しいです!しかし、私は基本的にC、python、java、PHPでピクセルとコンピュータのグラフィックスを学びました。顔検出のような大きな画像を分析するときは、DEFAULTの左下から数えます。これで、左下か左上かを確認する必要がありますか? –