如何使用输入类型="file"将图像设置为html中的背景图像?
How to set an image as a background image in html using input type="file"?
我正在创建一个可以接收图像并将其设置为背景图像的网页。
我目前的工作:
function a(a) {
document.body.style.backgroundImage = "url(a.value)";
}
<input type="file" onchange="a(this);">
由于值为C:\fakepath\Image.extension
,背景没有改变。那么,你能帮我只使用 javascript 来做到这一点吗?我知道这是一个非常奇怪的问题。但它会帮助我学习新东西,也可以帮助其他人。
您需要使用 HTML5 FileReader API 读取所选文件的内容,然后对其进行 base64 编码 Data-URL。然后你可以把这个URL设置为任何东西的背景。
如果您不知道 Data-URL 是一种不指向文件位置的 URI,而是将文件的全部内容以 base64 编码格式保存在 URL.任何文件都可以转换为Data-URL。您可以阅读更多相关信息 here。
注意: Data-URI 仅适用于小文件。不要将兆字节大小的文件转换为 Data-URI.
function previewFile(fileInput) {
var file = fileInput.files[0];
var reader = new FileReader();
reader.addEventListener("load", function() {
setBackground(reader.result);
}, false);
if (file) {
reader.readAsDataURL(file);
}
}
function setBackground(imageURL){
document.body.style.backgroundImage = "url(" + imageURL + ")";
document.body.style.backgroundSize = "100% auto";
document.body.style.backgroundRepeat = "no-repeat";
document.body.style.backgroundPosition = "center top";
}
<input type="file" onchange="previewFile(this);">
只需将文件 blob 包装到 Object-URL (URL.createObjectURL
) 并将其设置为 CSS 背景图像的来源。
这会简化您的代码,图像处理速度会更快,图像大小问题也会减少:
document.querySelector("input").onchange = function() {
var url = URL.createObjectURL(this.files[0]);
document.body.style.background = "url(" + url + ") no-repeat";
}
<input type="file">
我正在创建一个可以接收图像并将其设置为背景图像的网页。
我目前的工作:
function a(a) {
document.body.style.backgroundImage = "url(a.value)";
}
<input type="file" onchange="a(this);">
由于值为C:\fakepath\Image.extension
,背景没有改变。那么,你能帮我只使用 javascript 来做到这一点吗?我知道这是一个非常奇怪的问题。但它会帮助我学习新东西,也可以帮助其他人。
您需要使用 HTML5 FileReader API 读取所选文件的内容,然后对其进行 base64 编码 Data-URL。然后你可以把这个URL设置为任何东西的背景。
如果您不知道 Data-URL 是一种不指向文件位置的 URI,而是将文件的全部内容以 base64 编码格式保存在 URL.任何文件都可以转换为Data-URL。您可以阅读更多相关信息 here。
注意: Data-URI 仅适用于小文件。不要将兆字节大小的文件转换为 Data-URI.
function previewFile(fileInput) {
var file = fileInput.files[0];
var reader = new FileReader();
reader.addEventListener("load", function() {
setBackground(reader.result);
}, false);
if (file) {
reader.readAsDataURL(file);
}
}
function setBackground(imageURL){
document.body.style.backgroundImage = "url(" + imageURL + ")";
document.body.style.backgroundSize = "100% auto";
document.body.style.backgroundRepeat = "no-repeat";
document.body.style.backgroundPosition = "center top";
}
<input type="file" onchange="previewFile(this);">
只需将文件 blob 包装到 Object-URL (URL.createObjectURL
) 并将其设置为 CSS 背景图像的来源。
这会简化您的代码,图像处理速度会更快,图像大小问题也会减少:
document.querySelector("input").onchange = function() {
var url = URL.createObjectURL(this.files[0]);
document.body.style.background = "url(" + url + ") no-repeat";
}
<input type="file">