0

与えられた画像からコードを作成したいと思います。たとえば、次の画像です。

ここに画像の説明を入力

コードを取得する必要があります111-111-010

(これがpng画像で、バナナ自体を除くすべてのピクセルが透明であるとします。)

特定の正方形のすべてのピクセルが透明な場合、この正方形の値は0、そうでない場合は1です。

したがって、画像が与えられた場合、それを特定のサイズの正方形に分割し (たとえば、バナナの画像は300x300ピクセルで、正方形は100x100)、上記のように構築されたコード (文字列) を作成します。

最も簡単な方法は、おそらく使用each_pixelして、正方形内のすべてのピクセルが透明かどうかを手動で確認することです。より良い方法はありますか?

4

1 に答える 1

0

既存の画像を取得して、その 3x3 サイズに縮小します。

play = image.resize(3, 3, CubicFilter, 0.5)

次に、次を使用して残りの各ピクセルをチェックすることにより、コードを作成できます。

code = ""
(0..2).each do |ix|
  (0..2).each do |iy|
    code += play.pixel_color(ix,iy).opacity == 65535 ? "0" : "1"
    code += iy == 2 ? "-" : "" unless ix == 2 && iy == 2
  end
end

65535透明であることがわかっているピクセルを調べたときに、これが返されたので、不透明度を比較します。

=> red=65535, green=65535, blue=65535, opacity=65535 
于 2012-04-16T03:28:10.987 に答える