Android 开发中 javax.imageio.ImageIO 获取图片宽高不可用(替代方案:使用 Bitmap、使用 BitmapFactory.Options)

问题描述与处理策略

1、问题描述
try {
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
    BufferedImage bufferedImage = ImageIO.read(byteArrayInputStream);

    if (bufferedImage != null) {
        // 获取图片的宽度和高度
        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();

        System.out.println("图片宽度:" + width);
        System.out.println("图片高度:" + height);
    } else {
        System.out.println("无法读取图片");
    }
} catch (IOException e) {
    e.printStackTrace();
}
  • 上述从图片 byte 数组中获取图片的宽高的代码,在 Android 开发中不可用
Cannot resolve symbol 'ImageIO'
# 翻译

无法解析 ImageIO
2、问题原因
  1. 在 Android 开发中,javax.imageio.ImageIO 是不可用的

  2. Android 是一个移动操作系统,它的核心库(Android SDK)是基于 Java 的,但为了优化性能和减少体积,Android 并没有完全实现 Java SE 的标准库

  3. 因此,许多 Java SE 的类(例如,ImageIO)在 Android 中不可用

3、处理策略
(1)使用 Bitmap
  1. 通过 BitmapFactory.decodeByteArray 方法将图片 byte 数组解码为 Bitmap 对象

  2. 通过 Bitmap 对象的 getWidth 与 getHeight 方法获取图片的宽高

  3. 通过 Bitmap 对象的 recycle 方法释放占用的内存资源

Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
if (bitmap != null) {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Log.i(TAG, "图片宽度:" + width);
    Log.i(TAG, "图片高度:" + height);
    bitmap.recycle();
} else {
    Log.i(TAG, "无法读取图片");
}
(2)使用 BitmapFactory.Options
  1. BitmapFactory.Options 用于配置 BitmapFactory 的解码行为

  2. BitmapFactory.Options 对象的 inJustDecodeBounds 属性设置为 true 时,BitmapFactory 只会解析图片的元数据(例如,宽高),而不会将图片加载到内存中

  3. BitmapFactory.decodeByteArray 方法将不会返回 Bitmap 对象,而是将图片的宽高信息存储在 BitmapFactory.Options 对象中

  4. 通过 BitmapFactory.Options 对象的 outWidth 与 outHeight 属性获取图片的宽高

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true; // 只解码图片的边界信息,不加载完整图片
BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);

int width = options.outWidth;
int height = options.outHeight;

Log.i(TAG, "图片宽度:" + width);
Log.i(TAG, "图片高度:" + height);

你可能感兴趣的:(Android,-,问题清单,android,java-ee,java,android-studio,android,studio,安卓,android,runtime)