Android 拍照(获取原图),选择照片并且剪切图片
2015-04-11 14:39
337 查看
好了废话不多说,看代码模块讲解.
这里是拍照对话框,调用系统自带,实际到项目中,大部分会采用自定义对话框,这里就不麻烦了,用系统的方便.
第一个是拍照:
imageUri 是为了得到原图,如果不这样写,那么你得到的就是相机的压缩图,大部分人不愿意这样做.所以这里就指定了路径.
第二个是选择相册:
这些参数和上面有一些不一样,这是为了得到选择图片的指定大小.
剪切图片代码:
通过图片的设定的宽高去调用系统裁剪得到剪切后的图片,然后返回onActivityResult进行处理.
通过图片指定的 uri获得Bitmap.
上传图片代码:
得到图片文件,调用下面这方法进行上次.我把 部分参数改为中文提示了.
这块是上传图片的方法,是用apache开源库做的.
好了,到此拍照上传选择图片剪切讲解结束了.有问题留言.
点我下载代码
/** * 对话框 选择相片或者拍照 * @param context */ public void showPicturePicker(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("图片来源"); builder.setNegativeButton("取消", null); builder.setItems(new String[] { "拍照", "相册" }, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = null; switch (which) { case 0: intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PICTURE); break; case 1: intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 3); intent.putExtra("aspectY", 4); intent.putExtra("outputX", w + 10); intent.putExtra("outputY", h + 10); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); intent.putExtra("noFaceDetection", false); startActivityForResult(intent, CHOOSE_PICTURE); break; } } }); builder.create().show(); }
这里是拍照对话框,调用系统自带,实际到项目中,大部分会采用自定义对话框,这里就不麻烦了,用系统的方便.
第一个是拍照:
Intent intent = null; intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PICTURE);
imageUri 是为了得到原图,如果不这样写,那么你得到的就是相机的压缩图,大部分人不愿意这样做.所以这里就指定了路径.
第二个是选择相册:
intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 3); intent.putExtra("aspectY", 4); intent.putExtra("outputX", w + 10); intent.putExtra("outputY", h + 10); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); intent.putExtra("noFaceDetection", false); startActivityForResult(intent, CHOOSE_PICTURE);
这些参数和上面有一些不一样,这是为了得到选择图片的指定大小.
剪切图片代码:
/** * 剪切失败 * * @param uri * @param outputX * @param outputY * @param requestCode */ private void cropImageUri(Uri uri, int outputX, int outputY, int requestCode) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 3); intent.putExtra("aspectY", 4); intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra("return-data", false); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent, requestCode); }
通过图片的设定的宽高去调用系统裁剪得到剪切后的图片,然后返回onActivityResult进行处理.
通过图片指定的 uri获得Bitmap.
/** * 获取图片 * * @param uri * @return * @throws IOException */ private Bitmap decodeUriAsBitmap(Uri uri) { Bitmap bitmap = null; FileOutputStream outputStream = null; try { bitmap = BitmapFactory.decodeStream(context.getContentResolver() .openInputStream(uri)); outputStream = new FileOutputStream("/mnt/sdcard/test/usericon.png"); bitmap.compress(CompressFormat.PNG, 100, outputStream); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } finally { try { outputStream.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } mBitmap = bitmap; return bitmap; }
上传图片代码:
/** * 上传图像 */ private void uploadUserImage() { Log.d("ppp", "setUserImage()-----"); final File file = new File("/mnt/sdcard/test/usericon.png"); if (file.exists()) { new Thread() { @Override public void run() { // TODO Auto-generated method stub super.run(); boolean ff = postFile.postFile(file); handle(); } }; } }
得到图片文件,调用下面这方法进行上次.我把 部分参数改为中文提示了.
这块是上传图片的方法,是用apache开源库做的.
/** * * @param f上传的图片文件 * @return */ public boolean postFile(File file) { if (file == null) { return false; } String url = "上传路径"; HttpClient client = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse response = null; try { MultipartEntity mpEntity = new MultipartEntity(); long l = file.length(); Log.i("tag", l + ""); ContentBody cbFile = new FileBody(file, "image/png"); ContentBody cbuserid = new StringBody("用户 ID"); mpEntity.addPart("avatar", cbFile);// 上传文件 mpEntity.addPart("user_ticket", cbuserid);// 上传用户名 httpPost.setEntity(mpEntity); response = client.execute(httpPost); if (response != null && response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String json = EntityUtils.toString(response.getEntity(), "UTF-8"); JSONObject jObject = new JSONObject(json); if (jObject != null) { if (jObject.has("status")) { int value = jObject.getInt("status"); if (value == 1) { return true; } } } } } catch (Exception e) { e.printStackTrace(); return false; } return false; }
好了,到此拍照上传选择图片剪切讲解结束了.有问题留言.
点我下载代码
相关文章推荐
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- TakePhoto是一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库,目前最新版本3.0.0。
- Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和以下有区别)
- Android--使用手机拍照获取图片路径,小米手机选择照片问题处理
- 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库
- Android-->拍照/相册选择照片(从Uri中获取图片路径)
- android 选择图片拍照并剪切照片上传到服务器
- 如何兼容所有Android版本选择照片或拍照然后裁剪图片--基于FileProvider和动态权限的实现
- 安卓选择图片或拍照获取的照片过大时,裁剪图片
- android 7.0从相册或拍照获取图片并剪切,包含权限获取
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- Android 调用相机APP获取拍照图片和从相册选择图片
- Android 4.4以上拍照或者从图库选择图片,获取图片路径
- android 调用系统相册选取照片或者打开相机拍照获取图片
- Android 实现拍照,选择图片并剪切保存
- android 调用系统相册选取照片或者打开相机拍照获取图片
- Android开发之获取相册照片和获取拍照照片三之 图片旋转
- Android获取图片资源之——拍照后在程序中显示照片
- Android获取图片资源之——拍照后在程序中显示照片
- Android获取图片资源之——拍照后在程序中显示照片