如何在RFT中比較兩個影像檔案?
如何在RFT中比較兩個影像檔案?
下面指令碼截獲螢幕影像並儲存到檔案中,然後比較兩個影像檔案:
public void testMain(Object[] args)
{
CaptureScreen.captureScreen("C://tmp1.jpg");
startApp("calc");
計算器window().activate();
CaptureScreen.captureScreen("C://tmp2.jpg");
boolean result = compareImages("C://tmp1.jpg","C://tmp2.jpg");
if(result)
{
System.out.println("The two image are same!");
}
else
{
System.out.println("The two image are different.");
doImageDiff("C://tmp1.jpg","C://tmp2.jpg","C://tmp3.jpg");
}
}
captureScreen的寫法參考:
http://blog.csdn.net/Testing_is_believing/archive/2010/01/23/5247785.aspx
通過比較畫素點的方式比較兩個影像檔案:
public static boolean compareImages(String expectedImage, String actualImage)
{
BufferedImage expected = null, actual = null;
try
{
FileInputStream in = new FileInputStream(expectedImage);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
expected = decoder.decodeAsBufferedImage();
in.close();
in = new FileInputStream(actualImage);
decoder = JPEGCodec.createJPEGDecoder(in);
actual = decoder.decodeAsBufferedImage();
in.close();
}
catch (Exception e) {
System.out.println("Error in BitmapOps#compareImages: error reading images: " + e);
return false;
}
if (expected == null || actual == null)
return false;
if (expected.getHeight() != actual.getHeight() || expected.getWidth() != actual.getWidth())
return false;
for (int y = 0; y < expected.getHeight(); ++y)
{
for (int x = 0; x < expected.getWidth(); ++x)
{
if (expected.getRGB(x, y) != actual.getRGB(x, y))
return false;
}
}
return true;
}
分析出兩個影像檔案不相等的地方,把差異的地方高亮顯示並儲存到影像檔案:
public static void doImageDiff(String expectedImage, String actualImage, String diffImage)
{
BufferedImage expected = null, actual = null;
try
{
FileInputStream in = new FileInputStream(expectedImage);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
expected = decoder.decodeAsBufferedImage();
in.close();
in = new FileInputStream(actualImage);
decoder = JPEGCodec.createJPEGDecoder(in);
actual = decoder.decodeAsBufferedImage();
in.close();
}
catch (Exception e) {
System.out.println("Error in BitmapOps#doImageDiff: error reading images: " + e);
return;
}
try {
BufferedImage difference = new BufferedImage(expected.getWidth(), expected.getHeight(), expected.getType());
if (expected == null || actual == null)
{
System.out.println("Error in BitmapOps#doImageDiff: Expected image or actual image is null");
return;
}
if (expected.getHeight() != actual.getHeight() || expected.getWidth() != actual.getWidth())
{
System.out.println("Error in BitmapOps#doImageDiff: Images are not the same size");
return;
}
for (int y = 0; y < expected.getHeight(); ++y)
{
for (int x = 0; x < expected.getWidth(); ++x)
{
int rgb = expected.getRGB(x, y) - actual.getRGB(x, y);
difference.setRGB(x, y, rgb);
}
}
FileOutputStream out = new FileOutputStream(diffImage);
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(out);
encoder.encode(difference);
out.flush();
out.close();
}
catch (Exception e) {
System.out.println("Error in BitmapOps#doImageDiff: error writing image: " + e);
}
}
相關文章
- PHP中比較兩個時間的大小與日期的差值PHP
- 機器學習中比較重要的幾個概念機器學習
- 在RFT中如何擷取螢幕影像並儲存到檔案中?
- 如何在linux 中合併兩個檔案為一個檔案pasteLinuxAST
- http協議中比較重要的幾個頭HTTP協議
- 檔案和影像比較工具Kaleidoscope
- Kaleidoscope for Mac,檔案影像比較工具Mac
- 用VBS比較兩個Excel檔案的資料Excel
- 兩個coca略有不同詞頻檔案 比較
- 如何在一個.ear檔案中同時包含兩個.war?
- 如何在 Ubuntu 上比較 PDF 檔案Ubuntu
- Mac檔案和影像比較工具:KaleidoscopeMac
- 檔案和影像比較工具:Kaleidoscope MacMac
- Kaleidoscope for Mac(檔案和影像比較工具)Mac
- 比較兩個檔案,求出不同的內容,A-B
- shell指令碼——比較兩個檔案大小、許可權指令碼
- 在Linux中,如何比較兩個檔案差異?Linux
- Java 中比較 BigDecimal 的陷阱JavaDecimal
- Mac檔案和影像比較工具——Kaleidoscope for MacMac
- Mac檔案影像比較工具:Kaleidoscope Mac版Mac
- 在RFT中新增檔案檢查點
- 巧用檔案影像比較工具Kaleidoscope,幫您找出檔案的不同
- .NET CORE下最快比較兩個檔案內容是否相同的方法
- 實用的檔案和影像比較工具:kaleidoscope mac版Mac
- Java 兩個日期比較Java
- java8-Lambda中比較器Comparator的使用Java
- 檔案影像比較工具:Kaleidoscope for Mac v4.2.2啟用版Mac
- 檔案影像比較工具:Kaleidoscope for Mac v4.2.1啟用版Mac
- grep -vFf 比較2個檔案差異
- 關於iOS開發中比較常見的優化iOS優化
- JavaScript比較兩個時間JavaScript
- 比較兩個table是否相同
- 我常用的兩個ORACLE的檔案Oracle
- linux diff比較2個檔案的不同Linux
- 如何在Linux中查詢一個檔案Linux
- 如何在 Linux 中查詢一個檔案Linux
- 比較兩個陣列是否相等陣列
- JavaScript比較兩個時間大小JavaScript