0

Selenium Javaで動作するように書かれた2つの画像を比較する方法について、以下のコードをグーグルで調べています。ただし、以下のようにRuby Selenium で画像ファイルを比較する必要があります。Ruby Seleniumの getData()、getNumBands()、getWidth()、getHeight()、getSample()と同等のメソッドを教えてください。どうもありがとう。

 try {
   original = ImageIO.read(new File(
     "originalFile"));
   copy = ImageIO.read(new File("copyFile"));

   ras1 = original.getData();
   ras2 = copy.getData();
//Comparing the the two images for number of bands,width & height.
   if (ras1.getNumBands() != ras2.getNumBands()
     || ras1.getWidth() != ras2.getWidth()
     || ras1.getHeight() != ras2.getHeight()) {
      ret=false;
   }else{
   // Once the band ,width & height matches, comparing the images.

   search: for (int i = 0; i < ras1.getNumBands(); ++i) {
    for (int x = 0; x < ras1.getWidth(); ++x) {
     for (int y = 0; y < ras1.getHeight(); ++y) {
      if (ras1.getSample(x, y, i) != ras2.getSample(x, y, i)) {
     // If one of the result is false setting the result as false and breaking the  loop.
       ret = false;
       break search;
      }
4

1 に答える 1

1

rjbを試すことができます。ホームページで説明されているようにgem をインストールしJAVA_HOMELD_LIBRARY_PATH設定すると、次のような Java メソッドを呼び出すことができます。

require 'rjb'

Rjb::load(classpath = '.', jvmargs=[])

JImageIO = Rjb::import('javax.imageio.ImageIO')
JFile = Rjb::import('java.io.File')

original = JImageIO.read(JFile.new('a.jpg'))
ras1 = original.getData
puts ras1.getNumBands    #=> 3
puts ras1.getWidth       #=> 440
puts ras1.getHeight      #=> 322
puts ras1.getSample(0, 0, 0)  #=> 255

スクリプトをデーモンとして記述し、プロセス通信を介してイメージ比較結果を照会して、JVM の頻繁なロード/アンロードを回避できます。

または、 RMagickなどの Ruby ライブラリを使用することもできます。ドキュメント、特にRMagick::ImageListRMagick::Image、およびRMagick::Pixelのドキュメントを参照してください。

コードは次のようなものかもしれません (私はテストを行いませんでした):

require 'RMagick'

original = RMagick::ImageList.new('a.jpg')   # ImageList
ras1 = original[0]   # Image
ras1.rows            # Height in pixels
ras1.columns         # Width in pixels
ras1.colorspace
ras1.matte           # colorspace and matte => getNumBands
ras1[0][1].red       # ras1.getSample(0, 1, 0)
ras1[0][1].green     # ras1.getSample(0, 1, 1)
ras1[0][1].blue      # ras1.getSample(0, 1, 2)
ras1[0][1].opacity   # ras1.getSample(0, 1, 3) useless when matte is false
于 2013-05-31T14:03:43.453 に答える