精确比较页面截图图片

Posted sleeping_cat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精确比较页面截图图片相关的知识,希望对你有一定的参考价值。

环境:

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

#!usr/bin/env python  
#-*- coding:utf-8 -*-  
""" 
@author:   sleeping_cat
@Contact : [email protected] 
""" 
#精确比较页面截图图片

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()

以上是关于精确比较页面截图图片的主要内容,如果未能解决你的问题,请参考以下文章

Js实现将html页面或div生成图片

图片预加载

VB在图片上添加文字的方法。

爬取思想流程

小程序各种功能代码片段整理---持续更新

Chrome浏览器界面截图