亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 擴展 > SVG > 正文

詳解FireFox下Canvas使用圖像合成繪制SVG的Bug

2024-09-06 19:57:12
字體:
來源:轉載
供稿:網友

本文適合適合對canvas繪制、圖形學、前端可視化感興趣的讀者閱讀。

楔子

所有的事情都會有一個起因。

最近產品上需要做一個這樣的功能:給一些圖形進行染色處理。想想這還不是順手拈來的事情,早就研究過圖形染色的技術。于是我把之前寫好的兩種算法發給了小伙伴,讓他參照實現,第一種算法是操縱像素、第二種使用了圖像合成:globalCompositeOperation。

所有的事情都可能會有意外,寫程序更是如此了。

沒多久,小伙伴說,第二種算法在firefox下不起作用。

探索原因

聽說有bug,心中一驚。我測試過了的,FireFox下面也測試過的。于是我打開火狐瀏覽器,啟動示例,發現是好的,沒有問題。

但是小伙伴集成到產品中就有問題。 差別在哪兒呢? 通過一起排查,最終發現我的示例代碼和產品中代碼的一個區別是:示例代碼用的是png圖片,而產品中用的是svg圖片。

難道是svg圖片的問題,拿一個svg圖片放到示例代碼中,果然不對。結論已經明顯:

FireFox瀏覽器下,用Canvas下繪制繪制SVG圖的時候,globalCompositeOperation的設置將不生效。

下面是一段用于測試的代碼,ctx.globalCompositeOperation = 'destination-out' 表示用源圖像的形狀去挖空目標圖像。

在其他瀏覽器中,以下代碼中是生效的,又挖空的效果。但是在

在FireFox 下不生效:

<html><head>    <script>        function init() {            var canvas = document.getElementById('c');            var ctx = canvas.getContext('2d');            var img = new Image();            img.onload = function () {                ctx.drawImage(img, 0, 0, img.width * 2, img.height * 2);                ctx.globalCompositeOperation = 'destination-out';            }            img.src = 'diffuse.png';            var svg = new Image;            svg.src = "./d.svg";                                function drawPoint(pointX, pointY) {                ctx.drawImage(svg, pointX - svg.width / 4, pointY - svg.height / 4, svg.width / 2, svg.height / 2);            }            canvas.addEventListener('click', function (e) {                drawPoint(e.clientX, e.clientY);            }, false);        }    </script></head><body onload="init();" style="background: red">    <div>        <canvas id="c" width="1000" height="1000"></canvas>    </div></body></html>

如何解決

找到問題的原因了,解決方法其實簡單。

事情往往就是這樣,很多時候,找到問題所在往往比解決問題要難。

解決方案其實很簡單

代碼中加入判斷,判斷瀏瀏覽器是否是FireFox。

如果是,則先把svg圖片繪制到臨時的canvas上面。

后續繪制用臨時的canvas替代svg圖片。

比如上面代碼可以改進如下:

