📅  最后修改于: 2023-12-03 15:23:47.060000             🧑  作者: Mango
Glide 是一款强大的图片加载库,不仅可以加载网络上的图片,还支持从 URI 或本地资源中加载图片。在某些情况下,我们可能需要在应用程序中保存这些图片,例如用户需要将图片下载到本地并进行后续处理或分享等操作。
本文将介绍如何从 Glide 中保存 URI 图像并将其保存到本地文件系统中。
从 Glide 中加载图像
以下是从 URI 中加载图像的示例代码:
Glide.with(context)
.load(uri)
.into(imageView);
Glide 可以轻松地从 URI 加载图像并将其显示在 ImageView 上。
将图像保存到本地文件系统中
为了将图像保存到本地文件系统中,我们需要做以下操作:
a. 向应用程序请求写入文件的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在 AndroidManifest.xml 文件中添加此行,以获得写入文件的权限。
b. 使用 Glide 的 downloadOnly()
方法将图像下载到本地文件系统中。
Glide.with(context)
.load(uri)
.downloadOnly(new SimpleTarget<File>() {
@Override
public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
// resource 为下载保存的文件对象
}
});
downloadOnly()
方法只会将图像下载到本地文件系统中,不会将其显示在 ImageView 上。在下载完成后,可以从 SimpleTarget
的 onResourceReady()
方法中获取文件对象。
c. 将文件复制到另一个位置以保留文件。
private void copyFile(File sourceFile, File destFile) throws IOException {
if (!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
} finally {
if (source != null) {
source.close();
}
if (destination != null) {
destination.close();
}
}
}
以上代码将给出一个复制文件的方法,以将文件保存到本地文件系统的另一个位置。
获取文件保存位置的 Uri。
private Uri getOutputMediaFileUri() {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyAppName");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_" + timeStamp + ".jpg");
return Uri.fromFile(mediaFile);
}
以上代码将返回图像文件的 Uri,以便在其他应用程序中共享图像。
整合代码
Glide.with(context)
.load(uri)
.downloadOnly(new SimpleTarget<File>() {
@Override
public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyAppName");
if (!file.exists()) {
file.mkdir();
}
File newFile = new File(file, "img.jpg");
try {
if (!newFile.exists()) {
newFile.createNewFile();
copyFile(resource, newFile);
}
} catch (IOException e) {
e.printStackTrace();
}
Uri uri = Uri.fromFile(newFile);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(uri);
context.sendBroadcast(intent);
}
});
此代码将从 Glide 中下载图像,将它复制到本地文件系统中,并使用 MediaScanner 通知图像库更新。
通过使用 Glide 的 downloadOnly()
方法,我们可以轻松地将加载的图像保存到本地文件系统中,并在此处演示了如何将其复制到其他位置以保持图像,并使用 MediaScanner 更新图像库。