java-如何使用gzip将图像转换为base64字符串

java-如何使用gzip将图像转换为base64字符串,第1张

概述我正在尝试转换和压缩从android上的文件路径获取的图像,以使用base64的gzip进行转换(我正在使用它,因为我的桌面版本是用Java编写的,因此也是如此).这是我目前用于压缩的内容:Bitmapbm=BitmapFactory.decodeFile(imagePath);ByteArrayOutputStreambaos=newB

我正在尝试转换和压缩从android上的文件路径获取的图像,以使用base64的gzip进行转换(我正在使用它,因为我的桌面版本是用Java编写的,因此也是如此).这是我目前用于压缩的内容:

Bitmap bm = BitmapFactory.decodefile(imagePath);              ByteArrayOutputStream baos = new ByteArrayOutputStream();     bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);           byte[] data = baos.toByteArray();                                                               String base64Str = null;                                      ByteArrayOutputStream out_bytes = new ByteArrayOutputStream();OutputStream out = new Base64.OutputStream(out_bytes);try {    out.write(data);    out.close();                                                             byte[] encoded = out_bytes.toByteArray();                     base64Str = Base64.encodeBytes(encoded, Base64.GZIP);         baos.close();                                             } catch (Exception e) {}

解决方法:

这是您的代码当前正在执行的 *** 作:

//1. Decode data from image fileBitmap bm = BitmapFactory.decodefile(imagePath);...//2. Compress decoded image data to JPEG format with max qualitybm.compress(Bitmap.CompressFormat.JPEG, 100, baos);...//3. Encode compressed image data to base64out.write(data);...//4. Compress to gzip format, before enCoding gzipped data to base64base64Str = Base64.encodeBytes(encoded, Base64.GZIP);

我不知道您的台式机版本是如何做到的,但是步骤3是不必要的,因为您要执行与步骤4相同的 *** 作.

(已删除部分答案)

编辑:以下代码将从文件中读取字节,对这些字节进行Gzip压缩并将其编码为base64.它适用于所有小于2 GB的可读文件.传递给Base64.encodeBytes的字节将与文件中的字节相同,因此不会丢失任何信息(与上面的代码相反,在上面的代码中,您首先将数据转换为JPEG格式).

/* * imagePath has changed name to path, as the file doesn't have to be an image. */file file = new file(path);long length = file.length();BufferedinputStream bis = null;try {    bis = new BufferedinputStream(new fileinputStream(file));    if(length > Integer.MAX_VALUE) {        throw new IOException("file must be smaller than 2 GB.");    }    byte[] data = new byte[(int)length];    //Read bytes from file    bis.read(data);} catch (IOException e) {    e.printstacktrace();} finally {    if(bis != null)        try { bis.close(); }        catch(IOException e) {}}//Gzip and encode to base64String base64Str = Base64.encodeBytes(data, Base64.GZIP);

EDIT2:这应该解码base64字符串,并将解码的数据写入文件:

    //outputPath is the path to the destination file.    //Decode base64 String (automatically detects and decompresses gzip)    byte[] data = Base64.decode(base64str);    fileOutputStream fos = null;    try {        fos = new fileOutputStream(outputPath);        //Write data to file        fos.write(data);    } catch(IOException e) {        e.printstacktrace();    } finally {        if(fos != null)            try { fos.close(); }            catch(IOException e) {}    }
总结

以上是内存溢出为你收集整理的java-如何使用gzip将图像转换为base64字符串全部内容,希望文章能够帮你解决java-如何使用gzip将图像转换为base64字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存