调用相机拍照和图册中的图片并且对图片进行裁剪

在写Android应用的时候,很多时候需要调用自带的相机拍照或者直接从图库中选取图片并且对图片进行裁剪。

下面就讲述如何实现。

1. 调用相机

(1) 使用Intent调用相机,但是在启动Intent之前要设置一个文件路径,用来存储相机照下来的照片。

(2)然后使用startActivityForResult启动Intent。

(3)然后在protected void onActivityResult(int requestCode, int resultCode, Intent data)函数中获得拍照得到的照片

2. 调用图库中的图片和裁剪照片

步骤和调用相机类似,只是Intent的参数和获得照片时候的处理不一样,具体看下面的代码。

代码如下:

    private static final int NONE = 0;
    private static final int PHOTO_GRAPH = 1;// 拍照
    private static final int PHOTO_ZOOM = 2; // 缩放
    private static final int PHOTO_RESOULT = 3;// 结果
    private static final String IMAGE_UNSPECIFIED = "image/*";

	/*拍照获得图片*/
	public void onCameraGetPictureClick(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_GRAPH);
	}
	/*从相册获得图片*/
	public void onBrowsePictureClick(View v){
		Intent intent = new Intent();
		intent.setType(IMAGE_UNSPECIFIED);
		intent.setAction(Intent.ACTION_GET_CONTENT);
		startActivityForResult(intent,PHOTO_ZOOM);
	}

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

        if (data == null)
            return;

        // 读取相册缩放图片
        if (requestCode == PHOTO_ZOOM) {
            startPhotoZoom(data.getData());
        }
        // 处理结果
        if (requestCode == PHOTO_RESOULT) {
            Bundle extras = data.getExtras();
            if (extras != null) {
                Bitmap photo = extras.getParcelable("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件
                //此处可以把Bitmap保存到sd卡中,具体请看:http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html
                //companyLicenseData.setImageBitmap(photo); //把图片显示在ImageView控件上
            }

        }
        super.onActivityResult(requestCode, resultCode, data);
    }

	/**
     * 收缩图片
     *
     * @param uri
     */
    public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");//调用Android系统自带的一个图片剪裁页面,
        intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
        intent.putExtra("crop", "true");//进行修剪
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 300);
        intent.putExtra("outputY", 300);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, PHOTO_RESOULT);
    }
时间: 2024-11-06 17:44:06

调用相机拍照和图册中的图片并且对图片进行裁剪的相关文章

从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器

调用相机拍照获取图片: 跳转到到拍照界面: Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //下面这句指定调用相机拍照后的照片存储的路径 mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png"; takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new F

Android调用相机拍照获取原始照片

Android调用相机拍照,获取原始照片的解决方案如下:注意要有读取文件的权限,需要添加如下的权限:<uses-permission android:name="android.permission.CAMERA" />按钮点击事件: public void click(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//相机捕捉图片的意图 intent.putExtra(Me

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

android中调用相机拍照返回null的问题的终极解决办法

private ArrayList<String> mImageList; private static final int REQUEST_CAMERA = 5; // 相机拍照标记 private static final int CAMERA_REQUEST_CODE = 1; /** * 拍照获取照片 */ protected void selectPicFromCamera() { if (!SDCardUtils.isSDCardEnable()){ //不存在sd卡 Toast.

iOS 拍照、从相册选图并对图片进行裁剪

裁剪图片的功能借助了Github上的项目AGSimpleImageEditorView.不多说,一步步的看Demo的实现过程吧: 1.下载Github上这个项目工程到本地并将其拖入到自己的工程中(前提是你已经建立了工程),由于AGSimpleImageEditorView不支持ARC,所以还要做相应的配置,设置编译器标签-fno-objc-arc: 另外,由于使用到图形处理和图片处理,所以还要另外导入两个库,如下图 完成后,按command+B编译试试,如果没问题,说明工程集成成功了,下面就可以

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

最近做的一个项目中,有这样一个要求,在浏览器中调用系统的拍照功能或者选择文件,然后将文件上传到服务器,类似修改头像.        简单而言,就是在一个html页面中有这样一段代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image"> 刚开始的时候,没有感觉很难的,因为在UC浏览器.

移动端调用相机拍照上传图片

<input type="file" capture="camera" accept="image/*" id="filetest" name="filetest"> 看这代码,重要的是capture="camera" accept="image/*".

微信小程序 从本地相册选择图片或使用相机拍照chooseImage()和预览图片previewImage()

要实现的效果如图所示 wxml: <view class='suggest_img'>请提供相关问题的截图或照片</view> <view class='img_box'> <block wx:for="{{add_img}}" wx:key="{{index}}"> <view class='have_img'> <image src='{{item}}' class='sug_picture' d

Android调用相机实现拍照并裁剪图片,调用手机中的相冊图片并裁剪图片

在 Android应用中,非常多时候我们须要实现上传图片,或者直接调用手机上的拍照功能拍照处理然后直接显示并上传功能,以下将讲述调用相机拍照处理图片然后显示和调用手机相冊中的图片处理然后显示的功能,要想实现上传功能.一般都是上传到数据库中,将imageView中的图片取出来然后存到数据库中就可以. 以下讲述实现的步骤: 1. 调用相冊中的图片裁剪然后显示. 1.1 使用Intent获取从相冊中选择的照片. 1.2 对获取的图片进行裁剪处理.裁剪处理也是使用Intent调用的Android自带的裁