• 精确比较页面截图图片


    环境:

           打开CMD窗口,输入pip install pillow安装Python图像处理库,安装结束后在CMD下进入Python交互模式,执行from PIL import Image,没有报错则安装成功。

    #!usr/bin/env python  
    #-*- coding:utf-8 -*-  
    """ 
    @author:   sleeping_cat
    @Contact : zwy24zwy@163.com 
    """ 
    #精确比较页面截图图片
    
    from selenium import webdriver
    import unittest,time
    from PIL import Image
    
    class ImageCompare(object):
        '''
        本类实现了对两张图片通过像素对比的算法,获取文件的像素个数大小
        然后使用循环的方式将两张图片的所有项目进行一一对比
        并计算比对结果的相似度的百分比
        '''
        def make_regalur_image(self,img,size = (256,256)):
            #将图片尺寸强制重置为指定的size大小,然后再将其转换成RGB值
            return img.resize(size).convert('RGB')
    
        def split_image(self,img,part_size = (64,64)):
            #将图片按给定大小切分
            w,h = img.size
            pw,ph = part_size
            assert w % pw ==h % ph == 0
            return [img.crop((i,j,i + pw,j + ph)).copy() 
                    for i in range(0,w,pw) for j in range(0,h,ph)]
    
        def hist_similar(self,lh,rh):
            #统计切分后每部分图片的相似度频率曲线
            assert len(lh)  == len(rh)
            return sum(1 - (0 if l == r else float(abs(1 - r)) / max(1,r)) 
                       for l,r in zip(lh,rh)) / len(lh)
    
        def calc_similar(self,li,ri):
            #计算两张图片的相似度
            return sum(self.hist_similar(l.histogram(),r.histogram())
                       for l,r in zip(self.split_image(li),self.split_image(ri)))/16.0
    
        def calc_similar_by_path(self,lf,rf):
            li,ri = self.make_regalur_image(Image.open(lf)),
                    self.make_regalur_image(Image.open(rf))
            return self.calc_similar(li,ri)
    
    class TestDemo(unittest.TestCase):
        def setUp(self):
            self.IC = ImageCompare()
            self.driver = webdriver.Firefox()
    
        def test_ImageComparison(self):
            url = 'http://www.sogou.com'
            self.driver.get(url)
            time.sleep(3)
            self.driver.save_screenshot('e:\image\sogou1.png')
            self.driver.get(url)
            time.sleep(3)
            self.driver.save_screenshot('e:\image\sogou2.png')
            #打印两张截图比对后的相似度,100表示完全匹配
            print(self.IC.calc_similar_by_path
                  ('e:\image\sogou1.png','e:\image\sogou2.png')*100)
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    hudson搭建经验总结(二)
    CodePen最佳实例分享
    hudson搭建经验总结
    资料文件夹管理系统
    ueditor+word图片上传
    asp.net上传大文件
    UEditor粘贴word
    大文件上传组件
    文件资源管理系统
    ueditor+复制word图片粘贴上传
  • 原文地址:https://www.cnblogs.com/sleeping-cat/p/8278567.html
Copyright © 2020-2023  润新知