麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > HTML > 正文

Canvas實現保存圖片到本地的示例代碼

2024-08-26 00:20:47
字體:
來源:轉載
供稿:網友

一、簡介

需求: 將HTML5的內容保存為圖片
思路: 通過Canvas繪圖生成base64圖片,長按即可保存到本地
問題: canvas禁止跨域、安卓微信長按不能保存base64圖片、服務器拉取的圖片被壓縮

二、具體問題

問題1:canvas是禁止跨域的,如果圖像來自其他域,調用toDataURL()會拋出一個錯誤

Canvas,保存圖片,代碼

解決:<img>標簽通過引入 crossorigin 屬性能解決跨域, 即crossOrigin="Anonymous" 或 crossOrigin="*"  請注意手q環境下設置 ‘Anonymous’不支持,需要設置為 '*',如果使用 crossorigin="anonymous",則相當于匿名 CORS

問題2:設置了”crossOrigin”的<img>標簽不能拉下跨域的圖片,無法觸發img.onload

Canvas,保存圖片,代碼

解決: 后臺轉發或nigix代理,設置Access-Control-Allow-Origin:“wx.qlogo.cn”,允許靜態資源服務器圖片跨域這種設置 解決獲取圖片跨域的問題。(此處圖片為用戶頭像域名wx.qlogo.cn,存在跨域問題)

Canvas,保存圖片,代碼

Canvas,保存圖片,代碼

問題3:安卓手機微信h5長按不能保存base64圖片

解決:將canvas繪制的base64圖片上傳到服務器上,再從服務器上獲取到png(jpg)圖片。這種做法較麻煩,后面還需要找方法改進。

問題4:上傳到服務器的圖片壓縮嚴重

解決:上傳的圖片會在服務器有幾個資源,壓縮度不一,從目錄 'http://img10.360buyimg.com/promotepic/' 可拿到像素較清晰的圖片。

問題5:繪制的二維碼鏈接(//wqs.jd.com/xxx)長按不能直接進入頁面

解決:指定要繪制的二維碼鏈接一定要加上http: 否則二維碼將識別為文字

//canvas繪制部分代碼:var picurl = "http://wx.qlogo.cn/mmopen/OicsrgN57fqDxImI3icnMeSXRfVUQRueHcxRRuWG0O1Ea1bNyBPKKKLeq5FiaXFWOdsltVe1R1PtJ2EtsDHYDjHgQ/0";   var img = new Image,    canvas = document.createElement("canvas"),    ctx = canvas.getContext("2d"),      //后臺nigix代理 參見問題2      src = picurl.replace("http://wx.qlogo.cn","//wq.jd.com");      //解決 canvas 跨域 toDataURL不能讀取問題 參見問題1      img.crossOrigin = "Anonymous";      //圖片資源的預加載       img.onload = function() {             canvas.width = img.width;            canvas.height = img.height;             ctx.drawImage( img, 0, 0 );            //將畫好的base64圖片             localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );      }       img.src = src;

上傳圖片部分代碼:

// 上傳圖片 參見問題3$.ajax({    type: 'POST',    url:  loadJs.addToken('http://wq.jd.com/activetmp/promotepic/promoteaddpic', "j132"),    data: {        filename: new Date().getTime()+''+Math.floor(Math.random()*10000) + '.jpg',        content: base64pic,        active: "shotpic20160901"    },    dataType: 'json',    xhrFields: { withCredentials: true },    success: function(data) {                           if (picdata.id == 1 && picdata.msg) {                                    //圖片路徑 此前綴路徑的圖片最清晰 參見問題4                                    var imgPre = 'http://img10.360buyimg.com/promotepic/';                                    //圖片地址拼接的完整地址鏈接                                    var photo = imgPre + picdata.msg;                                    $("#cardImg")[0].onload = function() {                                             //to do 業務邏輯                                    };                                    $("#cardImg").attr("src",photo);                           }    },    error:function(data){    }});

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲va久久久噜噜噜久牛牛影视 | 大号bbwassbigav头交 | 欧美成人一级 | 素人视频免费观看 | 欧美成人一区二区三区电影 | 久久久久久久久久久高潮一区二区 | 欧美性生活久久久 | 中文字幕电影免费播放 | 久久精品久久精品国产大片 | 欧美不卡视频在线观看 | 综合精品一区 | av国语| 国产手机国产手机在线 | 国产交换3p国产精品 | 成人毛片在线免费观看 | 欧美综合在线观看视频 | 99爱福利视频在线观看 | teensexhd| 精品一区二区亚洲 | 欧美日韩免费一区 | 最新中文字幕第一页视频 | 99这里有精品 | 亚洲视频精品在线 | 成人在线网站 | 泰剧19禁啪啪无遮挡大尺度 | 日本不卡一区二区三区在线 | 成人免费激情视频 | 久久综合久久综合久久 | 免费在线观看亚洲 | 久久成年网 | 久久久www成人免费毛片 | 欧美成人精品欧美一级 | 免费a视频在线观看 | 久久我不卡 | 看免费毛片 | 亚州欧美在线 | 九九热精| 欧美日韩爱爱视频 | 毛片在线视频观看 | 欧美精品欧美极品欧美激情 | 日本成人二区 |