關(guān)于Canvas保存為圖片

var canvas = document.querySelector("#canvas");
var strDataURI = canvas.toDataURL("image/jpeg");

這就是獲取數(shù)據(jù)的方法,網(wǎng)上都很多這樣的代碼。但是,如何保存呢?

1.保存圖片

可以以流的方式保存下來(lái),親測(cè)可行。

var canvas = document.querySelector("#canvas");
var strDataURI = canvas.toDataURL("image/jpeg");
var image=strDataURI.replace("image/jpeg", "image/octet-stream");
window.location.href=image;

但是在webapp該方法是不行的,默認(rèn)是不支持的。一種方法是在android的java代碼寫(xiě)js接口,而一個(gè)純webapp,確是很難做到(其實(shí)也不是),只不過(guò)找了大半天,都沒(méi)找到。

2.webapp支持保存圖片

相關(guān)依賴:

  • angularjs
  • cordova
  • cordova-plugin-file(插件)
cordova plugin add cordova-plugin-file

資料:圖片base64與blob互轉(zhuǎn)

當(dāng)然這個(gè)也適合其他保存文件的插件,這里關(guān)鍵的技術(shù)就是dataURItoBlob(),可以將base64編碼的字符串轉(zhuǎn)化為二進(jìn)制。

...
function errorHandler(err) {
    console.info(err);
}

    /** 
* base64 轉(zhuǎn) blob 對(duì)象,文件上傳
* @param dataURI 
* @returns {Blob} 
*/  
function dataURItoBlob(dataURI) {  
    var byteString = atob(dataURI.split(',')[1]);  
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];  
    var ab = new ArrayBuffer(byteString.length);  
    var ia = new Uint8Array(ab);  
    for (var i = 0; i < byteString.length; i++) {  
        ia[i] = byteString.charCodeAt(i);  
    }  
    return new Blob([ab], {type: mimeString});
}  

//保存到本地
function saveFile(dirEntry, image, filename) {
    console.info(image);
    //創(chuàng)建文件
    dirEntry.getFile(filename, { create: true }, function (fileEntry) {
        fileEntry.createWriter(function (fileWriter) {
            fileWriter.onwriteend = function (info) {
                console.log('保存成功',info);
            }
            fileWriter.onerror = function (err) {
                console.error('寫(xiě)入文件失?。? + err.toString());
            }
            var dataObj = dataURItoBlob(image);
            fileWriter.write(dataObj);
        });
    }, errorHandler);
}

$scope.imageExportCordova = function(dirEntry){
    var canvas = document.querySelector("#canvas");
    if(!canvas)return;
    var strDataURI = canvas.toDataURL("image/jpeg");
    var backupFilename = 'exapmle.jpg';
    saveFile(dirEntry, strDataURI, backupFilename);
};

$scope.imageExport = function() {//導(dǎo)出函數(shù),調(diào)用這里就夠了
    window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (dirEntry) {
        $scope.imageExportCordova(dirEntry);
    }, errorHandler);
}
...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前些日子從@張?chǎng)涡裎⒉┨幍靡环萃扑](Front-end-tutorial),號(hào)稱最全的資源教程-前端涉及的所有知識(shí)...
    谷子多閱讀 4,493評(píng)論 0 44
  • 大部分的后端會(huì)很很鄙視前端。我也不知道為什么,可能大部分人都會(huì)覺(jué)得腳本語(yǔ)言根本不算語(yǔ)言。 大多人 會(huì)叫我們切圖仔,...
    小黑的眼閱讀 3,610評(píng)論 0 15
  • Description 對(duì)于吃貨來(lái)說(shuō),過(guò)年最幸福的事就是吃了,沒(méi)有之一!但是對(duì)于女生來(lái)說(shuō),卡路里(熱量)是天敵?。?..
    Gadore千里閱讀 1,876評(píng)論 0 0
  • 作為資深的數(shù)學(xué)學(xué)渣,我其實(shí)不太清楚為什么要學(xué)函數(shù),代數(shù)和幾何,現(xiàn)在拿本數(shù)學(xué)書(shū),我連其中的好多符號(hào)都不認(rèn)識(shí),更別往深...
    小樂(lè)小約閱讀 480評(píng)論 0 0
  • 今天開(kāi)始寫(xiě)文章已經(jīng)零點(diǎn)三十分了,又是忙碌的一天,每次有事自己總是會(huì)擔(dān)心,自己不能做好??墒钱?dāng)做過(guò)了才發(fā)現(xiàn)也沒(méi)有那么...
    小場(chǎng)面閱讀 405評(píng)論 0 2

友情鏈接更多精彩內(nèi)容