Android版本微信头像剪裁与系统剪裁之间的选择

当然选类似微信的剪裁咯,为什么?请看下文分析



转载请注明:http://blog.csdn.net/tmacsky/article/details/51179789

众所周知头像剪裁上传是绝大部分APP必备的功能之一,但是剪裁的模式有2种交互形式,

第一种是采用系统自带的剪裁功能,我个人是比较青睐系统的这种交互模式的,但是很可惜,在一些手机上出现问题,不得不弃用

第二种是微信版本自定义剪裁图,当然微信的这个并没有判断图片边界与自定义白色矩形框是否相连,我想这是一个bug吧,属于遗留问题

首先我们来看第一种

市面上常用的方法也是最早的方法,随便一搜就是,比如我们搜索到第一个结果页面

http://blog.csdn.net/geofferysun/article/details/42835669

就是典型的采用这种方式来做的

没错,现在依然有大量的APP采用第一种方案,沿用系统的方法,但是这里有多重弊病,

  • 第一:解决android4.4本地方法变动的问题,相信这一点很多人都解决了,代码如下:
Intent intent;
if (android.os.Build.VERSION.SDK_INT >= 19) { // 判断是不是4.4
    intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
} else {
    intent = new Intent(Intent.ACTION_GET_CONTENT);
}
intent.setType("image/*"); // 设置文件类型
  • 第二:很多人没有解决小米MIUI系统路径的问题,这里也是有相应的解决方案

    http://blog.csdn.net/eclothy/article/details/42719217

  • 第三:即便解决了小米MIUI系统路径问题,也会导致其他手机产生各种奇葩问题–金立手机剪裁图片成功后无法进入到RESULT_OK,在其他手机(华为,中兴,魅族,小米等)都可以判断唯独金立M5不行

但是这个问题我始终没有很好的办法解决,所以最后我只能判断如果是出问题的手机比如金立,那么就采用通常的做法将剪裁图片设置为

intent.putExtra("return-data", true);

如果是其他的手机就采用miui系统路径传递;这样能基本上解决这种剪裁出现的问题,但是不能保证以后其他手机会不会出现金立这样的问题,

所以我还是弃用了这种系统剪裁图片传递的方式采用第二种微信的方式

然后我在网上搜到了以下参考资料,其中clip-image犹豫项目太繁琐我没用采用,转而看了clip-image作者引用的2个csdn链接,其中大神鸿洋的博客我是经常关顾,但是很少练习,惭愧!

https://github.com/msdx/clip-image

http://blog.csdn.net/lmj623565791/article/details/39761281

http://blog.csdn.net/xiechengfa/article/details/45702427

最后一个链接中的代码其实已经是很完善了,但是有一个问题,就是当图片过大的时候处理速度过慢,然后传递过程会出现问题,

比如小米4拍摄的图片分辨率很大,头像其实没必要过于清晰,设置头像大小和手机屏幕差不多宽就可以满足需求了,所以我将代码修改了

ClipImageActivity中的代码片段:

//不在内存中读取图片的宽高
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
//注意此处为了解决1080p手机拍摄图片过大所以做了一定压缩,否则bitmap在小米4以及拍图比较大的机型上会显示黑屏
opts.inSampleSize = width > 1080 ? (int)(width / 1080) : 1 ;
opts.inJustDecodeBounds = false;// 这里一定要将其设置回false,因为之前我们将其设置成了true

并且将图片剪裁的时候设置了大小控制,比如我们是500kb的显示那就是

ClipZoomImageView文件中的代码片段:

//将剪裁的图片压缩到500k以下,如果没需求就注释该段代码
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
       int options = 100;//保存的图片自动压缩低于500k
       bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
       while (baos.toByteArray().length / 1024 > 500) {
           baos.reset();
           options -= 10;
           bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
   } 

如果你所需要的上传图片是其他值直接将500改成你所要的就可以了

完整代码(拿来就可以用的)地址:https://github.com/hloong/ClipHeadIcon

效果展示:

时间: 2024-10-28 23:44:43

Android版本微信头像剪裁与系统剪裁之间的选择的相关文章

android应用对系统API版本号的选择介绍

