Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS将图像对象转换为jpeg文件_Javascript_Image_Imagejpeg - Fatal编程技术网

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无法保存文件。 您有多种选择:

  • 元素上渲染图像。这样可以通过右键单击->保存图像来保存
  • 将图像作为
    元素插入。这样可以通过右键单击->保存图像来保存
  • 将图像数据作为base64字符串发送到服务器。在那里进行处理
  • 使用服务器端语言(如PHP或Node.js)保存文件

  • 长话短说,您必须使用一些服务器端逻辑将文件保存在磁盘上

    客户端的JavaScript无法保存文件。 您有多种选择:

  • 元素上渲染图像。这样可以通过右键单击->保存图像来保存
  • 将图像作为
    元素插入。这样可以通过右键单击->保存图像来保存
  • 将图像数据作为base64字符串发送到服务器。在那里进行处理
  • 使用服务器端语言(如PHP或Node.js)保存文件

  • 长话短说,您必须使用一些服务器端逻辑将文件保存到磁盘上。最简单的方法是使用canvas元素,然后调用下载操作,允许用户选择保存图像的位置

    您提到图像很大,但没有提到多少-请注意,使用canvas时,当图像源开始接触像素大小为8k的区域时,您也会遇到限制

    一个简化的示例(即需要一个多边形填充):

    • 通过输入加载图像源
    • 通过
      URL.createObjectURL()
    • 加载后,创建一个临时画布,设置画布大小=图像大小并在图像中绘制
    • 使用
      toBlob()
      (在内存和性能上更高效,并且不需要向Base64转换代码)来获得
      Blob
    • 我们将把
      Blob
      转换为
      文件
      (一个子集对象,它将引用相同的内存),因此我们还可以提供一个文件名以及一个二进制mime类型(重要!)
    因为最后一步的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()
    • 加载后,创建一个临时画布,设置画布大小=图像大小并在图像中绘制
    • 使用
      toBlob()
      (在内存和性能上更高效,并且不需要向Base64转换代码)来获得
      Blob
    • 我们将把
      Blob
      转换为
      文件
      (一个子集对象,它将引用相同的内存),因此我们还可以提供一个文件名以及一个二进制mime类型(重要!)
    因为最后一步的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文件。我