首页 > 编程知识 正文

android 华为部分手机剪裁图片模糊问题

时间:2023-05-03 16:33:53 阅读:257695 作者:2986

参考链接

首先 定义一张图片地址

private String IMAGE_FILE_NAME;private Uri imageUri; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");// HH:mm:ss //获取当前时间Date date = new Date(System.currentTimeMillis());IMAGE_FILE_NAME = simpleDateFormat.format(date) + "temp.jpg";imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME));

跳转相机 相册选择图片

private View.OnClickListener itemsOnClick = new View.OnClickListener() { @Override public void onClick(View v) { selectPicPopupWindow.dismiss(); switch (v.getId()) { // 拍照 case R.id.takePhotoBtn: Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //下面这句指定调用相机拍照后的照片存储的路径 takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(takeIntent, REQUESTCODE_TAKE); break; // 相册选择图片 case R.id.pickPhotoBtn: Intent pickIntent = new Intent(Intent.ACTION_PICK, null); // 如果朋友们要限制上传到服务器的图片类型时可以直接写如:"image/jpeg 、 image/png等的类型" pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(pickIntent, REQUESTCODE_PICK); break; } } };

接收图片回调

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_CANCELED) { return; } else { switch (requestCode) { case REQUESTCODE_PICK:// 直接从相册获取 try { startPhotoZoom(data.getData()); } catch (NullPointerException e) { e.printStackTrace();// 用户点击取消操作 } break; case REQUESTCODE_TAKE:// 调用相机拍照 File temp = new File(Environment.getExternalStorageDirectory() + "/" + IMAGE_FILE_NAME); startPhotoZoom(Uri.fromFile(temp)); break; case REQUESTCODE_CUTTING:// 取得裁剪后的图片 if (data != null) { if (android.os.Build.BRAND.equals("HUAWEI")) { Bitmap bitmap = decodeUriAsBitmap(imageUri); urlpath = FileUtil.saveFile(RichTextActivity.this, "head1.jpg", bitmap); File file = new File(urlpath); httpUploadImage(file); }else { setPicToView(data); } } break; } } } /** * 裁剪图片方法实现 * 判断手机厂商 * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 intent.putExtra("crop", "true"); intent.putExtra("aspectX", 4); intent.putExtra("aspectY", 3); // outputX outputY 是裁剪图片宽高 if (android.os.Build.BRAND.equals("HUAWEI")) { intent.putExtra("outputX", 1800); intent.putExtra("outputY", 1350); 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", true); } else { intent.putExtra("outputX", 1800); intent.putExtra("outputY", 1350); intent.putExtra("return-data", true); } startActivityForResult(intent, REQUESTCODE_CUTTING); }

方法 根据uri转换成比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; } /** * 保存裁剪之后的图片数据 * * @param picdata */ private void setPicToView(Intent picdata) { Bundle extras = picdata.getExtras(); if (extras != null) { // 取得SDCard图片路径做显示 Bitmap photo = extras.getParcelable("data"); urlpath = FileUtil.saveFile(RichTextActivity.this, "head1.jpg", photo); File file = new File(urlpath); httpUploadImage(file); //上传图片到服务器 } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。