`

系统相册和拍照图片进行裁剪保存

 
阅读更多
直接上例子吧,折腾了一上午,就整理出这点东西,这年头,知识挺贵的:)
package com.example.album;

import java.io.ByteArrayOutputStream;
import java.io.File;

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 SysAlbumActivity extends Activity {

	public static final int NONE = 0;
	public static final int PHOTO_CAPTURE = 1;
	public static final int PHOTO_ALBUM = 2;
	public static final int PHOTO_CUT = 3;

	public static final String IMAGE_UNSPECIFIED = "image/*";
	public ImageView imageView = null;
	public Button mAlbumBtn = null;
	public Button mCaptureBtn = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		imageView = (ImageView) findViewById(R.id.imageID);
		mAlbumBtn = (Button) findViewById(R.id.mAlbumBtn);
		mCaptureBtn = (Button) findViewById(R.id.mCaptureBtn);

		mAlbumBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(Intent.ACTION_PICK, null);
				intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
				startActivityForResult(intent, PHOTO_ALBUM);
			}
		});

		mCaptureBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));
				startActivityForResult(intent, PHOTO_CAPTURE);
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == NONE)
			return;
		/** 拍照 */
		if (requestCode == PHOTO_CAPTURE) {
			/** 设置文件保存路径这里放在跟目录下 */
			File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
			startPhotoZoom(Uri.fromFile(picture));
		}

		if (data == null)
			return;

		/** 读取相册缩放图片 */
		if (requestCode == PHOTO_ALBUM) {
			startPhotoZoom(data.getData());
		}
		if (requestCode == PHOTO_CUT) {
			Bundle extras = data.getExtras();
			if (extras != null) {
				Bitmap photo = extras.getParcelable("data");
				ByteArrayOutputStream stream = new ByteArrayOutputStream();
				photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);
				imageView.setImageBitmap(photo);
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	/** 进行图片的裁剪操作. */
	public void startPhotoZoom(Uri uri) {
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
		intent.putExtra("crop", "true");
		// aspectX aspectY 是宽高的比例
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		// outputX outputY 是裁剪图片宽高
		intent.putExtra("outputX", 64);
		intent.putExtra("outputY", 64);
		intent.putExtra("return-data", true);
		startActivityForResult(intent, PHOTO_CUT);
	}
}

分享到:
评论

相关推荐

    拍照和相册选取图片并裁剪得到路径

    "拍照和相册选取图片并裁剪得到路径"这个功能是移动应用中常见的一个模块,涉及到Android和iOS系统的多媒体处理、权限管理以及网络上传等多个知识点。 1. **多媒体权限管理**: 在Android 6.0(API级别23)及以上...

    Android从照相机和相册中获取图片并且裁剪

    在Android开发中,获取用户设备上的图片以及进行裁剪是一项常见的功能,这通常涉及到相机应用接口的调用和系统相册的访问。本教程将详细讲解如何实现这一过程。 首先,我们要了解Android中的Intent机制,它是应用...

    拍照/相册/裁剪图片

    总之,实现"拍照/相册/裁剪图片"功能需要对Android系统的相机API、相册访问权限、图片处理有深入了解,并能灵活应对不同设备的兼容性问题。在这个过程中,不断学习和优化,可以提升应用的质量和用户体验。

    Android选择相册拍照裁剪图片完美效果

    综上所述,实现“Android选择相册拍照裁剪图片完美效果”涉及到多个步骤和技术,包括选择图片、拍照、裁剪、防止变形、权限管理以及用户体验优化。在开发过程中,要特别注意处理图像数据的方式,以保证裁剪操作的...

    拍照 / 从相册读取图片后裁剪的范例

    本示例主要涉及了两个关键操作:拍照和从相册读取图片,以及后续的图片裁剪功能。下面我们将详细探讨这些知识点。 首先,拍照功能通常是通过调用设备的相机API来实现的。在Android平台上,可以使用`Intent.ACTION_...

    Android拍照与相册图片裁剪

    在Android应用开发中,"Android拍照与相册图片裁剪"是一个常见的功能需求,涉及到用户交互和权限管理等多个方面。以下将详细阐述实现这一功能的关键知识点: 1. **请求相机权限**:在Android 6.0(API级别23)及...

    Android 通过拍照或相册选择图片并裁剪(精简版)

    在Android开发中,用户可能需要从手机的相机或者相册中选择图片,并进行裁剪以适应特定的需求。本文将详细讲解如何实现这一功能,提供一个精简且完整的解决方案。 首先,我们需要添加必要的权限到AndroidManifest....

    android 自定义比例裁剪图片(拍照 相册)方式 16:9 10:7 自定义

    本篇文章将详细讲解如何在Android应用中实现自定义比例的图片裁剪,包括从相机拍照和相册选取图片后进行裁剪,并重点介绍16:9和10:7这两种常见比例的裁剪方法。 首先,我们需要了解Android中的Intent机制,它是...

    拍照和相册图片的裁剪

    在Android开发中,拍照和处理相册中的图片是常见的功能之一,而图片裁剪则是这一环节中的关键步骤。本文将详细讲解如何在Android应用中实现图片裁剪功能,结合提供的"Android_camera2"示例,我们将深入探讨Android ...

    swift-一款自定义多选相册单张图片编辑旋转裁剪功能

    "swift-一款自定义多选相册单张图片编辑旋转裁剪功能"的项目旨在提供一个自定义的相册组件,它允许用户进行多选图片,并对单个图片进行编辑,包括旋转和裁剪操作。这一功能对于社交应用、图片编辑应用或者任何需要...

    Android7.0调用系统相册、拍照裁剪及压缩

    总结,Android 7.0调用系统相册、拍照、裁剪及压缩涉及到的主要知识点有:权限管理、Intent的使用、相机API、图片选择API、图片裁剪API和图片压缩技术。在实现过程中,要注意处理兼容性和权限问题,确保应用在各种...

    相册和拍照裁剪

    在Android开发中,"相册和拍照裁剪"是一个常见的功能需求,用户可能需要从相册选择图片并进行裁剪,或者直接通过相机拍照后进行裁剪以适应特定的显示或上传需求。以下是对这个主题的详细阐述: 一、从相册获取图片 ...

    拍照和相册选择图片裁剪后更换头像

    这个过程通常涉及从相机拍照或从手机相册选择图片,然后进行裁剪以适应特定尺寸的需求。"拍照和相册选择图片裁剪后更换头像"是一个常见的功能模块,我们可以从以下几个方面来详细讲解这一知识点: 1. **启动相机**...

    上传头像(选择相册或照相+裁剪)

    在Android应用开发中,"上传头像(选择相册或照相+裁剪)"是一个常见的功能,涉及到用户界面交互、图像处理以及网络通信等多个技术点。以下是对这个功能的详细阐述: 1. 用户界面(UI)设计:首先,我们需要一个用户...

    拍照和相册选择裁剪图片

    在Android应用开发中,"拍照和相册选择裁剪图片"是常见的功能需求,尤其是在社交、分享类应用中。这个功能允许用户通过相机拍摄新照片或从设备的相册中选取已有图片,然后进行裁剪以适应特定的尺寸或比例。在API 13...

    Android拍照、相册 获取图片后,裁剪图片

    在Android应用开发中,用户可能需要通过相机或者相册选择图片,然后进行裁剪以适应特定的需求,如头像设置、海报制作等。这个过程涉及到Android的多媒体处理、Intent交互以及自定义视图等多个知识点。下面我们将详细...

    android 自定义比例裁剪图片(拍照 相册)方式 自定义比例

    本文将深入探讨如何实现这一功能,包括使用相机拍照和从相册选择图片,并允许用户自定义裁剪比例,如16:9、10:7等。 首先,我们需要创建一个用于拍照的Activity。Android提供了`Camera`类和`Intent`来启动系统相机...

    Android相机相册图片裁剪

    在Android开发中,"Android相机相册图片裁剪"是一个常见的功能需求,用户可以通过选择相册中的图片或者直接拍照,然后进行裁剪以满足特定的显示需求,如创建圆形头像。下面将详细讲解实现这一功能所涉及的技术点、...

    图片选择(拍照,相册,裁剪)

    本文将深入探讨如何实现“图片选择(拍照,相册,裁剪)”这一功能,并针对描述中遇到的MIUI系统崩溃问题进行分析。 首先,我们需要提供用户两种图片获取方式:从相册选择和直接拍照。这通常通过调用系统相机和图库...

    读取相册,相册剪切,拍照获取图片,拍照剪切

    开发过程中,我们可以借助第三方库,如Glide或Picasso进行图片加载和展示,使用Universal Image Loader或 Fresco处理大图加载以避免内存溢出,使用Crop Intent库或Android-Image-Cropper进行图片裁剪操作。...

Global site tag (gtag.js) - Google Analytics