该功能用到了Apache的开源项目simplecropimage.
下面代码中CropImage类为SimpleCropImage中的类,该类需要在Manifest中进行注册。simplecropimage用到的依赖类在附件中。
直接上代码:
下面代码中CropImage类为SimpleCropImage中的类,该类需要在Manifest中进行注册。simplecropimage用到的依赖类在附件中。
直接上代码:
/** 打开相册(第一步)*/ private static final String IMAGE_UNSPECIFIED = "image/*"; private void openPhotos() { Intent intent = new Intent(Intent.ACTION_PICK); // intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent, REQUEST_PHOTOS); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CUTRESULT: dealCutResult(resultCode, data); break; case REQUEST_PHOTOS: dealPhotosResult(resultCode, data); break; } private void dealPhotosResult(int resultCode, Intent data) { if (Activity.RESULT_OK == resultCode) { if (data != null) { // 从相册获取照片uri startPhotoCut(data.getData()); } } else { if(GlobleParams.isEnglish){ shortToast("Upload canceled"); }else{ shortToast("您已经取消了上传操作"); } } } /**开始裁剪(第二步)*/ public void startPhotoCut(Uri uri) { String realPathFromURI = getRealPathFromURI(uri); if(realPathFromURI == null){ return; } File file = new File(realPathFromURI); Intent intent = new Intent(App.getInstance(), CropImage.class); // tell CropImage activity to look for image to crop intent.putExtra(CropImage.IMAGE_PATH, file.getAbsolutePath()); // allow CropImage activity to rescale image intent.putExtra(CropImage.SCALE, true); // if the aspect ratio is fixed to ratio 3/2 intent.putExtra(CropImage.ASPECT_X, 0); intent.putExtra(CropImage.ASPECT_Y, 0); // start activity CropImage with certain request code and listen // for result startActivityForResult(intent, REQUEST_CUTRESULT); } private void dealCutResult(int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { String path = data.getStringExtra(CropImage.IMAGE_PATH); // if nothing received if (path == null) {return;} uploadPhoto(path); } else { if(GlobleParams.isEnglish){ shortToast("Upload canceled"); }else{ shortToast("您已经取消了上传操作"); } } } /**开始上传(第三步)*/ public void uploadPhoto(String path) { File file = new File(path); MyLog.i("wmm", "file path" + file.getAbsolutePath() + "size " + file.getName() + " " + file.length()); final UserInfo user = App.getInstance().getUser(); MyLog.i("wmm", user.toString()); Bitmap photo = BitmapFactory.decodeFile(file.getPath()); iv_head_icon.setImageBitmap (BitmapUtil.getRoundedCornerBitmap(photo)); if (user != null) { Api.uploadavatar(App.getInstance(), user.username, user.password, path, new DefaultResponsehandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); MyLog.i("wmm", "uploadPhoto onSuccess " + response.toString()); Api.loadDrawable(user.head_icon + "?time=" + System.currentTimeMillis(), iv_head_icon, R.drawable.default_head_icon); // Picasso.with(App.getInstance()).load(user.head_icon).skipMemoryCache().placeholder(R.drawable.default_head_icon).into(iv_head_icon); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); MyLog.i("wmm", "uploadPhoto onFailure " + responseString.toString()); } @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { super.onSuccess(statusCode, headers, response); MyLog.i("wmm", "uploadPhoto onSuccess 1" + response.toString()); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { super.onSuccess(statusCode, headers, responseString); MyLog.i("wmm", "uploadPhoto onSuccess 2" + responseString.toString()); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); MyLog.i("wmm", "uploadPhoto onFailure 1 " + statusCode + " " + throwable.getMessage()); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); MyLog.i("wmm", "uploadPhoto onFailure 2 " + errorResponse.toString()); } @Override public void onFinish() { super.onFinish(); MyLog.i("wmm", "upload onFinish"); } @Override public void onStart() { super.onStart(); MyLog.i("wmm", "upload onStart"); } }); } } public String getRealPathFromURI(Uri contentUri) { String res = null; String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); } if(cursor != null){ cursor.close(); } return res; }
- simplecropimage.zip (22.7 KB)
- 下载次数: 0
发表评论
-
Android开发判断SQLite数据库中某个表是否存在
2016-02-16 09:22 1735直接上方法: public boolean tabIs ... -
CSS中图片宽度适应手机屏幕
2015-12-01 09:56 581在Androind应用中如果用到JS加载内容,图片的样式适配手 ... -
Android 获得屏幕的宽高
2015-11-30 15:51 530private DisplayMetrics getWith ... -
解决在某些型号华为手机上用JS加载的平滑图不能滑动的问题
2015-11-19 16:18 1046今天解决了一个Js的问题。心情倍儿爽,特此纪念下 。 具体是: ... -
new Dialog()的空指针问题
2015-11-10 15:47 745Dialog dialog = new Dialog(cont ... -
Monkey 测试命令之一行命令入手Monkey
2015-11-10 11:27 1172首先在Android Studio 中打开Terminal终端 ... -
adb列出分组权限与撤销权限的命令
2015-11-04 08:36 1899列出权限 adb shell pm list permissi ... -
AS 学习笔记之Error:Execution failed for task ':dynamicgrid:packageReleaseResources'.
2015-06-29 17:22 970今天往AS中导项目时遇到如下错误Error:Execution ... -
AndroidStudio中的DDMS连不上真机
2015-06-18 14:57 1514今天换了新电脑,重装了AndroidStudio,发现DDMS ... -
Android解决OOM问题的一个技巧
2015-03-05 10:32 902最近公司做的项目中几乎全是高分辨的大图,刚开发完后加载几张图片 ...
相关推荐
1、creator实现调用android相机、相册,并将裁剪后的图片上传到服务器 2、保留全部代码,如果有疑问请留言
Android调用系统相机/相册并裁剪源码
调用系统相机拍照和相册选择图片,然后裁剪图片
Android7.0调用系统相册、拍照裁剪及压缩并有效解决兼容性的问题
本文实例讲述了Android编程实现调用系统图库与裁剪图片功能。分享给大家供大家参考,具体如下: 在Android开发中,调用系统图库和裁剪照片是很常见的需求。相对于自己实现这种功能,直接调用系统具有诸多优点,如...
【TakePicture】项目分为两大部分,分别从不同开发场景出发。 随着市场上不同版本、机型手机的出现,老项目迭代维护成本高。...2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。
android相机拍照,存储 调用相册, 图片旋转,裁剪
最新版,Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)
android调用相机拍照或从相册取照片(加裁剪功能),请看readme.txt使用
Android调用系统相机、相册、裁剪,兼容6.0、7.0 Android调用系统相机、相册、裁剪,兼容6.0、7.0
Android7..0调用相机,相册获取图片并裁剪,并且判断权限
Android拍照及图片裁剪、调用系统相册 本文demo包含以下要点: 对照片进行裁剪 PhotoUtils工具类对拍照和相册获取照片的封装 CircleImageView圆形头像
主要介绍了Android编程实现调用相册、相机及拍照后直接裁剪的方法,涉及Android拍照及图形处理相关操作技巧,需要的朋友可以参考下
调用系统相机相册获取图片,开启系统图片裁剪页面处理图片;
android实现的调用系统相册、拍照来实现图片的 裁剪、缩放功能!
由于是调用系统功能,因此不需权限 PhotoUtils.camera(activity,你定义的FileProvider的authority){ uri, success, msg -> ... //调用相册 PhotoUtils.select(fragment){ uri, success, msg ->
导入工程时别忘记配置服务器的地址: http://localhost:8080/UploadServlet/UploadServlet/ 服务器端配置tomcat服务器 经过测试可以用。 资源的博客地址:...
上一篇文章提及了通过调用系统相册或拍照来实现图片的缩放\裁剪。不过这对于笔者项目的要求同样不适合,笔者需要的是通过对手机屏幕整个进行一个截图,并对这个截图进行裁剪操作。 依靠系统功能确实可以实现图片的裁剪...