梳理一下从中学习的知识点。欢迎大家一起交流。
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和我一起交流,尊重原创!
欢迎关注技术公众号,微信号搜索ColorfulCode 代码男人
分享技术文章,投稿分享,不限技术种类,不限技术深度,让更多人因为分享而受益。