Android图片剪裁库
最近利用一周左右的业余时间,终于完成了一个Android图片剪裁库,核心功能是根据自己的理解实现的,部分代码参考了Android源码的图片剪裁应用。现在将该代码开源在Github上以供大家学习和使用,地址:https://github.com/Jhuster/ImageCropper,效果如下所示:
我的大致计划是首先介绍一下这个库的用法,然后再写几篇文章介绍一下其中的一些原理和关键技术,希望对Android开发新手有所帮助。
【特性】
支持通过手势移动和缩放剪裁窗口
支持固定剪裁窗口大小、固定窗口的长宽比率
支持设置最大的窗口长和宽
支持剪裁图片的旋转
易于集成和使用
【使用方法】
修改AndroidManifest.xml文件
<activity android:name="com.ticktick.imagecropper.CropImageActivity"/>
需要添加写SDcard的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 启动图片剪裁界面的方法
第一种方法,使用库中封装的CropIntent来构建Intent对象:
private void startCropImage() {// Create a CropIntentCropIntent intent = new CropIntent(); // Set the source image filepath/URL and output filepath/URL (Required)intent.setImagePath("/sdcard/source.jpg");intent.setOutputPath("/sdcard/cropped.jpg");// Set a fixed crop window size (Optional) intent.setOutputSize(640,480);// Set the max crop window size (Optional) intent.setMaxOutputSize(800,600);// Set a fixed crop window's width/height aspect (Optional) intent.setAspect(3,2);// Start ImageCropper activity with certain request code and listen for resultstartActivityForResult(intent.getIntent(this), REQUEST_CODE_CROP_PICTURE); }
第二种方法,自定义Intent对象:
private void startCropImage() {// Create explicit intentIntent intent = new Intent(this, CropImageActivity.class);// Set the source image filepath/URL and output filepath/URL (Required)intent.setData(Uri.fromFile(new File("/sdcard/source.jpg")));intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File("/sdcard/cropped.jpg")));// Set a fixed crop window size (Optional) intent.putExtra("outputX",640);intent.putExtra("outputY",480);// Set the max crop window size (Optional) intent.putExtra("maxOutputX",800);intent.putExtra("maxOutputY",600);// Set a fixed crop window's width/height aspect (Optional) intent.putExtra("aspectX",3);intent.putExtra("aspectY",2);// Start ImageCropper activity with certain request code and listen for result startActivityForResult(intent, REQUEST_CODE_CROP_PICTURE); }
3. 获取剪裁结果
剪裁结束后,如果用户点击了“Save”按钮,则可以通过MediaStore.EXTRA_OUTPUT得到保存的图片的URL地址;如果用户点击了“Cancel”,则Activity的返回值会被设置为 RESULT_CANCEL
protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode != RESULT_OK) {return;}if (requestCode == REQUEST_CODE_CROP_PICTURE ) {Uri croppedUri = data.getExtras().getParcelable(MediaStore.EXTRA_OUTPUT); InputStream in = null;try {in = getContentResolver().openInputStream(croppedUri);Bitmap b = BitmapFactory.decodeStream(in);mImageView.setImageBitmap(b);} catch (FileNotFoundException e) {e.printStackTrace();} }super.onActivityResult(requestCode, resultCode, data); }
Android图片剪裁库相关推荐
- android图片适配到裁剪框,Android图片剪裁-调用系统实现,完美适配魅族等机型
System-Photo-Cropper Android System Photo Cropper 使用系统原生的图片剪裁库,完美适配魅族等机型 Step 1 First you need a sys ...
- android 图片剪切组件,Android 图片裁剪库 uCrop
软件介绍 uCrop 是[Yalantis](https://yalantis.com/) 组织开源的图片裁剪库, 支持缩放, 旋转图片, 支持各种比例的裁剪框, 非常强大的一个图片裁剪库. 使用 1 ...
- android 图片裁剪库,(译)uCrop介绍 —— 我们自己的Android图片裁剪库
我们在 Yalantis 开发了许多不同的 Android 应用,经验告诉我们,几乎在所有的应用中,都需要图片裁剪的功能.图片裁剪的用途很广,从简单的用户头像调整到图片的比例裁剪.灵活变换等各种复杂的 ...
- Android图片压缩库——libjpeg-turbo
为何Android图片压缩效率比IOS低质量差 为什么Android的图片压缩质量要比iPhone的压缩质量差很多,这是因为Android底层犯的一个小错误:libjpeg.并且这个错误一直持续到了今 ...
- Android 图片选择库美哭了
转载: https://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=2650663107&idx=1&sn=a940514bc3 ...
- android调用系统裁剪功能,Android图片剪裁之调用系统剪裁
参考: 一. 原理 通过Intent打开系统自带的剪裁Activity,通过Intent设置Extra参数,进行剪裁参数的设定.剪裁结果的缩略图会保存在返回的data中,而大图要通过Uri进行保存(其 ...
- android图片布局填冲满,Android图片裁剪库——cropper使用,完美解决图片填充不满布局问题...
前些时间请了一个月假,远程办公,期间项目主要做图片裁剪,脑子里第一反应就是github上开源裁剪库,试了排名的前几个,其中不是UI定制度太低就是裁剪效果不怎么样.当然你也可以直接intent一下系统的 ...
- android开发怎么写图片,Android开发实践:自己动手编写图片剪裁应用(2)
上篇文章主要介绍了我开源在Github上的图片剪裁库(ImageCropper)的基本特性和用法,从本文开始,慢慢介绍一些开发图片剪裁应用中涉及的知识点和技术. 其实Android系统本身也提供了图片 ...
- android知乎多图片选择,知乎开源图片选择库 Matisse
原标题:知乎开源图片选择库 Matisse 我的引言 Matisse,知乎开源,简洁,易用,不错的图片选择库. 效果预览 项目简介 1.直接在 Activity 和 Fragment 中调用即可: 2 ...
最新文章
- 2.4G高频PCB天线设计
- pdb+ipdb 调试 Python代码
- dwarf tower
- System Center产品相关开发(1)-SCOM和SCVMM简介
- vue点击网页全屏_vue-cli点击实现全屏功能(两种方式)
- MySQL复制表-INSERT INTO SELECT
- Fotolog对memcached的应用
- 【分形算法】Jason带你飞之1——LS文法的java实现
- FPGA学习笔记---Modelsim使用技巧总结
- 商业有规律,赚钱有方法,不要在盲目努力了
- 自动驾驶攻破的难点在哪,何时能到Level 5?
- windows下github的使用心得
- 继承几近失传的经典吟诵-余觉中
- 神经网络模型怎么建立,如何选择神经网络模型
- 家用投影机预埋布线图_家庭影院装修如何布线(装修前必看·附图)
- 青海大学昆仑学院计算机机考,青 海 大 学 昆 仑 学 院 试 卷.doc
- 【问题解决】error: pathspec ‘XXX‘ did not match any file(s) known to git
- ADC 模数转换实验
- mysql建立序列相关操作 sequence
- 传感器与变送器的区别与联系
热门文章
- sap系统操作流程财务软件_金蝶财务软件的操作流程汇总
- SpringBoot开发案例之整合Dubbo提供者(二)
- 存储--盘古_阿里云飞天分布式存储系统设计深度解析
- 开源wkhtmltopdf使用心得 (一)
- J2EE和Java EE
- (转)Windows重启延迟删除,重命名技术原理
- Citrix XenApp Hotfix Rollup Pack部署最佳实践
- findfirst findnext 递归查找指定目录下所有子目录下所有文件,为什么总是死机?...
- JAVA操作Hadoop
- Socket编程(C语言实现)——UDP协议(进程间通信AF_UNIX)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【循环监听】