做了个微信的HTML5拍摄上传照片功能,问题重重...
前端代码
01 |
$( ':file' ).on( 'change' , function (){ |
02 |
var file = this .files[0]; |
03 |
var url = webkitURL.createObjectURL(file); |
07 |
var $img = new Image(); |
08 |
$img.onload = function () { |
11 |
var width = $img.width, |
13 |
scale = width / height; |
14 |
width = parseInt(800); |
15 |
height = parseInt(width / scale); |
18 |
var $canvas = $( '#canvas' ); |
19 |
var ctx = $canvas[0].getContext( '2d' ); |
20 |
$canvas.attr({width : width, height : height}); |
21 |
ctx.drawImage($img, 0, 0, width, height); |
22 |
var base64 = $canvas[0].toDataURL( 'image/jpeg' ,0.5); |
25 |
$.post( 'upload.php' ,{formFile : base64.substr(22) }, function (data){ |
后端代码
1 |
$base64 = $_POST [ 'formFile' ]; |
2 |
$IMG = base64_decode ( $base64 ); |
3 |
file_put_contents ( '1.png' , $IMG ); |
实测:
电脑端
chrome 版本29,上传成功,源图片3M,压缩后1024 * 比例,约250kb 通过!
移动端
android 版本4+,微信,点击上传无反应,在手机浏览器中打开可上传,拍摄约3M-,压缩后1024* 比例,约3M-,根本没压缩嘛!!! 失败!
iphone4 & 4s 版本6+ 微信,拍摄约3M-,压缩后1024 * 比例,约250kb 通过!
iphone5 版本6+ 微信,生成canvas变形。失败!
总结:系统级BUG,无解.... 这下不知道怎么办了..
--------------------------------------- 后续报告 2013年09月12日 ----------------------------------------------
找到个牛人写的javascript编译jpg的插件,javascript_jpeg_encoder。
用这个办法可以解决android无法压缩图片的问题。
目前还剩2个系统级BUG。
1. 微信android版本无法响应上传控件 input tyle=file;
2. iphone5 生成canvas失败,画面扭曲。
--------------------------------------- 后续报告2 2013年10月10日 ---------------------------------------------
同样有一位牛人写的 ios-imagefile-megapixel 插件,解决了iphone5+画面扭曲的问题。
目前还剩1个系统级BUG。
1. 微信android版本无法响应上传控件 input tyle=file;
新版微信已经解决了无法响应上传控件 input tyle=file; 实测android通过