Android实现从本地图库/相机拍照后裁剪图片并设置头像
玩qq或者是微信的盆友都知道,这些聊天工具里都要设置头像,一般情况下大家的解决办法是从本地图库选择图片或是从相机拍照,然后根据自己的喜爱截取图片,接下来通过本文给大家介绍Android实现从本地图库/相机拍照后裁剪图片并设置头像,需要的朋友参考下 在Android应用开发中,用户经常需要设置个性化头像,这通常涉及到从本地图库选取图片或使用相机拍摄照片,然后进行裁剪以适应特定尺寸的需求。以下是一个详细讲解如何实现这个功能的过程: 我们需要创建一个布局文件,该文件包含一个ImageView用于显示头像,以及两个Button,分别用于选择本地图片和拍照。布局代码如下: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/buttonLocal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本地相册选取头像" /> <Button android:id="@+id/buttonCamera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机拍照选取头像" /> </LinearLayout> ``` 接着,在MainActivity中,我们需要对这两个Button的点击事件进行监听,并设置相应的操作。当用户点击“本地相册选取头像”时,我们将启动一个Intent来打开系统的图库应用,让用户选择一张图片;当用户点击“手机拍照选取头像”时,我们会启动相机应用来拍摄照片。 ```java public class MainActivity extends AppCompatActivity { // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ... Button buttonLocal = (Button) findViewById(R.id.buttonLocal); buttonLocal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { choseHeadImageFromGallery(); } }); Button buttonCamera = (Button) findViewById(R.id.buttonCamera); buttonCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { choseHeadImageFromCameraCapture(); } }); } // 从本地相册选取图片作为头像 private void choseHeadImageFromGallery() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, CODE_GALLERY_REQUEST); } // 使用相机拍摄图片作为头像 private void choseHeadImageFromCameraCapture() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 指定裁剪图片的输出文件名 File imageFile = createImageFile(); if (imageFile != null) { Uri photoURI = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", imageFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(intent, CODE_CAMERA_REQUEST); } } } ``` 在选取图片或拍摄照片后,我们需要处理返回的结果。当用户从图库选取图片或拍摄照片后,系统会回调`onActivityResult()`方法。在这个方法中,我们需要读取图片并进行裁剪。 ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case CODE_GALLERY_REQUEST: startCropImage(data.getData()); break; case CODE_CAMERA_REQUEST: File imageFile = new File(getImageFilePath()); if (imageFile.exists()) { startCropImage(Uri.fromFile(imageFile)); } break; case CODE_RESULT_REQUEST: // 这里可以处理裁剪后的图片,例如设置为头像 break; } } } private void startCropImage(Uri uri) { Intent cropIntent = new Intent(this, CropImageActivity.class); cropIntent.setDataAndType(uri, "image/*"); cropIntent.putExtra(CropImage.IMAGE_PATH, getImageFilePath()); cropIntent.putExtra(CropImage.SCALE, true); cropIntent.putExtra(CropImage.ASPECT_X, output_X); cropIntent.putExtra(CropImage.ASPECT_Y, output_Y); startActivityForResult(cropIntent, CODE_RESULT_REQUEST); } ``` 这里我们假设存在一个名为`CropImageActivity`的裁剪图片的Activity,它负责接收传入的图片URI并按照预设的宽高比进行裁剪。裁剪完成后,`onActivityResult()`中的`CODE_RESULT_REQUEST`会被调用,此时你可以处理裁剪后的图片,例如将其设置为ImageView的源,或者保存到本地作为头像。 ```java private String getImageFilePath() { return getExternalFilesDir(null) + "/" + IMAGE_FILE_NAME; } private File createImageFile() { try { File imageFolder = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (!imageFolder.exists()) { imageFolder.mkdirs(); } File imageFile = File.createTempFile(IMAGE_FILE_NAME, ".jpg", imageFolder); return imageFile; } catch (IOException e) { e.printStackTrace(); return null; } } ``` 以上就是Android中实现从本地图库/相机拍照后裁剪图片并设置头像的基本步骤。注意,为了能够通过相机拍摄的照片,你需要在AndroidManifest.xml中添加权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" android:required="true" /> ``` 同时,如果你使用了`FileProvider`来提供相机拍摄照片的URI,还需要在AndroidManifest.xml中配置`<provider>`标签,以便安全地分享文件到其他应用。 通过以上代码,用户可以选择从图库选取图片或使用相机拍摄照片,然后进行裁剪,最终将裁剪后的图片设置为头像。这是一个基本的实现,实际项目中可能需要处理更多细节,如异常处理、图片质量控制等。
































剩余6页未读,继续阅读


- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 北京某病房楼橡胶地面施工技术(工作总结).doc
- chromedriver-linux64-141.0.7383.0(Canary).zip
- chromedriver-mac-arm64-141.0.7383.0(Canary).zip
- 骨质疏松症诊断专家共识.ppt
- 项目6-施工临时工程及独立费用编制.ppt
- 副温混凝土法在主体工程施工应用.doc
- 第12章-动载荷与疲劳强度简述.doc
- “活动营销”是房地产营销最重要的环节.doc
- [甘肃]框剪结构商住楼工程安全专项施工方案.doc
- [重庆]卷烟厂房改造人工挖孔桩基础施工方案.doc
- 5S目视化管理详细图集.ppt
- 第二部分-通用条款.doc
- 城市商品房预售管理办法.ppt
- 度校长个人工作总结.doc
- 如何做好工程签证-2.ppt
- 2013年雀巢ICP大会--设计延展部分--酷地企划--20131124.pptx


