Android裁剪头像上传到远程服务器

来源:互联网 发布:win7开机时间优化 编辑:程序博客网 时间:2024/05/01 10:29

  梳理一下从中学习的知识点。欢迎大家一起交流。

 android从图库选择图片或者拍照后对图片进行裁剪,裁剪后上传到腾讯云服务器。

// 从图库选择按钮
public void tuku(View v) {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// intent.setType("image/*");
startActivityForResult(intent, tuku);
}

定义一个标记变量:private static int tuku = 2;

选择后执行onActivityResult事件:

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

  //如果点击的从图库选择的按钮

  if (requestCode == tuku) {

                    //判断是否选择了图片
if (data == null) {
return;
}

                       //在这里得到图片的url,这里得到的是contenturl需要将其转化为fileurl;
Uri uri = data.getData();
try {
Uri fileuri = conver(uri);//url转化方法
startZoom(fileuri);//调用系统裁剪头像
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (requestCode == caijian) {
if (data == null) {
return;
}
Bundle bundle = data.getExtras();
Bitmap bitmap = bundle.getParcelable("data");
round.setImageBitmap(bitmap);//将图片绑定控件

 
}

}

///前方高能////////////////////////

// 将bitamp转化为file类型的uri
private Uri savebitmap(Bitmap bitmap) {
File file = new File(Environment.getExternalStorageDirectory()
+ "/touxiang.ceshi");
if (!file.exists()) {
file.mkdir();
}
File ima = new File(file.getAbsoluteFile() + "test.png");
try {
FileOutputStream fileOutputStream = new FileOutputStream(ima);


bitmap.compress(Bitmap.CompressFormat.PNG, 95, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
return Uri.fromFile(ima);
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;


}


// 将contenturi转化为fileuri
private Uri conver(Uri uri) throws IOException {
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
return savebitmap(bitmap);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}


}


// 图像裁剪
private void startZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 500);
intent.putExtra("outputY", 500);
intent.putExtra("return-data", true);
startActivityForResult(intent, caijian);


}


// 上传监听事件
public void up(View v) {
Bitmap bm = ((BitmapDrawable) round.getDrawable()).getBitmap();
if (bm==null) {
Toast.makeText(MainActivity.this, "未选择头像", 0).show();
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 90, stream);
byte [] bytes=stream.toByteArray();
String ima=new String(Base64.encodeToString(bytes, Base64.DEFAULT));
AsyncHttpClient asyncHttpClient=new AsyncHttpClient();
RequestParams params=new RequestParams();//保存传入的参数
params.add("img", ima);
asyncHttpClient.post("服务端url", params,new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "上传成功", 0).show();
}

@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "上传失败", 0).show();
}
});


};

/******************************服务端代码就比较简单了****************************//

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>上传图片至服务器</title>
</head>
<body>
   <?php
    $filename=date("YmdHis");
         
         $file=fopen($filename.".png", "w");
$data=base64_decode($_POST['img']);
fwrite($file, $data);
fclose($file);
   ?>
</body>
</html>

欢迎大家加我的qq:1306214077和我一起交流,尊重原创!


  

原创粉丝点击