一、JS圖片下載本地
通過調用瀏覽器的下載功能,可以將圖片下載到本地。
function downloadImage(url) {
let filename = url.substring(url.lastIndexOf('/') + 1).split("?")[0];
let a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
在需要下載圖片的地方調用該函數即可:
downloadImage("http://example.com/images/example.jpg");
二、JS生成圖片下載到本地
如果需要將通過JS生成的圖片下載到本地,可以使用canvas將圖片轉換成base64編碼格式,然後通過瀏覽器的下載功能下載。
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
let image = new Image();
image.onload = function() {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
let base64 = canvas.toDataURL();
let a = document.createElement("a");
a.href = base64;
a.download = "example.png";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
image.src = "example.jpg";
三、JS圖片下載成file
通過AJAX請求後端介面獲取圖片二進位流,然後將二進位流轉換成file對象。
function downloadFile(url) {
let xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function() {
if (this.status == 200) {
let blob = this.response;
let filename = url.substring(url.lastIndexOf('/') + 1).split("?")[0];
let a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
}
xhr.send();
}
調用該函數即可下載:
downloadFile("http://example.com/images/example.png");
四、JS圖片下載直接顯示而不下載
有時候需要將圖片顯示在頁面上,而不是下載到本地。直接將圖片的url作為標籤的src屬性即可。
<img src="http://example.com/images/example.jpg">
五、JS圖片下載不在線看
對於不在線查看的圖片,可以使用canvas將圖片繪製成base64編碼格式,然後顯示在頁面上。但是,需要注意的是對於大圖片會消耗大量的內存,可能會導致頁面卡頓。
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
let image = new Image();
image.onload = function() {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
let base64 = canvas.toDataURL();
let img = document.createElement("img");
img.src = base64;
document.body.appendChild(img);
}
image.src = "example.jpg";
六、JS圖片下載完顯示到頁面
有時候需要將下載後的圖片顯示在頁面上。這時候可以將圖片的url作為標籤的src屬性,或者使用canvas將圖片繪製到頁面上。
方法一:
let img = new Image();
img.onload = function() {
document.body.appendChild(img);
}
img.src = "example.jpg";
方法二:
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
let image = new Image();
image.onload = function() {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
let img = new Image();
img.src = canvas.toDataURL();
document.body.appendChild(img);
}
image.src = "example.jpg";
七、JS圖片下載有token的可下載
有些情況下需要使用token進行許可權驗證後才能下載圖片。可以使用AJAX請求後端介面獲取圖片二進位流,然後將二進位流轉換成file對象。
function downloadFileWithToken(url, token) {
let xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader("Authorization", "Bearer " + token);
xhr.responseType = "blob";
xhr.onload = function() {
if (this.status == 200) {
let blob = this.response;
let filename = url.substring(url.lastIndexOf('/') + 1).split("?")[0];
let a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
}
xhr.send();
}
調用該函數即可下載:
downloadFileWithToken("http://example.com/images/example.png", "xxx-xxx-xxx-xxx");
八、用JS下載圖片流
可以通過AJAX請求後端介面獲取圖片二進位流,然後將二進位流轉換成base64編碼格式,最後將base64編碼格式的字元串轉為Blob對象,實現下載圖片流。
function downloadImageStream(url) {
let xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function() {
if (this.status == 200) {
let blob = this.response;
let reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
let base64data = reader.result;
let array = base64data.split(",");
let mime = array[0].match(/:(.*?);/)[1];
let bstr = atob(array[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while(n--) {
u8arr[n] = bstr.charCodeAt(n);
}
let blobObj = new Blob([u8arr], {type: mime});
let downloadUrl = window.URL.createObjectURL(blobObj);
let a = document.createElement("a");
a.style.display = "none";
a.href = downloadUrl;
a.download = url.substring(url.lastIndexOf('/') + 1).split("?")[0];
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(downloadUrl);
document.body.removeChild(a);
}
}
}
xhr.send();
}
調用該函數即可下載:
downloadImageStream("http://example.com/images/example.jpg");
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/296283.html
微信掃一掃
支付寶掃一掃