android调用原生图片裁剪后图片尺寸缩放的解决方法

发布时间:2019-10-09 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了android调用原生图片裁剪后图片尺寸缩放的解决方法脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在安卓开发中,如果对拍照后的图片进行图片裁剪,如果是调用系统的裁剪,如下:

/* 
  * 裁剪图片 
  */ 
 private void cropPhoto() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri,"image/*"); 
  intent.putExtra("crop","true"); 
  // intent.putExtra("aspectX",3); 
  // intent.putExtra("aspectY",2); 
  intent.putExtra("outputX",cropX); 
  intent.putExtra("outputY",cropY); 
  intent.putExtra("scale","true"); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); 
  intent.putExtra("return-data","false"); 
  intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString()); 
  intent.putExtra("noFaceDetection","true"); // no face detection 
  startActivityForResult(intent,CROP_PICTURE); 
 } 

这样,就开始对图片进行裁剪了,但是这样会有一个问题,当裁剪框选择的图片与录入的cropX,xropY的形状不同时,比如传入的参数值是个w>h的长方形,而选择框选择的是w<h的长方形时,这样会导致裁剪的图片结果会被压缩变形。

为了解决压缩变形的问题,我的思路是这样的:

1,先对图片进行裁剪,不设置默认的裁剪图片尺寸。

2.对裁剪后的图片再进行图片的缩放。缩放是采角的矩阵的方式进行的缩放

代码如下:

1.

/* 
  * 裁剪图片,*/ 
 private void cropPhotoAndZoom() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri,"true"); 
  intent.putExtra("scale",CROP_PICTURE_ANDZOOM); 
 } 

2.

/** 
  * 裁剪后,根据裁剪框的长宽比,同时根据图片的需求缩放尺寸进行缩放 
  * 
  * @param path 
  * @param x 
  *   原始的需求尺寸width 
  * @param y 
  *   heiht 
  * @return 
  */ 
 public static Bitmap toBigZoom(String path,float x,float y) { 
  Log.e("bitmaputil","path---" + path + "--x--y--" + x + "--" + y); 
  Bitmap bitmap = BitmapFactory.decodeFile(path); 
  if (bitmap != null) { 
 
   int w = bitmap.getWidth(); 
   int h = bitmap.getHeight(); 
   float sx = 0; 
   float sy = 0; 
   if ((float) w / h >= 1) { 
    sx = (float) y / w; 
    sy = (float) x / h; 
    Log.e("bitmaputil---","w/h--->=1"); 
   } else { 
    sx = (float) x / w; 
    sy = (float) y / h; 
    Log.e("bitmaputil---","w/h---<1"); 
   } 
   Matrix matrix = new Matrix(); 
   matrix.postScale(sx,sy); // 长和宽放大缩小的比例 
   Bitmap resizeBmp = Bitmap.createBitmap(bitmap,w,h,matrix,true); 
   Log.e("bitmaputil---","w---" + resizeBmp.getWidth() + "h--" + resizeBmp.getHeight()); 
   return resizeBmp; 
  } 
 
  return null; 
 } 

2中代码,通过判断裁剪框的w,h比来设置图片是放大是横向放大,还是竖向放大,放大后的效果基本上能满足需求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是脚本之家为你收集整理的android调用原生图片裁剪后图片尺寸缩放的解决方法全部内容,希望文章能够帮你解决android调用原生图片裁剪后图片尺寸缩放的解决方法所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

快乐,其实很简单!比如有我~

关注我升职加薪

标签: