android 获取本地图片并转换为二进制byte数组
时间: 2024-10-11 13:17:22 浏览: 63
在Android中获取本地图片并将其转换为字节数组(Byte Array),通常需要以下几个步骤:
1. **加载图片**: 首先,你需要通过`FileInputStream`读取图片文件,这通常是从`res/drawable`目录下的资源图片开始,也可以从外部存储设备的路径。
```java
File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
FileInputStream fis = new FileInputStream(file);
```
2. **创建Bitmap对象**: 使用` BitmapFactory`将流转换为`Bitmap`对象,因为`Bitmap`本身不是序列化的,我们需要先将它转化为`byte[]`。
```java
Bitmap bitmap = BitmapFactory.decodeStream(fis);
```
3. **压缩或转为字节**: 如果图片过大,可以考虑压缩后再转换。例如,你可以使用`CompressFormat`和`OutputStream`来减小尺寸。
```java
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos); // 80%质量压缩
byte[] imageBytes = baos.toByteArray();
```
4. **关闭流**: 最后别忘了关闭输入流。
```java
fis.close(); // 关闭FileInputStream
```
完整的示例代码:
```java
try {
File file = new File(...); // 图片路径
FileInputStream fis = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); // 100%质量保存
byte[] imageBytes = baos.toByteArray();
fis.close(); // 关闭流
bitmap.recycle(); // 释放内存
// 现在imageBytes就是你的字节数组了
} catch (IOException e) {
e.printStackTrace();
}
```
阅读全文