java 安卓 截取图片_Android实现图片裁剪

1715aba59d8579234d8e829fd13eaa19.png

af901ba8a960da2862cab336b11e897a.png

MainActivity.java

package com.kale.imagetailor;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.drawable.BitmapDrawable;

import android.net.Uri;

import android.os.Bundle;

import android.provider.MediaStore;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends Activity {

private String tag = getClass().getSimpleName();

private static Uri imageUri;

Button imageTailorBt;

ImageView userIV;

File file;

FileManager fm;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

viewInit();

fm = new FileManager();

try {

file = fm.creatSDFile("Kale Image", "userImage.jpg");

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

}

/**

*每次开启时判断设置什么图片,如果有自定义的图片了,那么就用用户自己的头像

*/

private void setUserImage(){

userIV.setImageResource(R.drawable.ic_launcher);

//从sd卡中得到图片资源

String filepath = fm.getFileWholePath();

Bitmap bm = BitmapFactory.decodeFile(filepath);

if(bm != null){

//BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

userIV.setImageDrawable(new BitmapDrawable(bm));

}

else{

userIV.setImageResource(R.drawable.ic_launcher);

}

}

private void viewInit(){

userIV = (ImageView)findViewById(R.id.user_imageView_id);

imageTailorBt = (Button)findViewById(R.id.image_tailer_button_id);

imageTailorBt.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO 自动生成的方法存根

changeUserImage();

}

});

}

/**

*改变用户头像的方法,这里设定一个intent交给activity去处理

*/

protected void changeUserImage(){

Toast.makeText(getApplicationContext(), "更换头像", 0).show();

imageUri = Uri.parse("file:///sdcard/temp.jpg");

Intent intent = null;

intent = new Intent(Intent.ACTION_GET_CONTENT, null);

intent.setType("image/*");// 设置属性,表示获取任意类型的图片

intent.putExtra("crop", "true");// 设置可以滑动选选择区域的属性,注意这里是字符串"true"

intent.putExtra("aspectX", 1);// 设置剪切框1:1比例的效果

intent.putExtra("aspectY", 1);// 设置剪切框1:1比例的效果

intent.putExtra("outputX", 600);

intent.putExtra("outputY", 600);

intent.putExtra("scale", true);

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

intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);

intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

intent.putExtra("noFaceDetection", false); // no face detection

startActivityForResult(intent, 1);

}

/**

* @param uri

* @return 一个bitmap对象,用来设置图片

*/

private Bitmap decodeUriAsBitmap(Uri uri){

Bitmap bitmap = null;

try {

bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));

} catch (FileNotFoundException e) {

e.printStackTrace();

return null;

}

return bitmap;

}

/**

* 用来设置图片,并保持的本地

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

//不正确的情况下

if(resultCode != Activity.RESULT_OK){

Log.e(tag, "requestCode = " + requestCode);

Log.e(tag, "resultCode = " + resultCode);

Log.e(tag, "data = " + data);

return;

}

else{

Log.d(tag, "CHOOSE_A_BIG_PICTURE: data = " + data);

if(imageUri != null){

Bitmap photo = decodeUriAsBitmap(imageUri);

try {

//保存到本地文件

File pictureFile = file;

FileOutputStream fos = new FileOutputStream(pictureFile);

photo.compress(Bitmap.CompressFormat.JPEG, 100, fos);

fos.close();

Toast.makeText(this, "设置成功~", 0).show();

} catch (FileNotFoundException e) {

e.printStackTrace();

Toast.makeText(this, "保存路径不存在", 0).show();

} catch (IOException e) {

e.printStackTrace();

Toast.makeText(this, "设置图片失败", 0).show();

}

}

}

setUserImage();

}

}

FileManager.java

package com.kale.imagetailor;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import android.os.Environment;

/**

* @tips :

*

* @date :2014-6-30

*/

public class FileManager {

private String SD_PATH;

private String fileName;

private String dirName;

public String getSD_PATH() {

return SD_PATH;

}

public FileManager() {

//得到当前外部存储设备的目录

SD_PATH = Environment.getExternalStorageDirectory() + "/";

}

/**

* 在SD卡上创建文件

*

* @throws IOException

*/

public File creatSDFile(String dirName ,String fileName) throws IOException {

this.fileName = fileName;

this.dirName = dirName;

File file = new File(creatSDDir(dirName), fileName);

return file;

}

public String getFileWholePath(){

return SD_PATH + dirName + "/" + fileName;

}

/**

* 在SD卡上创建目录

*

* @param dirName

*/

public File creatSDDir(String dirName) {

File dir = new File(SD_PATH + dirName);

dir.mkdir();

return dir;

}

/**

* 判断SD卡上的文件夹是否存在

*/

public boolean isFileExist(String fileName ,String dirName){

File file = new File(SD_PATH +dirName+"/"+ fileName);

return file.exists();

}

/**

* 将一个InputStream里面的数据写入到SD卡中

*/

public File saveToSdCard(String dirName,String fileName,InputStream input){

File file = null;

OutputStream output = null;

try{

//创建目录

creatSDDir(dirName);

//建立文件

file = creatSDFile(dirName ,fileName);

output = new FileOutputStream(file);

byte buffer [] = new byte[5 * 1024];

int count = 0;

while((count = input.read(buffer)) != -1){

String str = new String(buffer,0,count);

//str = new String(str.getBytes("iso-8859-1"),"utf-8");

System.out.println("---------File Manager----start--------");

System.out.println(str);

System.out.println("---------File Manager-----end-------");

output.write(buffer);

}

output.flush();

}

catch(Exception e){

e.printStackTrace();

}

finally{

try{

output.close();

}

catch(Exception e){

e.printStackTrace();

}

}

return file;

}

}

main_activity.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="${relativePackage}.${activityClass}" >

android:id="@+id/image_tailer_button_id"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:text="裁剪图片" />

android:id="@+id/user_imageView_id"

android:layout_width="300dp"

android:layout_height="300dp"

android:layout_above="@+id/image_tailer_button_id"

android:layout_centerHorizontal="true"

android:layout_marginBottom="100dp"

android:src="@drawable/ic_launcher" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值