精确比较页面截图图片

环境:

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

原文地址:https://www.cnblogs.com/sleeping-cat/p/8278567.html

时间: 2024-08-08 12:14:59

精确比较页面截图图片的相关文章

html2canvas页面截图图片不显示

前两天在一个群里,有人问使用html2canvas屏幕截图的时候为什么页面的图片不显示只显示了文字,我没有做过屏幕截图的需求,所以不是很清楚,今天稍稍测试了一下. 在github上将html2canvas源码下载到本地,examples文件夹里有三个示例demo,这三个demo都是纯文字不包含图片的,前两个demo是打开之后直接就生成图片展示出来了,第三个是一个按钮触发生成,这里使用第三个demo来修改进行测试. 一.这是初始页面,上面带有背景颜色的是要截取的部分(id名为'content'),

Python+selenium之截图图片并保存截取的图片

本文转载:http://blog.csdn.net/u011541946/article/details/70141488 http://www.cnblogs.com/timsheng/archive/2012/09/05/2672651.html 介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图.在selenium for Python中主要有三个截图方法,我们挑选其中最常用的一种. 截图技能对于测试人员来说应该是较为重要的一个技能. 在自

nginx实现静态页面,图片分离

nginx(静态页面,图片分离) #vi /usr/local/nginx/conf/nginx.conf user nginx nginx; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream webservs { s

关于利用input的file属性在页面添加图片的问题

在页面添加图片涉及到兼容的问题怎么解决兼容问题呢?请看下面分析: 在IE浏览器上面我们能直接通过获取其input的value值来获取其图片的路径. 在火狐和谷歌需要用createObjectURL((input的元素).files.item(0))来获取其路径: 现在请看代码: css设置样式部分(可以自己设置好看的样式): *{ margin: 0; padding:0; } #img{ width:50px; } .box{ width: 100px; margin:20px auto; }

让页面上图片不变形

很多列表图片的原图超过指定大小,然而图片本身高宽比例不是固定的,因此在设置此类情况时最好的处理方式是使用js来固定图片大小并保证图片居中,且让图片不变形. js代码: 1: /******************************************************************/ 2: /******将图片居中,在图片外面嵌套一个div不设置任何样式*************/ 3: /******参数:图片最大宽度,图片最大高度,******/ 4: /*****

移动设备的HTML页面中图片实现滚动加载

如今移动互联网风靡全球,移动页面的元素也是丰富多彩,一个移动页面的图片超过10张已经是再正常不过的事情了.但是相对,很多移动用户还停留在2G,3G这样的网络中.那么这样带宽的用户,在浏览这样的页面时,要把页面加载完毕,可能就需要10s,20s甚至更多,严重影响用户的体验.针对这样的问题,让页面中的图片滚动加载(图片出现在显示器屏幕上时再加载图片)显得非常重要!这样也可以有效地节省我们服务器的带宽和解决请求大并发的问题. 1.效果图.     这是加载过程中的图片菊花显示            

jquery后台登录页面背景图片自动轮换登录界面代码

在别的网站上看到的比较炫酷的Web登陆界面,背景图片可以自动轮换.介绍给大家,有兴趣的可以下来改改当做自己系统的登陆界面. 如图: 点击下载源代码 jquery后台登录页面背景图片自动轮换登录界面代码

请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出

有些时候需要将二进制图片字节在发送浏览器以图片形式显示: 下面是一些示例代码: 控制器: 1 /// <summary> 2 /// 将图片的二进制字节字符串在视图页面以图片形式输出 3 /// </summary> 4 public class HomeController : Controller 5 { 6 7 public ActionResult Test() 8 { 9 return View(); 10 } 11 12 //方法一: 13 public FileRes

h5页面转图片长按保存

5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 由此,页面转换为图片完成 原文地址:https://www.cnblogs.com/shmily-code/p/9667151.html