在Yalantis,我们开发了许多不同的安卓app,根据我们的经验来看,几乎每个我们开发的应用都需要图片裁剪的功能。图片裁剪可以用于很多目的,从普通到头像调整到按比例裁剪以及图片变换等更复杂的功能。

考虑到想为我们的所有客户都提供最好的图片编辑工具,我们决定创建uCrop, 一个安卓版的图片裁剪库。

你可能会想为什么我们不直接使用现有的图片裁剪方案。毕竟,你可以在 Github和 Android Arsenal上找到许多这样的项目。但是有一点:没有一个满足我们的需求。让我们快速浏览一遍最流行的开源图片裁剪库,然后解释为什么他们都不是很符合要求。

为什么其它的开源库都不好

1. SoundCloud cropping library

我已经在几个项目上成功的使用了SoundCloud的库,但是仍然它有几个问题让我感到很悲剧。

首先,你是通过一个裁剪框操作的,而不是图片本身。如果你需要裁剪图片里面很小的一片区域,这是很蛋疼的,而且从用户体验的角度来讲着也是不对的。我相信Instagram 已经在给了我们一些UX方面的教训,这种可移动的裁剪框已经死去了。

再者,SoundCloud 的裁剪库并不允许我们做任何的旋转。拜托,老大!大家都知道有很多“神奇”的安卓手机里面图片的EXIF 信息是错误的(谢天谢地,我们已经通过CWAC解决了这个烂摊子)。再说,许多用户也想能够旋转图片(不仅仅是想旋转90度)。

最后,使用SoundCloud库不能改变宽高比。当然,如果你只是想得到一个正方形的头像,这完全没有问题。但是使用这个库无法实现更多形状的有趣的头像照片。

2. Edmodo Cropper

Edmodo Cropper和SoundCloud 库非常相似,和SoundCloud 也有一下共同的缺陷。但是,这个库允许动态的改变裁剪框的宽高比例。它也有guideline而且有旋转图片的method (但是仅仅是一个method,因此你需要自己弄一个gesture detection 或者一个spinner 来控制手势 )。

3. Scissors

Scissors 是一个比较新的库,最近在一个 Android Weekly issue上看到之后也非常兴奋。但是5分钟之后就兴奋感就消失了。这是从关于Scissors的 博客 中引用的一段话:

…我们研究了现有的解决方案。没有一个 满足了我们的需求,因此我们决定建立自己的。

这种方式值得表扬。但实际上,不过是又多了一个不能动态旋转图片和改变宽高比例的library 罢了。不过,Scissors倒是集成了一些流行的图片库,比如Picasso, Glide, 和Universal Image Loader。我希望Scissors 在后续的版本能有更多实用的功能。

[ I do like how Scissors implements zoom. The image always scales down to the center of the image, no matter where your fingers are.]

在分析了现有库的缺陷之后,我们决定创建我们自己的 library ,支持手势和精炼的用户体验。

uCrop: 一个解决了图片裁剪问题的Library

uCrop 是一个让你可以裁剪图片以进一步使用的安卓库。主要功能包括:

缩放图片

旋转图片

改变裁剪的宽高比

支持触摸手势:单手指滚动和平移图片,双手指旋转图片,捏图变焦(放大缩小),双击变焦。

功能多样化的简便Activity,有精确化缩放和旋转的空间以及一套预定义的宽高比例(1:1, 4:3, 3:4, 2:3, 3:2, 16:9, 9:16 +原始图片的比例)。

uCrop 有一个用于初始化和配置的builder类型的接口。library 本身只需要最小api level 10,但是sample 是在 API level 15+上运行的。

如何在项目中使用uCrop?

在项目中引入库:

compile 'com.yalantis:ucrop:1.0.1'

在AndroidManifest.xml中添加UCropActivity:

android:name="com.yalantis.ucrop.UCropActivity"

android:screenOrientation="portrait"/>

uCrop的配置是使用的builder模式:

UCrop.of(sourceUri, destinationUri)

.withAspectRatio(16, 9)

.withMaxResultSize(maxWidth, maxHeight)

.start(context);

重写onActivityResult方法并处理裁剪的结果:

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK || requestCode == UCrop.REQUEST_CROP) {

final Uri resultUri = UCrop.getOutput(data);

} else if (resultCode == UCrop.RESULT_ERROR) {

final Throwable cropError = UCrop.getError(data);

}

}

如何自定义uCrop?

你可以改变如下设置:

compression format 压缩格式(e.g. PNG, JPEG, WEBP).

compression quality压缩质量 [0 - 100] (无损的PNG会忽略质量设置 )

support for simultaneous gestures

从原始图片解码的Bitmap的最大值(如果你想重写默认的行为)。

