下面是效果图,看看是不是亲想要的效果图,如果是,这段代码你就可以参考下了,但是要灵活运用,根据需求做相应的改动。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/take_photo" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Take Photo" /> <Button android:id="@+id/get_photo" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="get Photo" /> <ImageView android:id="@+id/picture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout>
package com.example.choosepictest;
import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { public static final int TAKE_PHOTO = 1; public static final int CROP_PHOTO = 2; public static final int GET_PHOTO = 3; private Button takePhoto; private Button getPhoto; private ImageView picture; private Uri headImgUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); takePhoto = (Button) findViewById(R.id.take_photo); getPhoto = (Button) findViewById(R.id.get_photo); picture = (ImageView) findViewById(R.id.picture); takePhoto.setOnClickListener(this); getPhoto.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.take_photo: takePhoto(); break; case R.id.get_photo: getPhoto(); break; default: break; } } // 拍照 private void takePhoto() { File appDir = new File(Environment.getExternalStorageDirectory(), "/etoury/picCache"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = "user_head" + ".jpg"; File outputImage = new File(appDir, fileName); try { if (outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } headImgUri = Uri.fromFile(outputImage); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, headImgUri); startActivityForResult(intent, TAKE_PHOTO); } // 定向到图片库 private void getPhoto() { Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, GET_PHOTO); } /** * 裁剪 */ private void crop(Uri uri) { // 裁剪图片意图 Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 intent.putExtra("crop", "true"); intent.putExtra("scale", true);// 去黑边 // 裁剪框的比例,1:1 intent.putExtra("aspectX", 1);// 输出是X方向的比例 intent.putExtra("aspectY", 1); // 裁剪后输出图片的尺寸大小,不能太大500程序崩溃 intent.putExtra("outputX", 256); intent.putExtra("outputY", 256); // 图片格式 /* intent.putExtra("outputFormat", "JPEG"); */ intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); // intent.putExtra("noFaceDetection", true);// 取消人脸识别 intent.putExtra("return-data", true);// true:返回uri,false:不返回uri // 同一个地址下 裁剪的图片覆盖拍照的图片 intent.putExtra(MediaStore.EXTRA_OUTPUT, headImgUri); startActivityForResult(intent, CROP_PHOTO); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case GET_PHOTO: if (resultCode == RESULT_OK) { crop(data.getData()); } break; case TAKE_PHOTO: if (resultCode == RESULT_OK) { crop(headImgUri); } break; case CROP_PHOTO: if (resultCode == RESULT_OK) { Bitmap cropbitmap = data.getParcelableExtra("data"); picture.setImageBitmap(cropbitmap); } break; default: break; } } }
总结:
1. 拍照返回一张图片,可以是全尺寸的图片
2. 拍照返回图片的地址问题,一个目录下的一个文件
3. 裁剪的图片的地址, 覆盖了全尺寸图片的地址
4. 相册intent 返回的是一个uir , 不是string
5. 裁剪的图片,不能覆盖相册返回的uri(一定注意)
本文向大家介绍android系统拍照结合android-crop裁剪图片,包括了android系统拍照结合android-crop裁剪图片的使用技巧和注意事项,需要的朋友参考一下 在一个应用中更换用户的头像,一般有拍照和从图库中选择照片两种方法,现在网上也有很多开源的,但是很多都太复杂。而 Android-crop 这个库比较小,代码不复杂,比较适合,但是它没有拍照这个功能,需要我们自己整合进去。
本文向大家介绍Android编程实现图片拍照剪裁的方法,包括了Android编程实现图片拍照剪裁的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现图片拍照剪裁的方法。分享给大家供大家参考,具体如下: 调用系统的裁剪工具对相册或者拍照的图片进行裁剪。 startActivityforResult用的很恰当,一些系统action需要注意。 XML文件: 希望本文所述对大家
本文向大家介绍Android实现拍照、选择图片并裁剪图片功能,包括了Android实现拍照、选择图片并裁剪图片功能的使用技巧和注意事项,需要的朋友参考一下 一、 实现拍照、选择图片并裁剪图片效果 按照之前博客的风格,首先看下实现效果。 二、 uCrop项目应用 想起之前看到的Yalantis/uCrop效果比较绚,但是研究源码之后发现在定制界面方面还是有一点的限制,于是在它的基础上做了修
本文向大家介绍Android实现拍照、选择相册图片并裁剪功能,包括了Android实现拍照、选择相册图片并裁剪功能的使用技巧和注意事项,需要的朋友参考一下 通过拍照或相册中获取图片,并进行裁剪操作,然后把图片显示到ImageView上。 当然也可以上传到服务器(项目中绝大部分情况是上传到服务器),参考网上资料及结合项目实际情况, 测试了多款手机暂时没有发现严重问题。代码有注释,直接贴代码: 布
本文向大家介绍android完美实现 拍照 选择图片 剪裁等代码分享,包括了android完美实现 拍照 选择图片 剪裁等代码分享的使用技巧和注意事项,需要的朋友参考一下 前言,版本兼容问题主要是由于4.4以前和4.4以后的Uri的格式不同所造成的错误 1.拍照 和选择图片 ①选择图片 ②拍照 2.获取系统传来的值 标记符 3.图片选取后 根据Url 转成流 并保存 4.保存图片 记得加权
本文向大家介绍Android 拍照并对照片进行裁剪和压缩实例详解,包括了Android 拍照并对照片进行裁剪和压缩实例详解的使用技巧和注意事项,需要的朋友参考一下 Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码。 调用摄像头拍照,对拍摄照片进行裁剪,代码如下。 对拍摄照片进行裁剪,代码如下。 得到
本文向大家介绍Android编程图片操作类定义与用法示例【拍照,相册选图及裁剪】,包括了Android编程图片操作类定义与用法示例【拍照,相册选图及裁剪】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程图片操作类定义与用法。分享给大家供大家参考,具体如下: 主界面类:拍照及选择相册图片 布局文件 图片操作工具类 最后不要忘记在AndroidManifest.xml中添加
我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题