您的位置:首页 > 其它

安卓从相机取出图片,并截图,然后对bitmap转换成base64的处理,和对base64转为bitmap的处理

2015-11-29 12:35 435 查看
import java.io.ByteArrayOutputStream;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Bitmap.Config;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.PorterDuff.Mode;

import android.graphics.PorterDuffXfermode;

import android.graphics.Rect;

import android.graphics.RectF;

import android.net.Uri;

import android.os.Environment;

import android.provider.MediaStore;

import android.util.Base64;

import android.view.WindowManager;

public class ImageOperation {

// 零时文件

public static final String IMAGE_FILE_NAME = "temp_head_image.jpg";

// 调用系统资源照相机的代号

public static final int REQUEST_CODE_CAPTURE_CAMEIA = 0;

// 调用系统资源相册的代号

public static final int REQUEST_CODE_PICK_IMAGE = 1;

// 调用系统资源修改照片的代号

public static final int PHOTO_REQUEST_CUT = 2;

/**

* 将Bitmap格式图片转换成base64加密串

*

* @param bitmap

* @return

*/

public static String BitmapToString(Bitmap bitmap) {

String des = null;

try {

ByteArrayOutputStream out = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

out.flush();

out.close();

byte[] buffer = out.toByteArray();

byte[] encode = Base64.encode(buffer, Base64.DEFAULT);

des = new String(encode);

} catch (Exception e) {

e.printStackTrace();

}

return des;

}

/**

* 将base64加密串转换成Bitmap类型

*

* @param str

* @return

*/

public static Bitmap StringToBitmap(String str) { // ///////////解码base64

Bitmap bitmap = null;

try {

byte[] bitmapArray = Base64.decode(str, Base64.DEFAULT);

bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);

return bitmap;

} catch (Exception e) {

return null;

}

}

public static <T extends Activity> Bitmap getBitmap(Intent data) {

Bitmap bitmap = null;

try {

bitmap = data.getParcelableExtra("data");

// bitmap = toRoundCorner(bitmap, 30);// 调用圆角处理方法

} catch (Exception e) {

e.printStackTrace();

}

return bitmap;

}

/* 修改从照相机获取的图片 */

public static <T extends Activity> void modifyImageFromCamera(T activity) {

File temp = new File(Environment.getExternalStorageDirectory() + "/" + ImageOperation.IMAGE_FILE_NAME);

startPhotoZoom(activity, Uri.fromFile(temp));

}

/* 修改从相册获取的图片 */

public static <T extends Activity> void modifyImageFromAlbum(T activity, Intent data) {

try {

startPhotoZoom(activity, data.getData());

} catch (NullPointerException e) {

e.printStackTrace();// 用户点击取消操作

}

}

/* 从照相机获取图片 */

public static <T extends Activity> void getImageFromCamera(T activity) {

Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// 下面这句指定调用相机拍照后的照片存储的路径

intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.fromFile(new File(Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME)));

activity.startActivityForResult(intentFromCapture, REQUEST_CODE_CAPTURE_CAMEIA);

}

/* 从相册获取图片 */

public static <T extends Activity> void getImageFromAlbum(T activity) {

Intent intentFromGallery = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

intentFromGallery.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");

// Intent intentFromGallery = new Intent(Intent.ACTION_GET_CONTENT,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

// intentFromGallery.setType("image/*"); // 设置文件类型

activity.startActivityForResult(intentFromGallery, REQUEST_CODE_PICK_IMAGE);

}

/**

* 裁剪图片方法实现

*

* @param uri

*/

private static <T extends Activity> void startPhotoZoom(T activity, Uri uri) {

//System.out.println(uri.getPath());

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

// 设置裁剪

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 200);

intent.putExtra("outputY", 200);

intent.putExtra("return-data", true);

// 锁定图片比例

intent.putExtra("scale", true);

activity.startActivityForResult(intent, PHOTO_REQUEST_CUT);

}

/**

* 将图片变为圆角

*

* @param bitmap

* 原Bitmap图片

* @param pixels

* 图片圆角的弧度(单位:像素(px))

* @return 带有圆角的图片(Bitmap 类型)

*/

private static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);

Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Paint paint = new Paint();

final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

final RectF rectF = new RectF(rect);

final float roundPx = pixels;

paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);

paint.setColor(color);

canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap, rect, rect, paint);

return output;

}

private ImageOperation() {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: