拍照选择-相册图片裁剪后保存在指定的地址

原创 2015年07月07日 11:38:55

1,功能介绍:拍照或者是选取相册照片截取,存入指定的目录

===============================选取照片的activity==================================

package com.example.testandroid;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;


import com.example.testandroid.constance.Constant;


import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Media;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.TextView;


/**
 * 说明:主要用于选择文件操作
 */


public class SelectPicActivity extends Activity implements OnClickListener {
private TextView takePhotoBtn, albumBtn, cancelBtn;
private Intent lastIntent;


private static final int REQUEST_PHOTOALBUM = 1;// 相册
private static final int REQUEST_PHOTOGRAPH = 2;// 照相
private static final int REQUEST_PHOTOCROP = 3;// 裁剪
private Uri cameraUri; // 照相后图片保存路径
private String address;
private File fileDir;;// 保存图片的根目录

private static final String IMAGE_FILE_LOCATION = "file:///sdcard//LegalDaily/imageTemp/";//temp file
private Uri cropImageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.select_bottom_dialog);
initView();
}


/**
* 初始化加载View
*/
private void initView() {
takePhotoBtn = (TextView) findViewById(R.id.takephoto_text);
takePhotoBtn.setOnClickListener(this);
albumBtn = (TextView) findViewById(R.id.album_text);
albumBtn.setOnClickListener(this);
cancelBtn = (TextView) findViewById(R.id.cancle_text);
cancelBtn.setOnClickListener(this);
lastIntent = getIntent();

fileDir = new File(Constant.imageDir);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.takephoto_text:
// 拍照
photoGraph();
break;
case R.id.album_text:// 相册
photoAlbum();
break;
case R.id.cancle_text:
finish();
break;
default:
break;
}
}


/**
* 相册
*/
private void photoAlbum() {
Intent openAlbumIntent = new Intent(Intent.ACTION_PICK,
Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openAlbumIntent, REQUEST_PHOTOALBUM);
}


/**
* 照相
*/
private void photoGraph() {
try {
Intent openCameraIntent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
String sdcardState = Environment.getExternalStorageState();
File file = null;
if (Environment.MEDIA_MOUNTED.equals(sdcardState)) {
// 是否有xxx.jpeg文件
file = new File(Constant.imageDir + System.currentTimeMillis()
+ ".JPEG");
}
if (file != null) {
cameraUri = Uri.fromFile(file);
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
startActivityForResult(openCameraIntent, REQUEST_PHOTOGRAPH);
}


} catch (Exception e) {
e.printStackTrace();
}
}


private void startPhotoZoom(Uri uri) {
try {
// 获取系统时间 然后将裁剪后的图片保存至指定的文件夹
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
address = sDateFormat.format(new java.util.Date());
cropImageUri = Uri.parse(IMAGE_FILE_LOCATION + address+ ".JPEG");
Intent intent = new Intent("com.android.camera.action.CROP");
// 照片URL地址
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 500);
intent.putExtra("outputY", 500);
intent.putExtra("scale", true);
// 输出路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, cropImageUri);
// 输出格式
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// 不启用人脸识别
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", false);
startActivityForResult(intent, REQUEST_PHOTOCROP);
} catch (Exception e) {
e.printStackTrace();
}

}


/**
* 保存裁剪之后的图片数据

* @param picdata
*/
private void setPicToView(Intent data) {
FileInputStream fis;
try {
fis = new FileInputStream(Constant.imageDir + address + ".JPEG");
Bitmap bitmap = BitmapFactory.decodeStream(fis); // /把流转化为Bitmap图片
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bitmapByte = baos.toByteArray();
lastIntent.putExtra("bitmap", bitmapByte);
Constant.imagePath = new File(Constant.imageDir + address + ".JPEG");
setResult(Activity.RESULT_OK, lastIntent);
finish();
} catch (FileNotFoundException e) {
e.printStackTrace();

}

/**

* @param x
*            图像的宽度
* @param y
*            图像的高度
* @param image
*            源图片
* @param outerRadiusRat
*            圆角的大小
* @return 圆角图片
*/
public static Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) {
// 根据源文件新建一个darwable对象
Drawable imageDrawable = new BitmapDrawable(image);


// 新建一个新的输出图片
Bitmap output = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);


