gpt4 book ai didi

android - 文件的图像 URI

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:00 25 4
gpt4 key购买 nike

我有一个图像 URI,使用以下方法检索:

public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}

这对于需要图像 URI 等的 Intent 来说效果非常好(所以我确定 URI 是有效的)。

但是现在我想把这个Image URI保存到SD卡上的一个文件中。这更困难,因为 URI 并不真正指向 SDCARD 或应用程序上的文件。

我是否必须先从 URI 创建一个位图,然后将位图保存在 SDCARD 上,或者是否有更快的方法(最好是不需要先转换为位图的方法)。

(我看过这个答案,但它返回找不到文件 - https://stackoverflow.com/a/13133974/1683141)

最佳答案

问题是 Images.Media.insertImage() 给你的 Uri 本身并不是图像文件。它是图库中的数据库条目。因此,您需要做的是从该 Uri 读取数据并使用此答案将其写入外部存储中的新文件 https://stackoverflow.com/a/8664605/772095

这不需要创建位图,只需将链接到 Uri 的数据复制到新文件中即可。

您可以使用如下代码使用 InputStream 获取数据:

InputStream in = getContentResolver().openInputStream(imgUri);

更新

这是完全未经测试的代码,但您应该可以这样做:

Uri imgUri = getImageUri(this, bitmap);  // I'll assume this is a Context and bitmap is a Bitmap

final int chunkSize = 1024; // We'll read in one kB at a time
byte[] imageData = new byte[chunkSize];

try {
InputStream in = getContentResolver().openInputStream(imgUri);
OutputStream out = new FileOutputStream(file); // I'm assuming you already have the File object for where you're writing to

int bytesRead;
while ((bytesRead = in.read(imageData)) > 0) {
out.write(Arrays.copyOfRange(imageData, 0, Math.max(0, bytesRead)));
}

} catch (Exception ex) {
Log.e("Something went wrong.", ex);
} finally {
in.close();
out.close();
}

关于android - 文件的图像 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com