Android图片处理工具类BitmapUtils

Android图片处理工具类BitmapUtils,第1张

概述Android图片的处理工具类BitmapUtils,供大家参考,具体内容如下项目中经常会用到图片,所以在这先简单的总结一下。闲言少叙,上代码。

AndroID图片的处理工具类BitmapUtils,供大家参考,具体内容如下

项目中经常会用到图片,所以在这先简单的总结一下。闲言少叙,上代码。

package com.lvstudio.myapp.utils;import androID.content.Context;import androID.graphics.Bitmap;import androID.graphics.BitmapFactory;import androID.graphics.Canvas;import androID.graphics.Matrix;import androID.graphics.PixelFormat;import androID.graphics.drawable.BitmapDrawable;import androID.graphics.drawable.Drawable;import androID.util.displayMetrics;import androID.vIEw.WindowManager;import java.io.ByteArrayinputStream;import java.io.ByteArrayOutputStream;import java.io.file;import java.io.fileNotFoundException;import java.io.fileOutputStream;import java.io.IOException;import java.io.inputStream;/** * Created by LvStudio on 2016/11/7. */public class BitmapUtils {  /**   * 屏幕分辨率和指定清晰度的图片压缩方法   *   * @param context   * @param image  Bitmap图片   * @return   */  public static Bitmap comp(Context context,Bitmap image) {    int maxLength = 1024 * 1024; // 预定的图片最大内存,单位byte    // 压缩大小    ByteArrayOutputStream baos = new ByteArrayOutputStream();    image.compress(Bitmap.CompressFormat.JPEG,100,baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中    int options = 100;    while (baos.toByteArray().length > maxLength) { // 循环判断,大于继续压缩      options -= 10;// 每次都减少10      baos.reset();// 重置baos即清空baos      image.compress(Bitmap.CompressFormat.JPEG,options,baos);//PNG 压缩options%    }    // 压缩尺寸    ByteArrayinputStream bais = new ByteArrayinputStream(baos.toByteArray());    BitmapFactory.Options opts = new BitmapFactory.Options(); // 选项对象(在加载图片时使用)    opts.inJustDecodeBounds = true; // 修改选项,只获取大小    BitmapFactory.decodeStream(bais,null,opts);// 加载图片(只得到图片大小)    // 获取屏幕大小,按比例压缩    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);    int scaleX = opts.outWIDth / manager.getDefaultdisplay().getWIDth(); // X轴缩放比例(图片宽度/屏幕宽度)    int scaleY = opts.outHeight / manager.getDefaultdisplay().getHeight(); // Y轴缩放比例    int scale = scaleX > scaleY ? scaleX : scaleY; // 图片的缩放比例(X和Y哪个大选哪个)    opts.inJustDecodeBounds = false; // 修改选项,不只解码边界    opts.inSampleSize = scale > 1 ? scale : 1; // 修改选项,加载图片时的缩放比例    return BitmapFactory.decodeStream(bais,opts); // 加载图片(得到压缩后的图片)  }  /**   * 屏幕分辨率和指定清晰度的图片压缩方法   *   * @param context   * @param path  图片的路径   * @return   */  public static Bitmap comp(Context context,String path) {    return compressImage(getUsableImage(context,path));  }  /**   * 获取屏幕分辨率的Bitmap   *   * @param context   * @param path  图片的路径   * @return   */  public static Bitmap getUsableImage(Context context,String path) {    BitmapFactory.Options opts = new BitmapFactory.Options(); // 选项对象(在加载图片时使用)    opts.inJustDecodeBounds = true; // 修改选项,只获取大小    BitmapFactory.decodefile(path,opts); // 加载图片(只得到图片大小)    displayMetrics metrics = new displayMetrics();    metrics = context.getApplicationContext().getResources().getdisplayMetrics();    int scaleX = opts.outWIDth / metrics.wIDthPixels; // X轴缩放比例(图片宽度/屏幕宽度)    int scaleY = opts.outHeight / metrics.heightPixels; // Y轴缩放比例    int scale = scaleX > scaleY ? scaleX : scaleY; // 图片的缩放比例(X和Y哪个大选哪个)    opts.inJustDecodeBounds = false; // 修改选项,加载图片时的缩放比例    return BitmapFactory.decodefile(path,opts); // 加载图片(得到缩放后的图片)  }  /**   * 压缩图片清晰度,到指定大小   *   * @param image   * @return   */  public static Bitmap compressImage(Bitmap image) {    int maxLength = 1024 * 1024; // (byte)    ByteArrayOutputStream baos = new ByteArrayOutputStream();    image.compress(Bitmap.CompressFormat.JPEG,baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中    int options = 100;    while (baos.toByteArray().length > maxLength) { // 循环判断如果压缩后图片是否大于1mb,大于继续压缩      options -= 10;// 每次都减少10      baos.reset();// 重置baos即清空baos      image.compress(Bitmap.CompressFormat.JPEG,baos);// 这里压缩options%,把压缩后的数据存放到baos中    }    ByteArrayinputStream isBm = new ByteArrayinputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayinputStream中    Bitmap bitmap = BitmapFactory.decodeStream(isBm,null);// 把ByteArrayinputStream数据生成图片    return bitmap;  }  /**   * 指定分辨率和清晰度的图片压缩方法   *   * @param fromfile   * @param tofile   * @param reqWIDth   * @param reqHeight   * @param quality   */  public static voID transImage(String fromfile,String tofile,int reqWIDth,int reqHeight,int quality) {    Bitmap bitmap = BitmapFactory.decodefile(fromfile);    int bitmapWIDth = bitmap.getWIDth();    int bitmapHeight = bitmap.getHeight();    // 缩放的尺寸    float scaleWIDth = (float) reqWIDth / bitmapWIDth;    float scaleHeight = (float) reqHeight / bitmapHeight;    Matrix matrix = new Matrix();    matrix.postscale(scaleWIDth,scaleHeight);    // 产生缩放后的Bitmap对象    Bitmap resizeBitmap = Bitmap.createBitmap(bitmap,bitmapWIDth,bitmapHeight,matrix,false);    // 保存到文件    bitmap2file(tofile,quality,resizeBitmap);    if (!bitmap.isRecycled()) {      // 释放资源,以防止OOM      bitmap.recycle();    }    if (!resizeBitmap.isRecycled()) {      resizeBitmap.recycle();    }  }  /**   * Bitmap转换为文件   *   * @param tofile   * @param quality   * @param bitmap   * @return   */  public static file bitmap2file(String tofile,int quality,Bitmap bitmap) {    file capturefile = new file(tofile);    fileOutputStream out = null;    try {      out = new fileOutputStream(capturefile);      if (bitmap.compress(Bitmap.CompressFormat.JPEG,out)) {        out.flush();        out.close();      }    } catch (fileNotFoundException e) {      e.printstacktrace();    } catch (IOException e) {      e.printstacktrace();    }    return capturefile;  }  /**   * Drawable转换为Bitmap   *   * @param drawable   * @return   */  public static Bitmap drawabletoBitamp(Drawable drawable) {    int w = drawable.getIntrinsicWIDth();    int h = drawable.getIntrinsicHeight();    Bitmap.Config config = drawable.getopacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888        : Bitmap.Config.RGB_565;    Bitmap bitmap = Bitmap.createBitmap(w,h,config);    // 注意,下面三行代码要用到,否在在VIEw或者surfacevIEw里的canvas.drawBitmap会看不到图    Canvas canvas = new Canvas(bitmap);    drawable.setBounds(0,w,h);    drawable.draw(canvas);    return bitmap;  }  // Bitmap、Drawable、inputStream、byte[] 之间转换  /**********************************************************/  // 1. Bitmap to inputStream  public static inputStream bitmap2input(Bitmap bitmap,int quality) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG,baos);    return new ByteArrayinputStream(baos.toByteArray());  }  public static inputStream bitmap2input(Bitmap bitmap) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG,baos);    return new ByteArrayinputStream(baos.toByteArray());  }  // 2. Bitmap to byte[]  public static byte[] bitmap2ByteArray(Bitmap bitmap,baos);    return baos.toByteArray();  }  public static byte[] bitmap2ByteArray(Bitmap bitmap) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG,baos);    return baos.toByteArray();  }  // 3. Drawable to byte[]  public static byte[] drawable2ByteArray(Drawable drawable) {    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();    ByteArrayOutputStream out = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG,out);    return out.toByteArray();  }  // 4. byte[] to Bitmap  public static Bitmap byteArray2Bitmap(byte[] bytes) {    return BitmapFactory.decodeByteArray(bytes,bytes.length);  }}

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

总结

以上是内存溢出为你收集整理的Android图片处理工具类BitmapUtils全部内容,希望文章能够帮你解决Android图片处理工具类BitmapUtils所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存