先创建照片存储uri
public static Uri createImagePathUri(Context context) {
Uri imageFilePath = null;
String status = Environment.getExternalStorageState();
SimpleDateFormat timeFormatter = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA);
long time = System.currentTimeMillis();
String imageName = timeFormatter.format(new Date(time));
ContentValues values = new ContentValues(3);
values.put(MediaStore.Images.Media.DISPLAY_NAME, imageName);
values.put(MediaStore.Images.Media.DATE_TAKEN, time);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
if (status.equals(Environment.MEDIA_MOUNTED)) {
imageFilePath = context.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} else {
imageFilePath = context.getContentResolver().insert(
MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
}
return imageFilePath;
}
一、activity中调用系统相机获取图片。
//启动系统相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createImagePathUri(context));
startActivityForResult(intent, req_code_opencamera);
//拍照返回
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == MainActivity.this.RESULT_CANCELED) {
return;
}
switch (requestCode) {
case req_code_opencamera:
//照片已存储在路径uri,可进行想要的操作(裁剪图片等)
break;
case req_code_openlocalpic:
//选择本地照片返回,获得照片uri,可进行想要的操作(裁剪图片等)
Uri localUri=data.getData();
braek;
case req_code_croppic:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), cropImageUri);
break;
}
}
二、预览本地照片并选择
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, req_code_openlocalpic);
三、调用系统裁剪图片
public static void cropImage2(Activity activity, Uri srcUri) {
//创建裁剪后照片的存储uri
//srcUri为被选中的照片的uri
Uri cropImageUri = createImagePathUri(activity);
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(srcUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUtils.cropImageUri);
intent.putExtra("return-data", false);
activity.startActivityForResult(intent, req_code_croppic);
}
四、压缩图片
public static void compresspic(String fileName){
Bitmap bitmap=BitmapFactory.decodeFile(fileName);
File outputFile=new File(fileName);
if (!outputFile.exists()) {
outputFile.getParentFile().mkdirs();
//outputFile.createNewFile();
}else{
outputFile.delete();
}
FileOutputStream out = null;
try {
out = new FileOutputStream(outputFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 10, out);
//参数一是压缩后的照片格式,参数二是压缩质量0-100
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
五、以图片中心裁剪最大正方形(一般应用于相册预览等)
//将图片裁剪成正方形
public static Bitmap centerSquareScaleBitmap(Bitmap bitmap) {
if (null == bitmap) {
return null;
}
Bitmap result = bitmap;
int widthOrg = bitmap.getWidth();
int heightOrg = bitmap.getHeight();
//以图片短的边为标准
int length;
length=widthOrg>=heightOrg?heightOrg:widthOrg;
//以图片中心为中心裁剪
int x=(widthOrg-length)/2;
int y=(heightOrg-length)/2;
result=Bitmap.createBitmap(bitmap,x,y,length,length);
return result;
}
六、bitmap转byte[]
// 将bitmap转为byte格式的数组
public static byte[] bmpToByteArray(final Bitmap bitmap, final boolean needRecycle) {
// 创建字节数组输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// Bitmap.compress()方法的参数format可设置JPEG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
if (needRecycle) {
bitmap.recycle();
}
// 将字节数组输出流转为byte数组
byte[] result = outputStream.toByteArray();
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
第一次发博客,内容简单实用,有错误可私信,谢谢。