如何从图库中获取图像的图像格式

发布于 2025-01-08 05:42:43 字数 117 浏览 0 评论 0原文

我想知道我从图库中获取的图像的图像格式(即 JPFG/PNG 等)。

我的需要是从设备的图库中获取图像并将其以 Base64 格式发送到服务器,但服务器想知道图像格式。

任何帮助表示赞赏。

I want to know the Image format (i.e. JPFG/PNG etc) of the images which I am getting from the gallery.

My need is to pic images from the gallery of the device and send it to server in Base64 format but the server wants to know image format.

Any help is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我早已燃尽 2025-01-15 05:42:43

编辑:

使用以下方法从图库中检索图像的 MIME 类型:

public static String GetMimeType(Context context, Uri uriImage)
{
    String strMimeType = null;

    Cursor cursor = context.getContentResolver().query(uriImage,
                        new String[] { MediaStore.MediaColumns.MIME_TYPE },
                        null, null, null);

    if (cursor != null && cursor.moveToNext())
    {
        strMimeType = cursor.getString(0);
    }

    return strMimeType;
}

这将返回类似“image/jpeg”的内容。


上一个答案:

您可以使用以下代码将图库中的图像转换为您想要的格式,例如 JPG:

ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream();

Bitmap bitmapImage = BitmapFactory.decodeStream(
                         getContentResolver().openInputStream(myImageUri));

if (bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, outputBuffer))
{
    // Then perform a base64 of the byte array...
}

这样您就可以控制发送到服务器的图像格式,甚至可以压缩更多以节省带宽。 ;)

Edited:

Use the following method to retrieve the MIME type of an image from the gallery:

public static String GetMimeType(Context context, Uri uriImage)
{
    String strMimeType = null;

    Cursor cursor = context.getContentResolver().query(uriImage,
                        new String[] { MediaStore.MediaColumns.MIME_TYPE },
                        null, null, null);

    if (cursor != null && cursor.moveToNext())
    {
        strMimeType = cursor.getString(0);
    }

    return strMimeType;
}

This will return something like "image/jpeg".


Previous answer:

You can use the following code to convert the image from the Gallery to the format you want, like a JPG:

ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream();

Bitmap bitmapImage = BitmapFactory.decodeStream(
                         getContentResolver().openInputStream(myImageUri));

if (bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, outputBuffer))
{
    // Then perform a base64 of the byte array...
}

This way you will control the image format your are sending to the server, and can even compress more to save bandwidth. ;)

遥远的她 2025-01-15 05:42:43

可以仅通过路径获取 MIME 类型。

 public static String getMimeType(String imageUrl) {
        String extension = MimeTypeMap.getFileExtensionFromUrl(imageUrl);
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                extension);
        // Do Manual manipulation if needed
        if ("image/x-ms-bmp".equals(mimeType)) {
            mimeType = "image/bmp";
        }
        return mimeType;
    }

It is possible to get MIME type with path alone.

 public static String getMimeType(String imageUrl) {
        String extension = MimeTypeMap.getFileExtensionFromUrl(imageUrl);
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                extension);
        // Do Manual manipulation if needed
        if ("image/x-ms-bmp".equals(mimeType)) {
            mimeType = "image/bmp";
        }
        return mimeType;
    }
臻嫒无言 2025-01-15 05:42:43

您可以通过执行以下操作从文件路径获取文件扩展名:

int dotposition= filePath.lastIndexOf(".");
String format = filePath.substring(dotposition + 1, file.length());

这可以解决问题吗?

You can get the file extension from the file path by doing something like this:

int dotposition= filePath.lastIndexOf(".");
String format = filePath.substring(dotposition + 1, file.length());

Does that fix the issue?

美人如玉 2025-01-15 05:42:43

您可以使用内置的 Android 图像解码器 BitmapFactory

如果您处理 File 您可以使用此 KTX 函数:

fun File.getImageMimeType(): String? {
    if (!exists()) {
        return null
    }
    val options = BitmapFactory.Options()
    options.inJustDecodeBounds = true
    BitmapFactory.decodeFile(path, options)
    return options.outMimeType
}

如果您处理 Uri 您可以使用此 KTX 函数:

fun Uri.getImageMimeType(context: Context): String? {
    val options = BitmapFactory.Options()
    options.inJustDecodeBounds = true
    context.contentResolver.openInputStream(this)?.use {
        BitmapFactory.decodeStream(it, null, options)
    }
    return options.outMimeType
}

You can use built-in Android image decoder BitmapFactory.

If you deal with a File you can use this KTX function:

fun File.getImageMimeType(): String? {
    if (!exists()) {
        return null
    }
    val options = BitmapFactory.Options()
    options.inJustDecodeBounds = true
    BitmapFactory.decodeFile(path, options)
    return options.outMimeType
}

If you deal with a Uri you can use this KTX function:

fun Uri.getImageMimeType(context: Context): String? {
    val options = BitmapFactory.Options()
    options.inJustDecodeBounds = true
    context.contentResolver.openInputStream(this)?.use {
        BitmapFactory.decodeStream(it, null, options)
    }
    return options.outMimeType
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文