Raphael.js 在ie7,ie8浏览器内绘制图形採用的vml,在绘制image的时候会解析成

<?xml:namespace prefix = "rvml" ns = "urn:schemas-microsoft-com:vml" />
<rvml:shape class=rvml style="HEIGHT: 1px; WIDTH: 1px; POSITION: absolute; LEFT: 0px; FILTER: none; TOP: 0px; VISIBILITY: visible; rotation: 0; flip: " raphael="true" raphaelid="0" coordsize = "21600,21600" stroked = "f" strokecolor = "black" path = " m0,0 l37087200,0,37087200,16912800,0,16912800 xe">
<rvml:stroke class=rvml opacity = "1" miterlimit = "8">
</rvml:stroke><rvml:skew class=rvml on = "t" matrix = "1,0,0,1,0,0" offset = "-.5,-.5"></rvml:skew>
<rvml:fill class=rvml rotate = "t" src = "../123.png" type = "tile" size = "1717,783" position = "0,0"></rvml:fill>
</rvml:shape>

也就是使用vml来绘制图形,在chrome和firfox还有ie8之后都是採用svg来绘制图形。可是这样就会造就一个问题,在window 8系统中默认ie是ie10,然后使用开发人员工具的时候切换ie至ie7 ie8的时候图像会比原来大好多,在xp系统中或者是window 7系统中也会有相同的表现,比如图像错位,真实的点坐标不正确等。

解决的方法:

vml  image size不正确的问题是由于 ie 浏览器对 fill size 单位不清晰造成的,查看mrocsoft文档知道fill使用的单位pt,而非px,图像单位我们获取的一般都是pixel也就是px。

可是1px=1.34pt这就会造成图像变形。

跟踪源代码在Raphael.js  4953行中fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);这里是没有单位,也是罪恶源泉,我们改动成fill.size = _.fillsize[0] * abs(sx) / 1.34 + "pt" + S + _.fillsize[1] * abs(sy) / 1.34 + "pt";一切问题搞得。

结果图例如以下:

After few hours of debug I've figured out that VML implementation is missing measurement points in image tag size definition.

Line number 4952 missing “pt” constant that has to be present in VML tag. So just changing 
fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);

to something like

fill.size = _.fillsize[0] * abs(sx)/1.34 + "pt" + S + _.fillsize[1] * abs(sy)/1.34 + "pt";

附带pt,px等一些单位的转换

  • Pixel↔m   1 m = 3779.5275593333 Pixel
  • Pixel↔dm   1 dm = 377.95275593333 Pixel
  • Pixel↔cm   1 cm = 37.795275593333 Pixel
  • Pixel↔mm   1 mm = 3.7795275593333 Pixel
  • Pixel↔in   1 in = 96 Pixel
  • Pixel↔ft   1 ft = 1152 Pixel
  • Pixel↔Pica   1 Pica = 16 Pixel
  • Pixel↔Point   1 Point = 1.3333333333333 Pixel
  • Pixel↔Twip   1 Pixel = 15 Twip
  • Raphael.js image 在ie8以下的兼容性问题的更多相关文章

    1. svg绘图工具raphael.js的使用

      1.raphael.js svg画图的开源库,支持IE8+ 官方api: http://dmitrybaranovskiy.github.io/raphael/reference.html Githu ...

    2. 学习RaphaelJS矢量图形包--Learning Raphael JS Vector Graphics中文翻译(一)

      (原文地址:http://www.cnblogs.com/idealer3d/p/LearningRaphaelJSVectorGraphics.html) 前面3篇博文里面,我们讲解了一本叫做< ...

    3. 强大的矢量图形库:Raphael JS 中文帮助文档及教程

      Raphael 是一个用于在网页中绘制矢量图形的 Javascript 库.它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出 ...

    4. CSS HACK区别IE6、IE7、IE8、Firefox兼容性

      相信不少人,都特别清楚CSS HACK,而其中也是区别IE6.IE7.IE8.Firefox兼容性问题用的,CSS hack由于不同的浏览器,对CSS的解析认识不一样,因此会导致生成的页面效果不一样. ...

    5. Raphael Js矢量库API简介:

      Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...

    6. PHP+Mysql+jQuery实现中国地图区域数据统计(raphael.js)

      使用过百度统计或者cnzz统计的童鞋应该知道,后台有一个地图统计,不同访问量的省份显示的颜色也不一样,今天我将带领大家开发一个这样的案例.上一篇<使用raphael.js绘制中国地图>文章 ...

    7. Javascript实战开发:教你使用raphael.js绘制中国地图

      最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作.在本文中,我给大 ...

    8. raphael.js 给元素 hover 添加glow() 外发光

      用raphael.js 给 svg画布里面添加个元素,嗯就圓好了,男人一般都喜欢圆形的东西,比如xx ,  xxx , 还有xxx $(document).ready(function() { var ...

    9. IE6、IE7、IE8、Firefox兼容性

      整理关于IE6.IE7.IE8.Firefox兼容性CSS HACK问题 1.区别IE和非IE浏览器CSS HACK代码 #divcss5{background:blue; /*非IE 背景藍色*/b ...

    随机推荐

    1. springboot运行模式

      1.springboot项目常见的运行方式:  2.说明: idea:在开发环境中跑项目,也就是我们在编码过程中的用的做多的方式 jar.war:线上.服务器上执行jar.war包的方式 maven插 ...

    2. Xamarin.Forms android实现沉浸式

      在android项目里,这样设置 using System; using Android.App; using Android.Content.PM; using Android.Runtime; u ...

    3. 浅谈FFC

      FFC(Flexible Formatting Context) CSS3引入了一种新的布局模型——flex布局(之前有文章介绍过).flex是flexible box的缩写,一般称之为弹性盒模型.和 ...

    4. ThinkPHP---thinkphp视图(V)

      配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...

    5. 第三节:EF

      1.删除要进行判空 public ActionResult DelClassMethod(string gId) { //根据gId查询对应条目 var grade = oc.BllSession.I ...

    6. 参考整理papers(一)

      https://blog.csdn.net/qq_14845119/article/details/82219246 整理了OCR的论文,可以参考一下.还有一些相关论文 论文(poster):Scen ...

    7. Python之list、tuple、dict、set

      参考原文 廖雪峰Python PS:来看看Python中比较特殊的几种数据类型list.tuple.dict.set list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集 ...

    8. poj2352 Stars【树状数组】

      Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

    9. 剑指offer---最小的K个数

      题目:最小的K个数 要求:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. class Solution { public: ...

    10. keepalived(nginx的高可用)安装文档

      1. 安装环境 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y install popt-devel yu ...