zoukankan      html  css  js  c++  java
  • rqrcode生成的二维码在IE中如何正确的显示

     在rails中生成二维码,由于有现成的gem可用,还是很方便的,基本套路这里就不赘述了,大家有兴趣请参考此文

    按照文中所述,发现在chrome和ff下一切ok,但是在ie下,二维码没有正确的缩放,遍寻网上达人解决方案无果,无奈放弃此方法。

    但是也不愿意使用临时图片文件的方法,并且我调用to_img的时候报错,没有dark? 方法,还未找到原因。看文档的时候发现rqrcode有as_svg的方法,请观察发现其生成的结果去掉xml标记之后就是HTML5 svg标记所需的格式。

    "<?xml version="1.0" standalone="yes"?>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" width="539" height="539" shape-rendering="crispEdges">
    <rect width="11" height="11" x="0" y="0" style="fill:#000"/><rect width="11" height="11" x="11" y="0" style="fill:#000"/><rect width="11" height="11" x="22" y="0" style="fill:#000"/><rect width="11" height="11" x="33" y="0" style="fill:#000"/><rect width="11" ......"
    @qr = RQRCode::QRCode.new( "#{punch_in_url(@punch_in_code)}", :size => 8, :level => :h )
    @qrcode_str = Base64.encode64( @qr.as_svg )
    
    s=@qr.as_svg;
    p=s.index('<svg');    
    @svg = s[p..]

    通过以上代码截取后,即可在html中直接显示svg

    <%= @svg.html_safe %>此时

    此时发现,不能控制其大小,遂用正则替换svg字符串中的宽度和高度数字

    wr = /width="(d+)"/
    hr = /height="(d+)"/
    @svg = @svg.sub(wr, 'width="96"').sub(hr, 'height="96"')

    替换后,发现网页中不是对svg进行了缩放显示,而是只显示了左上角一小块内容。经在网上搜索发现,需要设置其viewbox属性,通俗的说viewbox设置取景范围,width和height设置缩放后的大小。于是修改代码。

        @svg = s[p..]        
        wr = /width="(d+)"/
        hr = /height="(d+)"/
        @svg.match wr
        size = $1.to_i
        
        @svg = @svg.sub(wr,'width="96"').sub(hr,"height="96" viewbox="0 0 #{size} #{size}" ");

    代码中只是取用了width的值,因为二维码生成的是正方形,所以没必要在取高度值。

    到此时已经能够正确缩放大小显示生成的二维码了!

  • 相关阅读:
    第九章 监控系统zabbix深入应用监控
    二叉树的迭代遍历
    .NET程序设计实验2
    大数据分析——sklearn模块安装
    C#实现找二维数组中的鞍点
    Javascript——DOM简介
    前端基础——HTML(一)
    Java基础(一)
    前端基础——CSS(一)
    如何配置网络,使内网和WiFi同时使用
  • 原文地址:https://www.cnblogs.com/dajianshi/p/13207219.html
Copyright © 2011-2022 走看看