Android图片选择及裁剪
来源:互联网 发布:网络感叹号 不能上网 编辑:程序博客网 时间:2024/04/27 21:15
Android 的头像上传一般步骤 :选取相册图片或者调用系统照相机拍照,进行图片剪切后上传 。
在相册中选取图片和调用相机拍照这个还是比较靠谱的,按照通用 标准调用就好,但是对于图片剪切,同样的调用方式,却可能因为手机品牌的不一样导致姜蓉性问题,话不多说,开始手把手教学。
1. 选取图片
/** * 调用系统相册等工具选择图片,activity 的onActivityResult中返回结果 * * @param activity */ public static void pickPicture(Activity activity) { Intent it = new Intent(Intent.ACTION_GET_CONTENT); it.setType("image/*"); activity.startActivityForResult(it, PICK_REQUEST); }
2.调用系统相机拍照
/** * 调用系统照相,照相数据存储在uri文件中 * uri 要考虑Android系统版本的uri存储方式改变 * @param activity * @param uri */ public static void takePicture(Activity activity, Uri uri) { Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); it.putExtra(MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(it, TAKE_REQUEST); }
3.接收回传数据,跳转到图片剪切界面
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == ImageUtils.PICK_REQUEST) { Uri uri = data.getData(); toCopper(uri); } else if (resultCode == RESULT_OK && requestCode == ImageUtils.TAKE_REQUEST) { toCopper(takeUri); } else if (resultCode == RESULT_OK && requestCode == ImageUtils.CROPPER_REQUEST) { Bitmap bitmap = data.getParcelableExtra("data"); ImageView imageView = (ImageView) findViewById(R.id.imageView); imageView.setImageBitmap(bitmap); } }
4.第三方剪切库的调用方式
参加系统Crooper的调用方式,封装的CropperActivity 。
private void toCopper(Uri uri) { Intent intent = new Intent("com.edmodo.cropper.action_crop"); intent.putExtra("uri", ImageUtils.getPath(this, uri)); intent.putExtra(CropperActivity.ASPECTRATIOX, 1);//裁剪框比例 intent.putExtra(CropperActivity.ASPECTRATIOY, 1); intent.putExtra(CropperActivity.OUTPUTX, 300);//输出图片大小 intent.putExtra(CropperActivity.OUTPUTY, 300); startActivityForResult(intent, ImageUtils.CROPPER_REQUEST); }
package com.edmodo.cropper;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.Button;import com.edmodo.cropper.util.ImageViewUtil;/** * Created by Administrator on 2015/8/2. */public class CropperActivity extends Activity { private CropImageView mCropImageView; private Button buttonCancel; private Button buttonOk; private Button buttonRotate; public static final String ASPECTRATIOX = "aspectRatioX"; public static final String ASPECTRATIOY = "aspectRatioY"; public static final String OUTPUTX = "outputX"; public static final String OUTPUTY = "outputY"; private int mAspectRatioX = 1; private int mAspectRatioY = 1; private int mOutputX = 300; private int mOutputY = 300; private int degree = 0; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.copper_activity_layout); initWidget(); getIntentData(); initCropperView(); } private void initWidget() { mCropImageView = (CropImageView) findViewById(R.id.cropper_imageView); buttonOk = (Button) findViewById(R.id.button_ok); buttonCancel = (Button) findViewById(R.id.button_cancel); buttonRotate = (Button) findViewById(R.id.button_rotate); buttonOk.setOnClickListener(okClickListener); buttonCancel.setOnClickListener(onCancelClickListener); buttonRotate.setOnClickListener(rotateClickListener); } private void getIntentData() { Intent intent = getIntent(); mAspectRatioX = intent.getIntExtra(ASPECTRATIOX, 1); mAspectRatioY = intent.getIntExtra(ASPECTRATIOY, 1); mOutputX = intent.getIntExtra(OUTPUTX, 1); mOutputY = intent.getIntExtra(OUTPUTY, 1); } private void initCropperView() { //设置剪切形状的宽高比 mCropImageView.setFixedAspectRatio(true); mCropImageView.setGuidelines(0); String uri = getIntent().getStringExtra("uri"); mCropImageView.setImageBitmap(ImageViewUtil.getBitmapFromUri(uri)); mCropImageView.setAspectRatio(mAspectRatioX, mAspectRatioY); } private View.OnClickListener rotateClickListener = new View.OnClickListener() { @Override public void onClick(View v) { degree = +90; if (degree == 360) { degree = 0; } mCropImageView.rotateImage(degree); } }; private View.OnClickListener okClickListener = new View.OnClickListener() { @Override public void onClick(View v) { //返回剪切后的bitmap Intent it = new Intent(); it.putExtra("data", getScaledBitmap(mCropImageView.getCroppedImage())); setResult(RESULT_OK, it); finish(); } }; private View.OnClickListener onCancelClickListener = new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }; /** * scale bitmap to the require width and height * * @param bitmap * @return */ private Bitmap getScaledBitmap(Bitmap bitmap) { if (bitmap.getHeight() > mOutputY || bitmap.getWidth() > mOutputX) { return bitmap.createScaledBitmap(bitmap, mOutputX, mOutputY, false); } else { return bitmap; } }}
说明:CropperActivity 是对开源库com.demodo.cropper的封装;
界面功能的定制化需要重写<span style="font-family: Arial, Helvetica, sans-serif;">CropperActivity类 </span>
效果图:
</pre><pre name="code" class="java">
<img src="http://img.blog.csdn.net/20150808175739544?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="360" height="640" alt="" /> <img src="http://img.blog.csdn.net/20150808175946730?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="360" height="640" alt="" />
0 0
- Android图片选择及裁剪
- Android选择图片并裁剪。
- Android 选择图片裁剪,上传
- android选择图片进行裁剪
- android 选择图片 裁剪 Fileprovider
- Android 图片裁剪及保存
- Android拍照及选择图片及裁剪及兼容6.0权限实现
- Android拍照及选择图片及裁剪及兼容6.0权限实现
- Android选择本地图片或者照片裁剪
- Android 图片选择裁剪工具 PictureTool
- Android 拍照、选择图片并裁剪
- Android 拍照、选择图片并裁剪
- Android 拍照、选择图片并裁剪
- Android之图片选择与裁剪
- Android 相机或相册选择图片裁剪
- Android 拍照、选择图片并裁剪
- Android选择图片、拍照、裁剪 注意事项
- Android 选择图片拍照裁剪压缩整理
- Unity5.0 EventSystem事件系统的详细说明
- C++(18)再谈指针
- Spark的流处理-1
- Eclipse Debug
- ListView的点击变色
- Android图片选择及裁剪
- C++_运算符重载
- django操作mysql时django.db.utils.OperationalError: (2003, "Can't connect to MySQL server")错误的解决办法
- 网络爬虫的实现
- oracle12创建用户错误ORA-65096: 公用用户名或角色名无效 invalid common user or role name
- 【javascript】 声明函数与函数表达式 的区别
- C99标准学习笔记(2)——整数提升
- 正则表达式代码生成
- A. Toy Cars