httml 2 canvas.jsの使用を記録してください.
4434 ワード
httml 2 canvas.jsの使用を記録してください.
ここで完成した機能は:ページ展示)で、jsは部分domを切り取り、画像を生成して、サーバーにアップロードして保存します.
参考記事:https://blog.csdn.net/candy_ホーム/アート/detail/78424642公式サイト:https://html2canvas.hertzen.com/ github:https://github.com/niklasvh/html2canvas 公式サイトまたはhttp://www.bootcdn.cn/jsファイルをダウンロード
ネットのコードを少し修正して、公式サイトの文書を参考にしてもらいます.
ここで完成した機能は:ページ展示)で、jsは部分domを切り取り、画像を生成して、サーバーにアップロードして保存します.
参考記事:https://blog.csdn.net/candy_ホーム/アート/detail/78424642公式サイト:https://html2canvas.hertzen.com/ github:https://github.com/niklasvh/html2canvas 公式サイトまたはhttp://www.bootcdn.cn/jsファイルをダウンロード
ネットのコードを少し修正して、公式サイトの文書を参考にしてもらいます.
function capture() {
var html = document.getElementById('contract')
var b64
html2canvas(html, {
backgroundColor: '#FFFFFE',
allowTaint: true
}).then(function(canvas) {
try {
b64 = canvas.toDataURL("image/png")
var fd = new FormData();
fd.append("name", "file");
var file = fileHandleUtil.dataURLtoFile(b64, 'contract.png')
fd.append("file", file)
var xhr = new XMLHttpRequest()
xhr.addEventListener("load", function(e) {
var result = JSON.parse(e.target.response)
if(result.succ) {
//
} else {
mui.toast(result.msg)
}
}, false)
xhr.open("POST", SERVER_URL + "/upload")
xhr.send(fd)
} catch(err) {
console.log(err)
}
}).catch(function onRejected(error) {});
}
このうちfileHandleUtil.dataURLtoFileは以下のコードを参照して具体的に実現されます.function dataURLtoFile (dataurl, filename) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while(n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {
type: mime
});
}
4つのピット1に遭遇しました.ファイルをアップロードする時は、blobオブジェクトではなくbase 64のデータをfileオブジェクトに変換したほうがいいです.そうしないと、バックエンドが間違っています.2.非透明の背景色を設定しています.私はここで同時にdomノードの背景色、httml 2 canvasメソッドパラメータの背景色を設定しています.いずれも{FFFEです.設定しない時に展示画像で見たのは黒です.3.スクリーンショットが不完全で、可視領域だけを切り取ることができます.解決方法は参照してください.https://blog.csdn.net/jackqth/article/details/53588897. 4.IPhoneのdataURLtoFile関数は空白のオブジェクトに戻ります.本当にIOSを突っ込む力がなくなりました.私の解決方法は直接base 64文字列をパラメータとしてサーバに送ってから処理します.byte[] bytes = Base64.decodeBase64(b64Str.replaceAll("data:([\\s\\S]+);base64,", "").replaceAll("==", ""));
// bytes ...