0

我只是在谷歌上搜索下面的代码,了解如何比较两个为使用 Selenium Java而编写的图像。但是,我需要像下面的方式比较图像文件,但在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 。安装 gemJAVA_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的频繁加载/卸载。

或者您可以使用一些 Ruby 库,例如RMagick。请参阅文档,尤其是RMagick::ImageListRMagick::ImageRMagick::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 回答