校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解FireFox下Canvas使用圖像合成繪制SVG的Bug

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

熱門標簽:會聲會影怎樣做地圖標注效果 江蘇高頻外呼系統線路 標準智能外呼系統 洛陽市伊川縣地圖標注中心官網 搜狗星級酒店地圖標注 電銷機器人視頻 地圖標注自己去過的地方 高德地圖標注錯誤怎么修改 平頂山電子地圖標注怎么修改

本文適合適合對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);
        }

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

標簽:果洛 阿克蘇 蚌埠 廣東 鄂爾多斯 廣西 常德 松原

巨人網絡通訊聲明:本文標題《詳解FireFox下Canvas使用圖像合成繪制SVG的Bug》,本文關鍵詞  詳解,FireFox,下,Canvas,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解FireFox下Canvas使用圖像合成繪制SVG的Bug》相關的同類信息!
  • 本頁收集關于詳解FireFox下Canvas使用圖像合成繪制SVG的Bug的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产成人日日夜夜| 日韩国产精品久久| 欧美videos大乳护士334| 欧美日韩一区二区在线观看视频| 国产精品免费aⅴ片在线观看| 日本精品视频一区二区| 欧美一区二区视频网站| 国产喷白浆一区二区三区| 一区二区三区成人在线视频| 水野朝阳av一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 亚洲成年人网站在线观看| 日韩电影免费一区| 国产精品亚洲一区二区三区在线| 成人午夜免费电影| 色视频成人在线观看免| 欧美日韩国产首页| 日韩免费高清av| 久久精品人人做人人综合| 国产精品成人网| 日韩中文字幕亚洲一区二区va在线 | 欧美猛男超大videosgay| 久久嫩草精品久久久精品| 一区二区三区**美女毛片| 五月天网站亚洲| 亚洲欧洲精品成人久久奇米网| 亚洲一区视频在线| 国产白丝网站精品污在线入口| 日韩一区二区三区四区| 国产激情偷乱视频一区二区三区| 2023国产一二三区日本精品2022| 亚洲人妖av一区二区| 久久国产精品色| 色综合久久九月婷婷色综合| 日韩视频免费观看高清完整版| 亚洲日本中文字幕区| 亚洲欧洲日韩在线| 亚洲视频电影在线| 99精品黄色片免费大全| 欧美一区二区三区婷婷月色| 国产精品欧美久久久久一区二区 | 国产精品视频免费| 亚洲色图欧美激情| 国产永久精品大片wwwapp| 欧美日本不卡视频| 尤物av一区二区| 欧美日韩国产综合草草| 国产精品亚洲专一区二区三区 | 日韩黄色一级片| 色综合av在线| 国产精品少妇自拍| 狠狠色2019综合网| 日韩欧美国产一区二区在线播放 | 欧美嫩在线观看| 伊人开心综合网| 成人97人人超碰人人99| 欧美精品一区二区高清在线观看| 午夜精品久久久久久久蜜桃app| 97精品超碰一区二区三区| 国产欧美精品一区| 国产精品一区一区| 久久影院午夜片一区| 久久99国产精品久久99果冻传媒| 欧美日韩国产综合视频在线观看| 91在线看国产| 亚洲天堂中文字幕| 欧美无砖专区一中文字| 午夜精品久久一牛影视| 欧美精品一区二区三区四区| 精品一区中文字幕| 国产日韩av一区| 欧美中文字幕不卡| 性感美女极品91精品| 欧美日韩国产a| 国产精品18久久久久| 国产精品久久久久精k8| 国产二区国产一区在线观看| 久久久久久久久一| 国产另类ts人妖一区二区| 日韩欧美专区在线| 天天综合网天天综合色| 欧美久久婷婷综合色| 日韩精品乱码av一区二区| 555夜色666亚洲国产免| 亚洲成人免费在线| 亚洲国产电影在线观看| 欧美视频一区二区| 成人一区二区三区在线观看| 亚洲国产综合色| 国产精品麻豆99久久久久久| 91福利国产精品| 国产成人aaa| 久久成人免费网站| 亚洲一区日韩精品中文字幕| 久久精品免视看| 日韩欧美色综合网站| 色婷婷一区二区| 国产精品一区免费在线观看| 免费美女久久99| 美女视频黄免费的久久| 久久久久成人黄色影片| 欧美放荡的少妇| 91精品欧美综合在线观看最新| 欧美电影精品一区二区| 日韩女优电影在线观看| 91国偷自产一区二区三区观看| 日日骚欧美日韩| 亚洲一区欧美一区| 亚洲黄色在线视频| 久久精品国产99久久6| 正在播放一区二区| 极品美女销魂一区二区三区| 色伊人久久综合中文字幕| 偷拍亚洲欧洲综合| 国产日本亚洲高清| 在线视频综合导航| 国产综合色视频| 一区二区三区国产精华| 欧美电视剧免费全集观看| 99久久99久久免费精品蜜臀| 亚洲成av人片www| 在线观看www91| 欧美日韩在线播| 3d成人h动漫网站入口| 日韩一卡二卡三卡四卡| 日韩精品一区二区三区在线 | 17c精品麻豆一区二区免费| 日韩欧美www| 一区二区免费看| 欧美最新大片在线看| 亚洲蜜臀av乱码久久精品| 粉嫩aⅴ一区二区三区四区| 亚洲va欧美va人人爽午夜| 国产亚洲一二三区| 欧美色图激情小说| 成人午夜在线视频| 美女在线视频一区| 亚洲精品久久久蜜桃| 2023国产精华国产精品| 欧美亚洲免费在线一区| 国产成人av一区二区三区在线观看| 婷婷久久综合九色综合伊人色| 亚洲国产激情av| 精品免费日韩av| 欧美日韩亚洲国产综合| 91最新地址在线播放| 美女网站视频久久| 亚洲黄色性网站| 国产精品蜜臀av| 久久一区二区三区四区| 欧美精品自拍偷拍动漫精品| 91蜜桃在线免费视频| 国产在线不卡一卡二卡三卡四卡| 香蕉成人伊视频在线观看| 亚洲欧洲日韩av| 国产欧美日韩在线看| 精品欧美乱码久久久久久1区2区 | 综合欧美一区二区三区| 久久久精品国产99久久精品芒果 | 国产一区二区在线观看视频| 香蕉av福利精品导航| 一区二区三区在线影院| 日韩一区在线免费观看| 国产亚洲精品bt天堂精选| 精品免费一区二区三区| 91精品久久久久久久99蜜桃| 91精品国产一区二区| 亚洲视频免费在线| 欧美久久久久久久久中文字幕| 国内久久精品视频| 日韩欧美国产三级电影视频| 亚洲成人av一区| 欧美三级三级三级| 午夜欧美在线一二页| 色综合久久中文字幕| 国产精品丝袜黑色高跟| 国产成人在线免费观看| 中文字幕av一区二区三区 | 中文字幕成人av| 国内精品第一页| 偷窥国产亚洲免费视频| 婷婷开心久久网| 日韩av网站免费在线| 奇米一区二区三区| 久久99久久久久久久久久久| 久久精品国产免费看久久精品| 国产真实乱子伦精品视频| 久久久久久久久久久电影| 激情久久五月天| 国产精品久久久久久久久快鸭| 成人动漫一区二区| 一区二区免费看| 精品久久五月天| 91原创在线视频| 老司机一区二区| 最近中文字幕一区二区三区| 欧美色精品在线视频| 麻豆91免费观看| 亚洲美女免费在线| 久久久久久久久免费|