以及更多 (比如color palette)

android 自定义图片裁剪,uCrop介绍,我们自己的安卓版图片裁剪库相关推荐

  1. android自定义分组控件,很值得收藏的安卓开源控件库

    日历 日历列表视图 星期视图日历 提交日历日期 material风格的日历 toolbar相结合的弹出日历 横向日历 Tab Material风格的Tab 各种样式Tab ProgressBar 类似 ...

  2. android 自定义图片,Android自定义图片集合

    本文主要包括以下内容: 使用Xfermode设置圆角图片 使用BitmapShader设置圆角图片 滑动旋转缩放的bimp图片 图片颜色处理(滑动) 图片 + 文字 其中1,2是两种不同方式处理图片圆 ...

  3. android 自定义图片裁剪,Android图片裁剪工具封装

    笔者从零开始开发Android,而且是跳过java直接使用kotlin开发,这其中的好处是可以避开java这门传统语言诸多的潜规则,难处是相比资深Android开发者少了许多可以现用的工具库.比如An ...

  4. android 自定义图片裁剪,android 自定义比例裁剪图片(拍照 相册)方式 自定义比例...

    先说下我这个有啥好处 主要是能够自定义设置裁剪图片的比例.比如 :今天产品 给你说裁剪 成16:9 的图片. 你做好了 OK 明天 产品又和你说 裁剪成10:7 的图片 ,你是不是要吐血, 我这里只要 ...

  5. android 自定义图片加载动画效果,Android自定义加载动画-感染体

    Android自定义动画系列七,今天来分享第七个自定义Loading动画(InfectionBallBuilder),看上去感觉有种病毒源被感染的感觉,所以名字就叫感染体,这个动画做出来的效果,我不怎 ...

  6. android 自定义图片容器,Android应用开发中自定义ViewGroup视图容器的教程

    一.概述在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥?ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...

  7. android 自定义图片上传,android自定义ImageView仿图片上传示例

    看下效果图 主要看下自定义view 代码 public class ProcessImageView extends ImageView{ private Context context; priva ...

  8. android自定义图片+文字控件四种实现方法,Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种...

    http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...

  9. android 自定义View 的详细介绍

    为什么80%的码农都做不了架构师?>>>    今天 看了好几篇 自定义组件的介绍,加上自己 练习了一把 ,准备 结合 别人的想法以及自己的理解,将自定义组件详细的记录下来,自己学习 ...

最新文章

  1. Linux 背后的思想
  2. JVM - 深入剖析字符串常量池
  3. jquery获得下拉框的值
  4. 文件的输入/输出操作
  5. 强健程序员体魄————减脂原理
  6. rabbitmq中文教程python版 - Topics
  7. C# 错误 175: 具有固定名称“System.Data.SQLite.EF6”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载
  8. 和平精英有电脑版吗_和平精英华晨宇代言版-和平精英华晨宇代言版下载v1.9.10...
  9. rf连oracle版本一致,Navicat premium连不上Oracle的问题解决
  10. 自学前端,需要学习哪些知识点?学多久可以入职前端工程师?
  11. Kanban VS Scrum:哪个是最好的敏捷项目管理框架
  12. 超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
  13. 静态HTML网页设计作品我的家乡网站设计——我的家乡-绿城之都-南宁(9页) HTML+CSS+JavaScript 大学生简单个人静态HTML网页设计作品
  14. 免费wms物流管理存在的管理漏洞(下)
  15. 计算机类和鼠标类是什么关系,什么是机械鼠标和光学鼠标?两者有什么区别?...
  16. win7添加java环境变量path_Win7怎么配置Java环境变量?
  17. python基础1:数据类型和标识符命名规范
  18. Java常见面试题:重写和重载的区别详解
  19. 免费抽奖---PMP续证PDU | PMP知识地图.
  20. DOS命令关机小程序

热门文章

  1. 预告 | 5月26日IGS大会腾讯云游戏新文娱分论坛遇见TcaplusDB
  2. 变电所运维云平台系统的研究与应用
  3. 互联网大佬学历背景大揭秘,看有没有你校友
  4. Ubuntu开发环境配置(七) 卸载Mysql
  5. acad2010求帮助
  6. Office-Microsoft365-家庭和个人版下载和安装
  7. 明日之后mumu模拟器找不到服务器,MuMu模拟器教你玩转《明日之后》,生死之战笑到最后!...
  8. 嵌入式平台USB驱动程序移植(zc0301p 摄像头)
  9. 计算机无法ghost安装系统安装系统安装,如何解决我的电脑装不上GHOST系统 惠普电脑安装不了ghost系统文件的解决方法...
  10. 怎么用计算机弹囚鸟,哪里有《囚鸟》电脑键盘钢琴谱?