function init() {            var canvas = document.getElementById('c');            var ctx = canvas.getContext('2d');            var img = new Image();            img.onload = function () {                ctx.drawImage(img, 0, 0, img.width * 2, img.height * 2);                ctx.globalCompositeOperation = 'destination-out';            }            img.src = 'diffuse.png';            var svg = new Image;            svg.src = "./d.svg";                              var tempCanvas = svg;                           if(isFirefox){                             svg.onload = function(){                                  tempCanvas = document.createElement('canvas');                                tempCanvas.width = svg.width;                                tempCanvas.height = svg.height;                                var tempCtx = tempCanvas.getContext('2d');                                tempCtx.drawImage(svg,0,0,svg.width,svg.height);                             }                                    }                                  function drawPoint(pointX, pointY) {                                            ctx.drawImage(tempCanvas, pointX - svg.width / 4, pointY - svg.height / 4, svg.width / 2, svg.height / 2);            }            canvas.addEventListener('click', function (e) {                drawPoint(e.clientX, e.clientY);            }, false);        }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人亚洲激情网| 亚洲第一男人av| 欧美日韩国产91| 成人久久18免费网站图片| 亚洲欧美日韩一区二区在线| 久久五月情影视| 992tv成人免费影院| 欧美精品情趣视频| 欧美高跟鞋交xxxxxhd| 欧美激情国产日韩精品一区18| 国产精品99蜜臀久久不卡二区| 亚州国产精品久久久| 国产性色av一区二区| 亚洲精品中文字| 久久精品国产电影| 日韩暖暖在线视频| 日韩av在线影院| 国产综合香蕉五月婷在线| 神马国产精品影院av| 日韩美女免费观看| 欧美在线视频观看免费网站| 北条麻妃一区二区在线观看| 最近2019中文字幕第三页视频| 久久人人爽人人爽爽久久| 欧美裸体xxxx极品少妇| 成人av.网址在线网站| 91av福利视频| 国产精品扒开腿做爽爽爽的视频| 国产精品久久久久久av福利软件| 国产精品久久久久7777婷婷| 亚洲高清一二三区| 日韩精品免费一线在线观看| www.日韩系列| 亚洲精品中文字| 国产亚洲欧美aaaa| 国产亚洲xxx| 综合欧美国产视频二区| 久久成人精品视频| 日本一区二区三区在线播放| 久久精品中文字幕一区| 欧美激情在线观看| 欧美一级成年大片在线观看| 国产v综合v亚洲欧美久久| 国产成+人+综合+亚洲欧美丁香花| 国产美女91呻吟求| 一区二区三区久久精品| 清纯唯美亚洲综合| 九九精品在线视频| 77777少妇光屁股久久一区| 亚洲成人av在线| 91精品国产自产在线| 最近2019中文字幕第三页视频| 亚洲欧美999| 欧美日韩成人在线视频| 欧美超级免费视 在线| 国产精品久久久久久中文字| 欧美大胆a视频| 国内免费精品永久在线视频| 日韩av在线影院| 久久精品久久久久久国产 免费| 亚洲电影天堂av| 在线观看久久av| 日韩禁在线播放| 亚洲电影免费观看高清完整版| 色妞在线综合亚洲欧美| 日韩欧亚中文在线| 97国产精品久久| 亚洲人成电影网站色| 欧美电影免费观看高清完整| 91精品久久久久久久久久久| 日韩电影中文字幕av| 91久久精品日日躁夜夜躁国产| 欧美激情在线有限公司| 国产精品成人一区二区三区吃奶| 国产欧美中文字幕| 欧美午夜精品久久久久久人妖| 日韩免费av片在线观看| 精品久久中文字幕| 亚洲男人7777| 久久精品视频播放| 色老头一区二区三区| 91久久久国产精品| 国产成人avxxxxx在线看| 26uuu亚洲伊人春色| 中文字幕欧美精品日韩中文字幕| 欧美xxxx18性欧美| 一本色道久久综合狠狠躁篇怎么玩| 欧美日韩美女在线| 欧美日韩中文在线观看| 日韩精品极品视频免费观看| 久久久噜久噜久久综合| 欧美极品第一页| 国产亚洲精品久久久久动| 国产精品夜色7777狼人| 国产精品一区二区电影| 人妖精品videosex性欧美| 精品久久久国产精品999| 91av视频在线播放| 国产又爽又黄的激情精品视频| 亚洲人成电影网站色…| 日韩av手机在线看| 国内精久久久久久久久久人| 日韩最新免费不卡| 国产成人精品日本亚洲专区61| 国产成人精品久久二区二区| 久久人体大胆视频| 久久精品视频亚洲| 国产自产女人91一区在线观看| 九九热精品视频在线播放| 九九热视频这里只有精品| 亚洲国产精品yw在线观看| 91久久在线视频| 国产精品美乳一区二区免费| 久久在线观看视频| 国产a级全部精品| 国产精品入口日韩视频大尺度| 精品国内自产拍在线观看| 日韩精品福利网站| 欧洲亚洲女同hd| 最新91在线视频| 视频一区视频二区国产精品| 亚洲天天在线日亚洲洲精| 668精品在线视频| 亚洲国产精品高清久久久| 欧美日韩美女视频| 欧美理论电影网| 日韩av理论片| 国产精品精品久久久久久| 久久亚洲精品毛片| 亚洲国产精品免费| 欧美成人自拍视频| 国产精品一香蕉国产线看观看| 欧美成年人视频| 中文字幕不卡在线视频极品| 欧美精品在线视频观看| 久久亚洲综合国产精品99麻豆精品福利| 国产精品普通话| 国产成人拍精品视频午夜网站| 久久亚洲综合国产精品99麻豆精品福利| 欧美日韩国产专区| 国精产品一区一区三区有限在线| 91久久精品美女高潮| 一区二区三区四区在线观看视频| 亚洲日本aⅴ片在线观看香蕉| 91美女片黄在线观| 视频一区视频二区国产精品| 日韩激情第一页| 日韩毛片在线看| 久久久最新网址| 91av在线影院| 粉嫩老牛aⅴ一区二区三区| 欧美黄色片视频| 伊人一区二区三区久久精品| 国产成人免费av电影| 国外成人在线视频| 欧美亚洲伦理www| 国产日产欧美a一级在线| 国产精品女主播| 日韩成人av网址| 日韩在线观看网址| 成人h片在线播放免费网站| 欧美性猛交xxxx乱大交极品| 日本精品视频在线观看| 久久99精品久久久久久青青91|