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();
}
Cannot resolve symbol 'ImageIO'
# 翻译
无法解析 ImageIO
在 Android 开发中,javax.imageio.ImageIO
是不可用的
Android 是一个移动操作系统,它的核心库(Android SDK)是基于 Java 的,但为了优化性能和减少体积,Android 并没有完全实现 Java SE 的标准库
因此,许多 Java SE 的类(例如,ImageIO)在 Android 中不可用
通过 BitmapFactory.decodeByteArray
方法将图片 byte 数组解码为 Bitmap 对象
通过 Bitmap 对象的 getWidth 与 getHeight 方法获取图片的宽高
通过 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, "无法读取图片");
}
BitmapFactory.Options
BitmapFactory.Options
用于配置 BitmapFactory 的解码行为
将 BitmapFactory.Options
对象的 inJustDecodeBounds 属性设置为 true 时,BitmapFactory 只会解析图片的元数据(例如,宽高),而不会将图片加载到内存中
BitmapFactory.decodeByteArray
方法将不会返回 Bitmap 对象,而是将图片的宽高信息存储在 BitmapFactory.Options
对象中
通过 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);