通过拍照或者图库获取图片并上传服务器

时间:2022-09-18 23:02:34

1.打开照相机获取图片:

Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_CODE);
这个都是很简单的 只需要设置action然后startactivityforresult就可以

if(data!=null){
Bundle bundle=data.getExtras();
if(bundle!=null){
Bitmap bitmap=bundle.getParcelable("data");
Uri uri=saveBitmap(bitmap);
startImageZoom(uri);
}
}
裁剪工具用的自带的裁剪工具,传入的参数必须是file类型的uri 所以贴出上面两个函数的代码如下

public void startImageZoom(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",150);
intent.putExtra("outputY",150);
intent.putExtra("return-data",true);
startActivityForResult(intent, CROP_CODE);
}
public Uri saveBitmap(Bitmap bitmap){
File file=new File(Environment.getExternalStorageDirectory()+"/picture");
if(!file.exists()){
file.mkdir();
}
File files=new File(file.getAbsolutePath()+"xingshang.png");
try {
FileOutputStream outputStream=new FileOutputStream(files);
bitmap.compress(Bitmap.CompressFormat.PNG,86,outputStream);
outputStream.flush();
outputStream.close();
return Uri.fromFile(files);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
2.就是从图库获取图片 也是很简单的

Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent,TUKU_CODE);
获取到图片相应的也进入裁剪页面

if(data == null)
{
return;
}
Uri uri;
uri = data.getData();
Uri fileUri = convertUri(uri);
startImageZoom(fileUri);


需要注意的是,我们从图库获取回来的uri是content类型的,需要我们将它转换成file类型的才能传入到裁剪函数中,

public Uri convertUri(Uri uri){
InputStream is=null;
try {
is=getContentResolver().openInputStream(uri);
Bitmap bitmap= BitmapFactory.decodeStream(is);
is.close();
return saveBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}



两种获取方式完了都会跳入裁剪,裁剪完成我们就可以获取图片显示在页面并且同时将图片上传服务器

if(data == null)
{
return;
}
Bundle extras = data.getExtras();
if(extras == null){
return;
}
Bitmap bm = extras.getParcelable("data");
ImageView imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(bm);
sendImage(bm);

sendImage就是上传的函数,具体代码如下

public Uri saveBitmap(Bitmap bitmap){
File file=new File(Environment.getExternalStorageDirectory()+"/picture");
if(!file.exists()){
file.mkdir();
}
File files=new File(file.getAbsolutePath()+"xingshang.png");
try {
FileOutputStream outputStream=new FileOutputStream(files);
bitmap.compress(Bitmap.CompressFormat.PNG,86,outputStream);
outputStream.flush();
outputStream.close();
return Uri.fromFile(files);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
服务器用的是本地的用xampp生成的,比较简单,对应的imageupload  php文件代码如下

<?php
$filename = date("YmdHis");
$file = fopen($filename.".png", "w");
$data = base64_decode($_POST['img']);


fwrite($file, $data);


fclose($file);

?>

核心就是获取输入 创建文件 然后写入 关闭文件 就这么几点,很简单的~.~ 这样就实现了获取图片并上传的目的,其他的制作圆形头像什么的就是简单的处理了000000