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 に変換して MMS として送信します。よくわかりませんが、JPEG は MMS のすべてのデバイスでサポートされている唯一の形式だと思います。受信者は画像を開き、データを失うことなくpngに変換します。

4

2 に答える 2

5

@Sherif elKhatibの回答に加えて、ドキュメントを確認すると: http://developer.android.com/reference/android/graphics/Bitmap.html#compress%28android.graphics.Bitmap.CompressFormat,%20int,%20java .io.OutputStream%29

PNG 画像が品質パラメーターを使用していないことがわかります。

quality: コンプレッサーへのヒント、0-100。0 は小さいサイズで圧縮することを意味し、100 は最大品質で圧縮することを意味します。ロスレスの PNG などの一部の形式は、品質設定を無視します。

于 2013-01-30T12:37:39.300 に答える
5

これは不可能です!JPGに変換すると、「PNGのロスレス状態」が失われます。

とにかくpngはみんなに支持されています。

+あなたの場合、ロスレス画像を取得するために受信者にPNGに戻してもらいたい. これは、受信側も PNG をサポートしていることを意味します。送信前にJPGに変更し、受信時にPNGに戻すポイントは何ですか。ちょっと余計な計算?

于 2013-01-30T12:33:04.723 に答える