2013-03-21 93 views
4

我想在将图片上传到服务器之前调整文件上传中的图片大小。我发现decent plugin返回更新图像的blob,但是我找不到如何将blob分配回上传使用的文件对象。在上传HTML文件之前调整图片的大小5

团块的样子:数据:图像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAQAAAQAB .....

 var file = e.target.files[0]; 
     canvasResize(file, { 
      width: 300, 
      height: 0, 
      crop: false, 
      quality: 80, 
      //rotate: 90, 
      callback: function (data, width, height) { 
       // How to assign the data blob back to the file? 
       //$(file).attr('src', data); 

      // THEN submit with the smaller photo 
      $('#PhotoForm').ajaxSubmit(options); 
      } 
     }); 

谢谢!

+5

您已获取data:scheme URI。您可以将其发布到服务器,然后将其解码为二进制文件。 – Quentin 2013-03-21 16:03:40

+1

是的,你将不得不将blob发送回服务器作为文本,你将无法用blob覆盖文件上传控制的值。 – Adrian 2013-03-21 16:29:56

回答

0

如果你仍然坚持使用canvasResize,还有很多其他的图像操作库。我以前使用过Pixastic来获得很好的效果,虽然它比canvasResize有更大的开销。虽然是better documented

0

我最后只是将blob添加到表单中的隐藏字段并提交它。将C#中的图像保存为以下内容:

 var regex = new Regex(@"data:(?<mime>[\w/]+);(?<encoding>\w+),(?<data>.*)", RegexOptions.Compiled); 
     var match = regex.Match(input.ImageBlob); 
     var mime = match.Groups["mime"].Value; 
     var encoding = match.Groups["encoding"].Value; 
     var data = match.Groups["data"].Value; 
     byte[] imagedata = Convert.FromBase64String(data); 

     Image img = byteArrayToImage(imagedata); 

     img.Save("someimagename.jpg"); 
+0

此代码从MIME类型获取图像名称的适当扩展名(如果需要):http://cyotek.com/blog/mime-types-and-file-extensions – user1854458 2013-03-21 19:21:56