PICUtil类:
/**
* 删除原图
*/
public class PicUtil {
public void deletePic(String picPath) {
if (!TextUtils.isEmpty(picPath)) {
File f = new File(picPath)
if (f.exists()) {
f.delete()
}
}
}
/**
* 压缩图片 质量压缩法
*
* @param image
* @return
*/
public Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream()
image.compress(Bitmap.CompressFormat.JPEG, 100, baos)
int options = 100
while (baos.toByteArray().length / 1024 > 100 && options > 10) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset()
image.compress(Bitmap.CompressFormat.JPEG, options, baos)
options -= 10
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray())
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null)
return bitmap
}
/**
* 保存图片
*
* @param photo
* @param spath
* @return
*/
public boolean saveImage(Bitmap photo, String spath) {
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(spath, false))
photo.compress(Bitmap.CompressFormat.JPEG, 100, bos)
bos.flush()
bos.close()
} catch (Exception e) {
e.printStackTrace()
return false
}
return true
}
public String imgToBase64(String imgPath) {
ByteArrayOutputStream out = null
try {
Bitmap bitmap = null
if (imgPath != null && imgPath.length() > 0) {
bitmap = BitmapFactory.decodeFile(imgPath)
}
out = new ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)
out.flush()
out.close()
byte[] imgBytes = out.toByteArray()
return Base64.encodeToString(imgBytes, Base64.DEFAULT)
} catch (Exception e) {
e.printStackTrace()
return null
} finally {
try {
out.flush()
out.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
}
public String imgToBase64(Bitmap bitmap) {
ByteArrayOutputStream out = null
try {
out = new ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)
out.flush()
out.close()
byte[] imgBytes = out.toByteArray()
return Base64.encodeToString(imgBytes, Base64.DEFAULT)
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace()
return null
} finally {
try {
out.flush()
out.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
}
public String getRealPathFromURI(Context mContext,Uri contentUri) {
String res = null
String[] proj = { MediaStore.Images.Media.DATA }
Cursor cursor = mContext.getContentResolver().query(contentUri, proj, null, null, null)
if(cursor.moveToFirst()){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
res = cursor.getString(column_index)
}
cursor.close()
return res
}
MainAcvitity。Java
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_PICK_IMAGE = 1;
private static final int REQUEST_CODE_CAPTURE_CAMEIA = 0;
private static final int REQUEST_CODE_CROP = 2;
private ImageView iv;
private AlertDialog.Builder builder;
private String picPath = "";
private PicUtil picutil;
private String str_base64 = "";
private boolean boolean_delete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
picutil = new PicUtil();
iv = (ImageView) findViewById(R.id.iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
createDialog();
}
});
}
public void createDialog() {
builder = new AlertDialog.Builder(this);
builder.setTitle("请选择");
builder.setItems(new String[]{"启动照相机", "打开手机相册", "取消选择"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
switch (arg1) {
case 0:
getImageFromCamera();
break;
case 1:
getImageFromAlbum();
break;
default:
break;
}
}
});
builder.create().show();
}
protected void getImageFromAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
}
protected void getImageFromCamera() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
picPath = getPicName();
getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(picPath)));
getImageByCamera.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(getImageByCamera, REQUEST_CODE_CAPTURE_CAMEIA);
} else {
Toast.makeText(getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show();
}
}
protected void cropPic(File file) {
if (!file.exists()) {
Toast.makeText(getApplicationContext(), "图片不存在", Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.setDataAndType(Uri.fromFile(file), "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_CODE_CROP);
}
protected void cropPic(Uri uri) {
Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_CODE_CROP);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
Toast.makeText(this, "操作失败", Toast.LENGTH_SHORT).show();
return;
}
switch (requestCode) {
case REQUEST_CODE_PICK_IMAGE:
boolean_delete = false;
Uri uri = data.getData();
cropPic(uri);
break;
case REQUEST_CODE_CAPTURE_CAMEIA:
boolean_delete = true;
cropPic(new File(picPath));
break;
case REQUEST_CODE_CROP:
if (boolean_delete) {
picutil.deletePic(picPath);
}
Bitmap bmap = data.getParcelableExtra("data");
Bitmap newBmap = picutil.compressImage(bmap);
iv.setImageBitmap(newBmap);
break;
default:
break;
}
}
public String getPicName() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Date date = new Date();
return Environment.getExternalStorageDirectory().toString() + "/" + date.getTime() + ".jpg";
}
return null;
}