图片剪裁工具类

来源:互联网 发布:武汉发展前景知乎 编辑:程序博客网 时间:2024/06/04 18:30

方式一(调整图片的大小 ,先将图片缩小或者放大,然后对图片进行裁剪,让不同的图片都能占满不同的手机尺寸的屏幕)
/**
* 调整图片的大小 (先将图片缩小或者放大,然后对图片进行裁剪,让不同的图片都能占满不同的手机尺 寸的屏幕)
* @param boxWidth
* @param boxHeight
* @param bitmap 原图
* @return
*/

public static Bitmap resizeBitmap(int boxWidth, int boxHeight, Bitmap bitmap) {    float scaleX = ((float) boxWidth) / ((float) bitmap.getWidth());    float scaleY = ((float) boxHeight) / ((float) bitmap.getHeight());    float scale = 1.0f;    if ((scaleX >= scaleY && scaleY >= 1.0f) || (scaleX > scaleY && scaleX < 1.0f) || (scaleX >= 1.0f && scaleY < 1.0f)) {        scale = scaleX;    }    if ((scaleY > scaleX && scaleX >= 1.0f) || (scaleY > scaleX && scaleY < 1.0f) || (scaleX < 1.0f && scaleY >= 1.0f)) {        scale = scaleY;    }    Matrix matrix = new Matrix();    matrix.postScale(scale, scale);    Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);    Bitmap alterBitmap = Bitmap.createBitmap(newBitmap, 0, 0, boxWidth, boxHeight);    newBitmap = null;    return alterBitmap;}

方式二:给定图片维持宽高比缩放后,截取正中间的正方形部分
在做相册应用的过程中,需要得到一个压缩过的缩略图但,同时我还希望得到的bitmap能够是正方形的,以适应正方形的imageView,传统设置inSampleSize压缩比率的方式只是压缩了整张图片,如果一个图片的长宽差距较大,则展示出来的时候会有拉伸的现象,因此正确的做法是在压缩之后,对bitmap进行裁剪。
/**
* 给定图片维持宽高比缩放后,截取正中间的正方形部分
* @param bitmap 原图
* @param edgeLength 希望得到的正方形部分的边长
* @return 缩放截取正中部分后的位图。
*/

public static Bitmap centerSquareScaleBitmap(Bitmap bitmap, int edgeLength){    if(null == bitmap || edgeLength <= 0)    {        return  null;    }    Bitmap result = bitmap;    int widthOrg = bitmap.getWidth();    int heightOrg = bitmap.getHeight();    if(widthOrg > edgeLength && heightOrg > edgeLength)    {        //压缩到一个最小长度是edgeLength的bitmap        int longerEdge = (int)(edgeLength * Math.max(widthOrg, heightOrg) / Math.min(widthOrg, heightOrg));        int scaledWidth = widthOrg > heightOrg ? longerEdge : edgeLength;        int scaledHeight = widthOrg > heightOrg ? edgeLength : longerEdge;        Bitmap scaledBitmap;        try{            scaledBitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);        }        catch(Exception e){            return null;        }        //从图中截取正中间的正方形部分。        int xTopLeft = (scaledWidth - edgeLength) / 2;        int yTopLeft = (scaledHeight - edgeLength) / 2;        try{            result = Bitmap.createBitmap(scaledBitmap, xTopLeft, yTopLeft, edgeLength, edgeLength);            scaledBitmap.recycle();        }        catch(Exception e){            return null;        }    }    return result;}

需要注的是bitmap参数一定要是从原图得到的,如果是已经经过BitmapFactory inSampleSize压缩过的,可能会不是到正方形。

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人力资源部 人力资 人力社保局 深圳人力师 四川人力资源和社会保障网 四川人力资源社会保障网 四川人力资源社会保障厅 四川省人力资源社会保障厅 四川人力资源保障厅 四川省人力资源和社会保障厅 四川人力资源网 四川人力资源 人力资源社会保障局 重庆人力资源社会保障网 四川人力与社会保障网 珠海人力资源网 人力资源和社会保障局 珠海人力资源 四川人力社会保障网 人力资源保障 山东省人力资源和社会保障厅 重庆人力资源和社会保障网 人力资源保障局 四川人力资源和社会保障厅 重庆人力资源网 人力资源模块 甘肃省人力资源和社会保障厅 甘肃省人力资源社会保障厅 山东省人力资源社会保障厅 人力资源大模块 人力资源社会保障部 四川省人力和社会保障厅 淄博市人力资源和社会保障网 甘肃人力资源社会保障厅 重庆人力和社会保障网 淄博市人力资源社会保障网 山东省人力资源保障厅 贵阳人力资源网 重庆人力社会保障网 重庆人力资源 广州市人力资源社会保障局