Javascript JS将图像对象转换为jpeg文件
所以,我有一个用于上传图片的用户输入。这是一个简单的例子:Javascript JS将图像对象转换为jpeg文件,javascript,image,imagejpeg,Javascript,Image,Imagejpeg,所以,我有一个用于上传图片的用户输入。这是一个简单的例子: 功能手柄图像(e){ var reader=new FileReader(); reader.onload=函数(事件){ var img=新图像(); img.onload=函数(){ console.log(img); } img.src=event.target.result; } reader.readAsDataURL(e.target.files[0]); } 客户端的JavaScript无法保存文件。 您有多种选择: 在
功能手柄图像(e){
var reader=new FileReader();
reader.onload=函数(事件){
var img=新图像();
img.onload=函数(){
console.log(img);
}
img.src=event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
}
客户端的JavaScript无法保存文件。 您有多种选择:
元素上渲染图像。这样可以通过右键单击->保存图像来保存
元素插入。这样可以通过右键单击->保存图像来保存长话短说,您必须使用一些服务器端逻辑将文件保存在磁盘上客户端的JavaScript无法保存文件。 您有多种选择:
元素上渲染图像。这样可以通过右键单击->保存图像来保存
元素插入。这样可以通过右键单击->保存图像来保存长话短说,您必须使用一些服务器端逻辑将文件保存到磁盘上。最简单的方法是使用canvas元素,然后调用下载操作,允许用户选择保存图像的位置 您提到图像很大,但没有提到多少-请注意,使用canvas时,当图像源开始接触像素大小为8k的区域时,您也会遇到限制 一个简化的示例(即需要一个多边形填充):
- 通过输入加载图像源
- 通过
URL.createObjectURL()
- 加载后,创建一个临时画布,设置画布大小=图像大小并在图像中绘制
- 使用
(在内存和性能上更高效,并且不需要向Base64转换代码)来获得toBlob()
Blob
- 我们将把
转换为Blob
(一个子集对象,它将引用相同的内存),因此我们还可以提供一个文件名以及一个二进制mime类型(重要!)文件
document.querySelector(“输入”).onchange=function(){
var img=新图像;
img.onload=转换;
img.src=URL.createObjectURL(this.files[0]);
};
函数转换(){
URL.revokeObjectURL(this.src);//释放内存
var c=document.createElement(“画布”),//创建临时画布
ctx=c.getContext(“2d”);
c、 宽度=this.width;//设置大小=图像,绘制
c、 高度=此高度;
ctx.drawImage(this,0,0);
//转换为File对象,注意:我们使用二进制mime类型作为最终的Blob/文件
c、 toBlob(函数(blob){
var file=新文件([blob],“MyJPEG.jpg”,{type:“application/octet stream”});
window.location=URL.createObjectURL(文件);
},“图像/jpeg”,0.75);//mime=jpeg,质量=0.75
}
//注意:IE中不支持toBlob(),请为IE使用polyfill。
选择要转换的图像:
最简单的方法是使用画布元素,然后调用下载操作,允许用户选择保存图像的位置
您提到图像很大,但没有提到多少-请注意,使用canvas时,当图像源开始接触像素大小为8k的区域时,您也会遇到限制
一个简化的示例(即需要一个多边形填充):
- 通过输入加载图像源
- 通过
URL.createObjectURL()
- 加载后,创建一个临时画布,设置画布大小=图像大小并在图像中绘制
- 使用
(在内存和性能上更高效,并且不需要向Base64转换代码)来获得toBlob()
Blob
- 我们将把
转换为Blob
(一个子集对象,它将引用相同的内存),因此我们还可以提供一个文件名以及一个二进制mime类型(重要!)文件
document.querySelector(“输入”).onchange=function(){
var img=新图像;
img.onload=转换;
img.src=URL.createObjectURL(this.files[0]);
};
函数转换(){
URL.revokeObjectURL(this.src);//释放内存
var c=document.createElement(“画布”),//创建临时画布
ctx=c.getContext(“2d”);
c、 宽度=this.width;//设置大小=图像,绘制
c、 高度=此高度;
ctx.drawImage(this,0,0);
//转换为File对象,注意:我们使用二进制mime类型作为最终的Blob/文件
c、 toBlob(函数(blob){
var file=新文件([blob],“MyJPEG.jpg”,{type:“application/octet stream”});
window.location=URL.createObjectURL(文件);
},“图像/jpeg”,0.75);//mime=jpeg,质量=0.75
}
//注意:IE中不支持toBlob(),请为IE使用polyfill。
选择要转换的图像:
感谢您的工作。但是,我没有直接访问jpeg文件。我真正想要的是将您在变量中创建的文件的值作为字符串值。@S.P.H.I.N.X只需将c.toBlob替换为同步的c.toDataURL(“image/jpeg”)。如果希望PHP将其识别为文件,您应该使用和blob上传它。为自己节省一些带宽,无需更改mime类型谢谢您的工作。但是,我没有直接访问jpeg文件。我