转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用,首先要考虑这个系统是运行在android版本为2.3的系统上,还是4.0的系统上或者说是支持所有android版本的系统. 有了这样的决定之后,接下来我们就需要做点事了,需要告诉系统你当前应用所能兼容的系统版本是多少,从而系统决定是否能有效并成功安装你的应用. 这就是android project中Manif

Android高仿微信头像裁剪

最近公司的APP很多用户反应无法上传头像,于是打算修改原来头像裁剪的代码.参考微信.QQ.唱吧头像裁剪的操作,决定就仿微信头像裁剪来上传用户头像,在Android大神鸿洋的一篇高仿微信头像的博客(博客地址结尾会贴出来)的基础上加了一些代码,加的代码主要增加如下的功能: 1.增加对大图的处理,缩放到我们裁剪框的大小. 2.裁剪后的图片保存到临时文件里,把临时文件的路径返回到需要处理的界面,因为在三星S4传byte数组返回数据时会闪退,传路径则正常. 3.对有些系统返回旋转过的图片进行处理. 这个功

Android 高仿微信头像截取 打造不一样的自定义控件

转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/39761281,本文出自:[张鸿洋的博客] 1.概述 前面已经写了关于检测手势识别的文章,如果不了解可以参考:Android 手势检测实战 打造支持缩放平移的图片预览效果(下).首先本篇文章,将对之前博客的ZoomImageView代码进行些许的修改与改善,然后用到我们的本篇博客中去,实现仿微信的头像截取功能,当然了,个人觉得微信的截取头像功能貌似做得不太好,本篇博客准备去其糟粕

android 获取手机型号,本机电话号码,SDK版本以及firmwarw版本号(即系统版本号)

Android开发平台中,可通过TelephonyManager 获取本机号码. 1 TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 2 txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号 注: 根据Android的安全机制,在使用Tel

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)

Android开发平台中,可通过TelephonyManager 获取本机号码. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号 注: 根据Android的安全机制,在使用Telepho

Android 高仿微信头像截取 打造不一样的自己定义控件

转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/39761281,本文出自:[张鸿洋的博客] 1.概述 前面已经写了关于检測手势识别的文章.假设不了解能够參考:Android 手势检測实战 打造支持缩放平移的图片预览效果(下).首先本篇文章,将对之前博客的ZoomImageView代码进行些许的改动与改善,然后用到我们的本篇博客中去,实现仿微信的头像截取功能.当然了.个人觉得微信的截取头像功能貌似做得不太好.本篇博客准备去其糟粕

微信公众平台编辑器可以剪裁和替换正文图片了

微信公众平台后台编辑器上线封面图裁剪功能,时隔近两个月的今天,公众平台编辑器正文图片也可以剪裁和替换了,简单的图片裁剪编辑小编们再也不用放到ps等作图软件处理了,方便快捷.下面就让ytkah手把手教你玩转公众平台正文裁剪和替换: 点击正文的图片,即可看到图片编辑工具栏 1.裁剪 点击剪裁,拖拽剪裁框就可以剪裁图片 同时,滚动鼠标或拉动工具栏可直接对图片进行缩放 “收放自如,可大可小” 2.替换 在工具栏点击图片替换,就可用其他图片替换原有图片 替换后默认剪裁框的尺寸为替换前图片尺寸立志治好“图片

Android仿微信下拉列表实现

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现微信6.1中点击顶部菜单栏的"+"号按钮时,会弹出一个列表框.这里用的了Activity实现,其实最好的方法可以用ActionBar,不过这货好像只支持3.0以后的版本.本文的接上文Android仿微信底部菜单栏+顶部菜单栏(附源码) 效果: 一.仿微信下拉列表布局pop_dialog.xml <?xml version="1.0" encodi

Android版微信小代码(转)

以下代码仅适用于Android版微信: //switchtabpos:让微信tab更贴合Android Design 如果你并不喜欢微信Android版和iOS端同用一套UI,现在有一个小方法可以实现Tab的转移:在微信任意聊天窗口输入//switchtabpos并按发送,Tab就会从转移到屏幕顶端,Android范十足.如果想再调整回来,再输入一遍并发送就好了. //multiwebview:将微信聊天页和文章页拆分为两个任务卡片 在任意聊天窗口输入//multiwebview并发送,聊天和文