Android图片裁剪之自由裁剪
我的博客http://blog.csdn.net/dawn_moon
客户的需求都是非常怪的。我有时候在给客户做项目的时候就想骂客户是sb。可是请你相信我,等你有需求,自己变成客户的时候,给你做项目的哥哥肯定也会骂你是sb。
是这种,客户须要做一个图片上传的功能,这个图片须要裁剪。一般而言,这东西用系统自带的裁剪就搞定了。但是客户不,他要能够自由裁剪,就是长宽比不固定,想裁成什么比例就裁成什么比例,我一听,蛋都碎了。
没有办法,客户sb归sb,需求还是得照做,不然不给钱要喝西北风了。
图片裁剪的功能系统自带了,和我的需求仅仅有一点不一样,就是它是固定宽高比的,设定了宽高比就不能再改变,而我须要自由宽高比。好吧,既然仅仅有这一点不一样,那给他改改即可了。
事实上我这人是非常懒的,我早就想谷歌一下看有没有人写好的,拿来改下直接用好了。但是找了一圈,仅仅有一个哥哥自己写了一个自己定义裁剪的功能。跑了一下,基本功能能够实现,但是太Ugly了,并且不太稳定,有一些适配没有做好。想想还是自己改源代码好了,嗯,就这样。
下载gallery的源代码,抽取裁剪功能的代码,如图
这基本就好了,然后CropImage.java里面有叉叉,自己改下就好了。这个类使用了View里面的一些变量,这些变量被打上了hide标签,所以sdk应用开发是看不到,仅仅有系统编译才干够通过。这里面有非常多东西我们是不须要的,比方
/*if (extras != null) {
if (extras.getString("circleCrop") != null) {
mCircleCrop = true;
mAspectX = 1;
mAspectY = 1;
}
mSaveUri = (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT);
if (mSaveUri != null) {
String outputFormatString = extras.getString("outputFormat");
if (outputFormatString != null) {
mOutputFormat = Bitmap.CompressFormat.valueOf(
outputFormatString);
}
} else {
mSetWallpaper = extras.getBoolean("setWallpaper");
}
mBitmap = (Bitmap) extras.getParcelable("data");
mAspectX = extras.getInt("aspectX");
mAspectY = extras.getInt("aspectY");
mOutputX = extras.getInt("outputX");
mOutputY = extras.getInt("outputY");
mScale = extras.getBoolean("scale", true);
mScaleUp = extras.getBoolean("scaleUpIfNeeded", true);
mDoFaceDetection = extras.containsKey("noFaceDetection")
? !extras.getBoolean("noFaceDetection")
: true;
}
if (mBitmap == null) {
Uri target = intent.getData();
// mAllImages = ImageManager.makeImageList(mContentResolver, target,
// ImageManager.SORT_ASCENDING);
mImage = mAllImages.getImageForUri(target);
if (mImage != null) {
// Don't read in really large bitmaps. Use the (big) thumbnail
// instead.
// TODO when saving the resulting bitmap use the
// decode/crop/encode api so we don't lose any resolution.
mBitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED);
}
}*/
看这里凝视掉的代码,就是你调用系统裁剪的时候要传的一些參数,我这里直接凝视掉,仅仅传一个要剪切图片的uri就能够。
然后怎么让他自由裁剪呢,看下mAspectX变量的使用,源代码里面用mAspectX和mAspectY来做宽高比计算的,我们就把他计算宽高比的地方凝视掉就好了。把mAspectX和mAspectY都设为1,然后改动几个地方:
hv.setup(mImageMatrix, imageRect, faceRect, mCircleCrop,false
/*mAspectX != 0 && mAspectY != 0*/);
这里凝视掉了最后一个条件,直接传false,就会取消宽高比限制。
if (mAspectX != 0 && mAspectY != 0) {
if (mAspectX > mAspectY) {
// 自由缩放
cropHeight = cropWidth * mAspectY ;// mAspectX;
} else {
cropWidth = cropHeight * mAspectX ;// mAspectY;
}
}
这里去掉了宽高比计算。
然后基本就完毕了。
Android图片裁剪之自由裁剪的更多相关文章
- Android笔记之 图片自由裁剪
前言--项目中须要用到对用户头像的裁剪和上传功能.关于裁剪.一開始是想自己来做,可是认为这个东西应该谷歌有开发吧,于是一搜索官方文档.果然有.于是.就果断无耻地用了Android自带有关于照片的自由裁 ...
- [Android] 图片裁剪总结——调用系统裁剪
花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下 ...
- Android 图片裁剪库 uCrop
引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. 现在 Android 开发,离不开图片,必然也需要图片裁剪功能,这个实现可以调用系统的 ...
- Android 图片裁剪踩坑
今天做图库图片的裁剪遇到了不少坑,今天记录一下,以下坑位供各位看官参考: 如果有不对之处,欢迎各位看官留言评论! 图片裁剪踩坑锦囊: 问题一:相册裁剪权限问题 解:这个简单,对于Android6. ...
- Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案
1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...
- background-clip 背景图片做适当的裁剪
background-clip 用来将背景图片做适当的裁剪以适应实际需要. 语法: background-clip : border-box | padding-box | content-box | ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- 自制一个H5图片拖拽、裁剪插件(原生JS)
前言 如今的H5运营活动中,有很多都是让用户拍照或者上传图片,然后对照片加滤镜.加贴纸.评颜值之类的.尤其是一些拍照软件公司的运营活动几乎全部都是这样的. 博主也做过不少,为了省事就封装了一个简单的图 ...
- 基于cropper.js的图片上传和裁剪
项目中要求图片上传并裁剪的功能,之前也有接触过很多图片裁剪插件,效果体验不是很好,今天推荐一款好用的插件-cropper,超级好用,裁剪功能丰富,满足了各种需求. 功能: 1:点击选择图片,弹出文件夹 ...
随机推荐
- 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误
有次不小心设置了一下virtualbox里面的一些配置,然后启动系统时出现了如下提示 在网上找了一些资料尝试了一些方法偶然有一次成功 原来是自己把那个cpu个数设置成了2,改成1就好了,不知道为什么做 ...
- Android 为应用添加数字角标
今天在论坛上看到了一个帖子,终于搞清了我很久以来的一个困惑,android到底能不能实现ios的角标效果,QQ是怎么实现的.看了这个帖子顿时终于解除了我的困惑. 先说一个下大概的思路: 大家都知道an ...
- node.js 入门教程(beginnder guide
非常好的教程: node入门: JavaScript与Node.js JavaScript与你 简短申明 服务器端JavaScript “Hello World” 一个完整的基于Node.js的web ...
- Redis 介绍与使用
数据库主要类型有对象数据库,关系数据库,键值数据库等等,对象数据库太超前了,现阶段不提也罢:关系数据库就是平常说的MySQL,PostgreSQL这些熟的不能再熟的东西,至于键值数据库则是本文要着重说 ...
- iOS多线程系列(2)
前面了iOS的NSThread方法来实现多线程,这篇就简单的讲讲NSOperation和NSOperationQueue. NSOperation是一个抽象类,定义一个要执行的任务.NSOperati ...
- Qt开发初步,循序渐进,preRequest for 蓝图逆袭
1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;
- wchar_t 、UTF-8、UTF-16的转换方法 - luketty的专栏 - 博客频道 - CSDN.NET
wchar_t .UTF-8.UTF-16的转换方法 - luketty的专栏 - 博客频道 - CSDN.NET wchar_t .UTF-8.UTF-16的转换方法
- AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)
1.什么是Ajax Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写."Ajax"这个名词的发明人是Jesse ...
- extern外部方法使用C#简单样例
外部方法使用C#简单样例 1.添加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", ...
- MediaChooser图库浏览器
MediaChooser Android库 MediaChooser是一个库,浏览并选择视频和图像从SD卡.它可以用来显示文件中查看图像和视频(显示所有文件)或文件夹视图(显示文件分类).项目按日期, ...