Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]

Posted

技术标签:

【中文标题】Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]【英文标题】:Android: How can I save image files that are not (JPEG & PNG)? [after rotate] 【发布时间】:2011-11-24 16:17:38 【问题描述】:

我正在尝试从 sdcard 旋转图像,然后保存回 sdcard。

我可以使用 ExifInterface 类为“.jpg”格式做到这一点:

exif = new ExifInterface(filepath);
exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(orientation));
exif.saveAttributes();

对于“.png”文件,我必须实际旋转并保存:

Bitmap bitmap = BitmapFactory.decodeFile(filepath);
Matrix matrix = new Matrix();
matrix.postRotate(degrees);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
FileOutputStream stream = new FileOutputStream(fileLocation);
bitmap.compress(CompressFormat.PNG, 100, stream);

“.bmp”、“.tiff”、“.gif”呢??

好像 CompressFormat 只支持 'CompressFormat.PNG' 和 'CompressFormat.JPG'。

这是限制吗?

【问题讨论】:

【参考方案1】:

是的,仅限于 JPG、PNG、WEBP

http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html

【讨论】:

【参考方案2】:

嘿,只需将名称命名为 .bmp

这样做:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
_bitmapScaled.compress(Bitmap.CompressFormat.PNG, 40, bytes);

//you can create a new file name "test.BMP" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "**test.bmp**")

听起来我只是在胡闹,但一旦它保存在 bmp 格式中就试试吧..干杯

【讨论】:

文件扩展名只是一个约定。它将PNG图像保存为test.bmp,但不会影响压缩。我什至不费心在图像缓存中添加文件扩展名 - 使用哈希作为文件名以及最适合的压缩方式。

以上是关于Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]的主要内容,如果未能解决你的问题,请参考以下文章

将android camera2图像保存为无损PNG

为啥在 WPF 中将 BitmapSource 保存为 bmp、jpeg 和 png 时会得到完全不同的结果

JPEG/PNG/GIF图片格式简析

位图保存 jpeg 失败但 png 可以,因为 comments 属性

Android 启动图标不适用于 .png 图像,但适用于 .jpeg

Android使用.webp替换.jpeg与.png格式图片减少图片大小