Android实现裁剪照片功能
1. 从相册选择照片进行裁剪
从相册选择照片并裁剪:
/**
* 从相册选择照片进行裁剪
*/
private void cropfromgallery() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(intent.action_pick);//pick an item from the data
intent.settype("image/*");//从所有图片中进行选择
intent.putextra("crop", "true");//设置为裁切
intent.putextra("aspectx", 1);//裁切的宽比例
intent.putextra("aspecty", 1);//裁切的高比例
intent.putextra("outputx", 600);//裁切的宽度
intent.putextra("outputy", 600);//裁切的高度
intent.putextra("scale", true);//支持缩放
intent.putextra("return-data", false);
intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, select_pic);
}
将裁减好的照片显示在显示在imagaview上:
case select_pic:
if (resultcode==result_ok) {
try {
bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
openinputstream(imageuri));//将imageuri对象的图片加载到内存
imgshow.setimagebitmap(bitmap);
} catch (filenotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
break;
程序运行效果图:
2. 从相机拍取照片进行裁剪
控制相机拍照并将照片保存到指定位置:
/**
* 从相机拍取照片进行裁剪
*/
private void cropfromtake() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(mediastore.action_image_capture);//设置action为拍照
intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
startactivityforresult(intent, take_pic);
}
裁剪已经排好的照片并显示在imageview上:
case take_pic:
if (resultcode==result_ok) {
cropimageuri(imageuri, 600, 600, crop_pic);
}
break;
/**
* 裁剪指定uri对应的照片
* @param imageuri:uri对应的照片
* @param outputx:裁剪宽
* @param outputy:裁剪高
* @param requestcode:请求码
*/
private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
intent intent = new intent("com.android.camera.action.crop");
intent.setdataandtype(imageuri, "image/*");
intent.putextra("crop", "true");
intent.putextra("aspectx", 1);
intent.putextra("aspecty", 1);
intent.putextra("outputx", outputx);
intent.putextra("outputy", outputy);
intent.putextra("scale", true);
intent.putextra(mediastore.extra_output, imageuri);
intent.putextra("return-data", false);
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, requestcode);
}
程序运行效果图:
3.完整项目代码:
package com.jph.cp;
import java.io.file;
import java.io.filenotfoundexception;
import android.support.v7.app.actionbaractivity;
import android.content.intent;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.net.uri;
import android.os.bundle;
import android.os.environment;
import android.provider.mediastore;
import android.view.view;
import android.widget.imageview;
/**
* 从相册选择照片进行裁剪,从相机拍取照片进行裁剪
* @author jph
* date:2014.10.09
*/
public class mainactivity extends actionbaractivity {
private final static int select_pic=0x123;
private final static int take_pic=0x124;
private final static int crop_pic=0x125;
private uri imageuri;
private imageview imgshow;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
//初始化imageuri
imageuri=uri.fromfile(new file(environment.getexternalstoragedirectory(), "test.jpg"));
imgshow=(imageview)findviewbyid(r.id.imgshow);
}
@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
// todo auto-generated method stub
switch (requestcode) {
case select_pic:
if (resultcode==result_ok) {
try {
bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
openinputstream(imageuri));//将imageuri对象的图片加载到内存
imgshow.setimagebitmap(bitmap);
} catch (filenotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
break;
case take_pic:
if (resultcode==result_ok) {
cropimageuri(imageuri, 600, 600, crop_pic);
}
break;
case crop_pic:
if (resultcode==result_ok) {
try {
bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
openinputstream(imageuri));//将imageuri对象的图片加载到内存
imgshow.setimagebitmap(bitmap);
} catch (filenotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
break;
default:
break;
}
super.onactivityresult(requestcode, resultcode, data);
}
/**
* 裁剪指定uri对应的照片
* @param imageuri:uri对应的照片
* @param outputx:裁剪宽
* @param outputy:裁剪高
* @param requestcode:请求码
*/
private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
intent intent = new intent("com.android.camera.action.crop");
intent.setdataandtype(imageuri, "image/*");
intent.putextra("crop", "true");
intent.putextra("aspectx", 1);
intent.putextra("aspecty", 1);
intent.putextra("outputx", outputx);
intent.putextra("outputy", outputy);
intent.putextra("scale", true);
intent.putextra(mediastore.extra_output, imageuri);
intent.putextra("return-data", false);
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, requestcode);
}
public void croppic(view view) {
switch (view.getid()) {
case r.id.btncropfromgallery://从相册选择照片进行裁剪
cropfromgallery();
break;
case r.id.btncropfromtake://从相机拍取照片进行裁剪
cropfromtake();
break;
default:
break;
}
}
/**
* 从相机拍取照片进行裁剪
*/
private void cropfromtake() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(mediastore.action_image_capture);//设置action为拍照
intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
startactivityforresult(intent, take_pic);
}
/**
* 从相册选择照片进行裁剪
*/
private void cropfromgallery() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(intent.action_pick);//pick an item from the data
intent.settype("image/*");//从所有图片中进行选择
intent.putextra("crop", "true");//设置为裁切
intent.putextra("aspectx", 1);//裁切的宽比例
intent.putextra("aspecty", 1);//裁切的高比例
intent.putextra("outputx", 600);//裁切的宽度
intent.putextra("outputy", 600);//裁切的高度
intent.putextra("scale", true);//支持缩放
intent.putextra("return-data", false);
intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, select_pic);
}
}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
看完文章,还可以扫描下面的二维码下载快手极速版领4元红包
除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。
邀请两个好友奖最高196元,如下图所示:






