帖子
帖子
用户
博客
课程
123下一页
返回列表 发新帖
显示全部楼层
21
帖子
0
勋章
770
Y币

[BUG] getPicture的targetWidth 和targetHeight 设置无效

[复制链接]
发表于 2015-6-17 09:00:53
这个问题我已经在几个月前提过了,今天特地为这个api上来测试一下,图片能正常上传,但结果依旧不能正确获取想要的图片大小
原本如下代码所示,应该是获取宽为200或高为200的等比缩放的图,可结果得到了一个出乎意料的值
getpic.png

  1. //选择图片
  2. function selectFile(type) {
  3.             api.getPicture({
  4.                 sourceType : type, //type为函数传值,
  5.                 encodingType : 'jpg',
  6.                 mediaValue : 'pic',
  7.                 destinationType : 'url',
  8.                 allowEdit : true,
  9.                 quality : 60,
  10.                 <u>targetWidth : 200,
  11.                 targetHeight : 200,</u>
  12.                 saveToPhotoAlbum : false
  13.                 //
  14.                
  15.             }, function(ret, err) {
  16.                 if (ret) {
  17.                     $api.byId('file').value = ret.data;
  18.                     api.alert({
  19.                         msg : ret.data
  20.                     });
  21.                 } else {
  22.                     api.alert({
  23.                         msg : err.msg
  24.                     });
  25.                 };
  26.             });
  27.         }

  28.         apiready = function() {
  29.             //JS代码
  30.         };
  31. //提交
  32.         function ensure() {
  33.             //
  34.             api.showProgress({
  35.                 title : '......',
  36.                 modal : false
  37.             });
  38.             //
  39.             var deviceId = api.deviceId;
  40.             var uname = $api.byId('uname').value;
  41.             var upwd = $api.byId('upwd').value;
  42.             var f = $api.byId('file').value;
  43.             //
  44.             api.ajax({
  45.                 url : 'http://192.168.4.71/login.php',
  46.                 method : 'post',
  47.                 cache : false,
  48.                 timeout : 20,
  49.                 dataType : 'text',
  50.                 returnAll : false,
  51.                 //charset : 'gb2312',
  52.                 data : {
  53.                     values : {
  54.                         name : uname,
  55.                         pwd : upwd,
  56.                     },
  57.                     files : {
  58.                         file : f
  59.                     }
  60.                 },
  61.             }, function(ret, err) {
  62.                 if (ret) {
  63.                     api.alert({
  64.                         msg : ret
  65.                     }, function(ret, err) {
  66.                         //coding...
  67.                     });
  68.                 } else {
  69.                     api.alert({
  70.                         msg : ('错误码:' + err.code + ';错误信息:' + err.msg + '网络状态码:' + err.statusCode)
  71.                     });
  72.                 }
  73.             });
  74.             //
  75.             api.hideProgress();
  76.         }
复制代码
PHP:
  1. $file_infor = var_export($_FILES,true);

  2. $upFilePath = "D:\\wamp\\www\";
  3. $ok=move_uploaded_file($_FILES['file']['tmp_name'],$upFilePath.$_FILES['file']['name']);
  4. if(!$ok){
  5.             echo ' \n  err';
  6. }else{
  7.             echo 'success';
  8. }
复制代码




9
帖子
0
勋章
79
Y币
希望官方能尽快解决
5
帖子
0
勋章
1万+
Y币
本帖最后由 技术支持-M 于 2015-6-17 20:01 编辑

有效果,云编译,IOS是好的
21
帖子
0
勋章
770
Y币
我用的是安卓,还请检查,谢谢!
21
帖子
0
勋章
770
Y币
这个问题我提了有几个月了,测个iOS就算回应我了?再怎么求助都不理我了?这样能做好ac吗?搞得好像是我们在求你一样。
20
帖子
1
勋章
7581
Y币
您好,targetWidth和targetHeight只是一个参考值,根据这个参考值,去做一个粗略的缩放,不会完全按照这个尺寸去压缩的,很简单的道理,如果你的图片是200×400的,而你要求压缩成100×100,那肯定会变形吧?
21
帖子
0
勋章
770
Y币
楼上的,我不知道你是不是装傻,那当然要判断最短边,短的一边缩到100,另一边成比例缩小。这是图片缩放最基本的要求,还要说吗?
21
帖子
0
勋章
770
Y币
做事情如此不严谨,能把事情做好吗?我不也在尽自己的能力想把ac做好
20
帖子
1
勋章
7581
Y币
蛋定,回复请注意用词。非常感谢您对APICloud的是支持和使用,这对我们是莫大的促进。我们也一直在不断收集开发者的建议同时增强产品和品质。

我的回复是向你说明,getPicture的一个大致压缩机制,它是一个粗略压缩,之所以参数名叫做targetWidth/targetHeight,而不是width或者height,意味着传入的宽高它仅仅是作为一个参考,而不是一个定值。底层会通过参考这个宽高对原图进行缩略,这是Android系统层面对图片处理的机制,getPicture仅仅是将该机制做了一层桥接。

基本算法:根据传入的targetWidth/targetHeight算出压缩结果允许的最大像素,然后参考这个最大像素值,得出一个缩略所需的倍率,这个一定是2的次幂数,所以压缩后的最终结果,图片的宽高几乎不会与传入的相匹配。

同时该处理机制也是通用的一个处理机制,市面上的app基本都是这么处理的。也就是说可以getPicture用于满足app的基本图片压缩需求。

如果需要更精细的压缩,可以在获取图片后使用imageFilter模块的压缩方法进行压缩。
21
帖子
0
勋章
770
Y币
那么请问,上传一张,1000*2000的图和一张500*1000的图,用targetwidth:100,targetheight:200,那么得到的结果是什么?
21
帖子
0
勋章
770
Y币
你能猜对我就认输了,谢谢
123下一页
您需要登录后才可以回帖 登录

本版积分规则