4

当我从 PNG 转换为 JPEG,然后将 JPEG 转换为 PNG 时,我遇到了图片大小的问题。

            public void onClick(View v) {
            String imageFileName = "/sdcard/Penguins2.png";
            File imageFile = new File(imageFileName);
            if (imageFile.exists()) {
                // Load the image from file
                myBitmap = BitmapFactory.decodeFile(imageFileName);
                // Display the image in the image viewer
                myImageView = (ImageView) findViewById(R.id.my_image_view);
                if (myImageView != null) {
                    myImageView.setImageBitmap(myBitmap);
                }
            }
        }

转换:

    private void processImage() {               
    try {
        String outputPath = "/sdcard/Penguins2.jpg";
        int quality = 100;
        FileOutputStream fileOutStr = new FileOutputStream(outputPath);
        BufferedOutputStream bufOutStr = new BufferedOutputStream(
                fileOutStr);
        myBitmap.compress(CompressFormat.JPEG, quality, bufOutStr);
        bufOutStr.flush();
        bufOutStr.close();
    } catch (FileNotFoundException exception) {
        Log.e("debug_log", exception.toString());
    } catch (IOException exception) {
        Log.e("debug_log", exception.toString());
    }
    myImageView.setImageBitmap(myBitmap);

处理此操作后,我只需更改以下几行:

String imageFileName = "/sdcard/Penguins2.png";

String imageFileName = "/sdcard/Penguins2.jpg";

String outputPath = "/sdcard/Penguins2.jpg";
(...)
myBitmap.compress(CompressFormat.JPEG, quality, bufOutStr);    

String outputPath = "/sdcard/Penguins2.png";
(...)
myBitmap.compress(CompressFormat.PNG, quality, bufOutStr);    

图像大小从 585847 更改为 531409(在 DDMS 中)

我想做这样的事情,因为我想使用对某些图像处理无损的 PNG。然后将图像转换为 jpeg 并作为彩信发送,我不确定,但我认为 JPEG 是彩信中所有设备都支持的唯一格式。接收器会打开图像并将其转换回 png 而不会丢失数据。

4

2 回答 2

5

这是不可行的!转换为 JPG 后,您就失去了“PNG 的无损状态”。

无论如何,每个人都支持png。

+在您的情况下,您希望接收器将其更改回 PNG 以检索无损图像。这意味着接收器也支持 PNG。在发送之前将其更改为JPG,然后在收到时将其更改回PNG有什么意义。只是一些额外的计算?

于 2013-01-30T12:33:04.723 回答
5

除了@Sherif elKhatib 答案,如果您查看文档:http: //developer.android.com/reference/android/graphics/Bitmap.html#compress%28android.graphics.Bitmap.CompressFormat,%20int,%20java .io.OutputStream%29

您可以看到 PNG 图像不使用质量参数:

质量:提示压缩机,0-100。0 表示压缩为小尺寸,100 表示压缩为最大质量。某些格式,例如无损的 PNG,将忽略质量设置

于 2013-01-30T12:37:39.300 回答