最精簡的原生js開發,更友善擴充開發需要的業務
技術邏輯:
1.将div轉為svg網絡圖檔
2.将建立Canvas畫布
3.将畫布大小和div大小設定一樣大
4.将svg img 畫到Canvas的畫布中 用方法 context.drawImage(img, 0, 0);
5.将Canvas畫布儲存為png圖像
示例程式截圖:
CODE:
<html>
<body>
<h2>Input Div:</h2>
<div id="div">
<p>Just have a <span style='color: white; text-shadow: 0 0 2px blue;'>TRY</span></p>
<p><b>By Dion</b></p>
<div style="width:600px;height:500px;background-color:#000;color:#fff;">
<div style="width:500px;height:500px;background-color:#111111;color:#fff;">
<div style="width:400px;height:500px;background-color:#222222;color:#fff;">
<div style="width:300px;height:500px;background-color:#333333;color:#fff;">
<div style="width:200px;height:500px;background-color:#666666;color:#fff;"> 這是圖檔5</div>
這是圖檔4
</div>
這是圖檔3
</div>
這是圖檔2
</div>
這是圖檔1
</div>
</div>
<h2>Output Image:</h2>
<input type="button" value="生成圖檔" onClick="printMap()">
<input type="button" value="下載下傳圖檔" onClick="saveMap()">
<div id="ssssssssssss" style="position: fixed;right:0px;top:0px;width:600px;background-color:#333333;"></div>
<script>
var imgObj;
function printMap() {
//1.将div轉成svg
var divContent = document.getElementById("div").innerHTML;
var newData = "";
for ( var i = 0; i < divContent.length; i++) {
if (divContent.substr(i, 1) == "#") {
newData += '%23';
} else {
newData += divContent.substr(i, 1);
}
}
var data = "data:image/svg+xml,"
+ "<svg id='abcdddd' xmlns='http://www.w3.org/2000/svg' width='600' height='500'>"
+ "<foreignObject width='100%' height='100%'>"
+ "<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:16px;font-family:Helvetica'>"
+ newData + "</div>" + "</foreignObject>" + "</svg>"; var img = new Image();
img.src = data;
// document.getElementsByTagName('body')[0].appendChild(img);
document.getElementById("ssssssssssss").appendChild(img);
imgObj = img; }
function saveMap() {
var img = imgObj;//document.getElementById("ssssssssssss").getElementsByTagName("img");
//2.svg轉成canvas
var canvas = document.createElement('canvas'); //準備空畫布
canvas.width = img.width;
canvas.height = img.height; var context = canvas.getContext('2d'); //取得畫布的2d繪圖上下文
context.drawImage(img, 0, 0); var type = 'png';
var imgData = canvas.toDataURL(type); // 加工image data,替換mime type
imgData = imgData.replace(_fixType(type), 'image/octet-stream');
// 下載下傳後的圖檔名
var filename = 'baidufe_' + (new Date()).getTime() + '.' + type;
// download
saveFile(imgData, filename);
} var _fixType = function(type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg');
var r = type.match(/png|jpeg|bmp|gif/)[0];
return 'image/' + r;
}; var saveFile = function(data, filename) {
var save_link = document.createElementNS(
'http://www.w3.org/1999/xhtml', 'a');
save_link.href = data;
save_link.download = filename; var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0,
false, false, false, false, 0, null);
save_link.dispatchEvent(event);
};
</script>
</body>
</html>