// 新建一个矩形
RectF outerRect = new RectF(0, 0, x, y);


// 产生一个红色的圆角矩形
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint);


// 将源图片绘制到这个圆角矩形上
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
imageDrawable.setBounds(0, 0, x, y);
canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
imageDrawable.draw(canvas);
canvas.restore();


return output;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == 0)
return;
switch (requestCode) {
case REQUEST_PHOTOGRAPH:// 拍照返回
startPhotoZoom(cameraUri);
break;
case REQUEST_PHOTOALBUM:// 相册返回
if (data != null) {
Uri uri = data.getData();
if (uri != null)
startPhotoZoom(uri);
}
break;
case REQUEST_PHOTOCROP:// 裁剪返回
if (data != null)
setPicToView(data);
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}

}

===================================上面代码的一些地址参数Constance========================================

package com.example.testandroid.constance;
import java.io.File;
import android.os.Environment;
public class Constant {
public static String imageDir = Environment.getExternalStorageDirectory()
.getPath() + "/LegalDaily/imageTemp/";
public static File rootFile = new File(
Environment.getExternalStorageDirectory() + "/LegalDaily");


public static File imagePath = new File(rootFile, "crop.jpg");

}


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

拍照和相册选取图片并裁剪得到图片的相应路径上传服务器、
  • Android_Cll
  • Android_Cll
  • 2017年03月28日 11:18
  • 13133

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

今天主要实现一个小Demo,我们知道在Instagram或Path上,头像都是正方形的,得到这种头像图片肯定要对原图进行截取,今天抽时间整理了下,先记录如下!早前写过一篇《IOS学习笔记22—文件操作...
  • iotjin
  • iotjin
  • 2015年10月15日 22:00
  • 3865

完美解决拍照裁剪图片完成之后崩溃问题

使用拍照,相册选择相片和裁剪功能基本上都是使用系统自带的Intent来实现 步骤:点击按钮,弹出对话框,选择拍照或者从相册选择图片,并且保存到SD卡中,并且显示在Imageview中 首先最终结果存...
  • wk843620202
  • wk843620202
  • 2016年05月16日 23:17
  • 4649

Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地

        首先,我本人以前没接触过Android又是刚工作一段时间,前段时间比较忙,今天来跟大家分享下最近的收获吧,最近项目中需要一个拍照以及修剪图片,并保存修剪之后的图片到相对应的位置区...
  • u013429350
  • u013429350
  • 2016年06月14日 13:54
  • 268

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

  • 2016年01月19日 10:14
  • 2.29MB
  • 下载

Android图片裁剪(拍照和从相册选择)

一、获取图片的两种方式 1.获取图片的两种方式的简单使用 Android获取图片有两种途径,拍照和从相册选取,我们都只到这两种的简单用法: 拍照 Intent intent...
  • kemeng7758
  • kemeng7758
  • 2016年04月05日 15:04
  • 912

兼容SDK4.4(api19)拍照、相册选择图片裁剪压缩上传头像

最近的项目,后续会独立出一个demo,下面贴出代码,有一些代码时弹出popupwindow等业务的大家忽略,有时间会精简一下,可以直接从 takePhoto()和selectPhoto()看起,要注...
  • lizz821
  • lizz821
  • 2017年12月04日 18:46
  • 40

安卓 系统相册图片选择+拍照返回图片+图片裁剪

  • 2015年07月07日 09:21
  • 19KB
  • 下载

Android拍照及图片裁剪、调用系统相册(兼容6.0以上权限处理及7.0以上文件管理)

最近工作修改较旧的项目时,涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。 刚好把功能修改完,把代码简单地贴一下,方便以后使用。...
  • donkor_
  • donkor_
  • 2017年10月25日 14:51
  • 664

Android 拍照/相册 获取图片裁剪显示

import java.io.ByteArrayOutputStream; import java.io.File; import android.app.Activity; import andr...
  • liangjiu2009
  • liangjiu2009
  • 2014年02月08日 09:56
  • 2192
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:拍照选择-相册图片裁剪后保存在指定的地址
举报原因:
原因补充:

(最多只允许输入30个字)