4

resize_to_fill を [1,1] サイズまで使用して、基本的に画像全体の平均色を含む単一のピクセルに画像を縮小しました (もちろん、画像の高さと幅の間に大きな差異がない場合)。 . 今、この単一ピクセルの色を 16 進形式で取得しようとしています。

ターミナル ウィンドウから、次のような変換コマンドを実行できます。

convert image.png txt:
# ImageMagick pixel enumeration: 1,1,255,rgb
0,0: (154,135,116) #9A8774 rgb(154,135,116)

ただし、画像が属するモデルの before_save セクションで、アプリケーション内からこのコマンドを実行する方法がわかりません。画像はキャリアウェーブを使用してアップロードおよび添付されます

これまでのところ、画像を取得しました:

image = MiniMagick::Image.read(File.open(self.image.path))

しかし、ここから先に進む方法がよくわかりません。

4

3 に答える 3

7

pixel_at次のようなメソッドを追加できます。

module MiniMagick
  class Image
    def pixel_at(x, y)
      case run_command("convert", "#{escaped_path}[1x1+#{x}+#{y}]", "-depth 8", "txt:").split("\n")[1]
      when /^0,0:.*(#[\da-fA-F]{6}).*$/ then $1
      else nil
      end
    end
  end
end

そして、次のように使用します。

i = MiniMagick::Image.open("/path/to/image.png")
puts i.pixel_at(100, 100)

出力:

#34555B
于 2012-01-17T12:26:56.163 に答える