1

私はこのコードを使用してビットマップBase64に変換しています:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, **quality**, baos);
byte[] b = baos.toByteArray();
base64code = Base64.encodeToString(b, Base64.DEFAULT);

次のように、サーバー側で受信します。

$strImage = preg_replace('!\s*!', '', trim($this->input->post('image')));
        $thefile = base64_decode($strImage);
        $img = imagecreatefromstring($thefile);
        //header('Content-Type: image/jpeg');
        header('Content-Type: bitmap; charset=utf-8');
        imagesavealpha($img, true);
        imagejpeg($img,'./images/temp/testing.jpg',100);
        imagedestroy($img);

問題:

サーバーに送信するためにデバイスギャラリーから選択している実際の画像サイズは344kbです。品質=0に設定し、 base64文字列がサーバーに送信されているスピナーダイアログを表示すると、送信に5秒かかります。サーバー側で受信した画像は344Kbですが、品質= 100に設定している場合、送信には60〜70秒かかり、サーバー側で受信した画像は1.7Mbです。

質問:

品質=0を使用した場合に実際のサイズを取得し、品質=100を使用した場合に約5倍の画像を取得するのはなぜですか

ノート:

品質を100に設定して変更する場合

imagejpeg($img,'./images/temp/testing.jpg',100);

imagejpeg($img,'./images/temp/testing.jpg',10);

送信には60〜70秒かかりますが、サーバー側で受信した画像が小さすぎます67 Kb

ありがとうございました

4

2 に答える 2

1

PHPのマニュアルでは、0は可能な限り最低の品質を意味し、実際には圧縮に触れないことを意味すると述べているのは誤りです。

あなたの写真を圧縮するのになぜそんなに時間がかかるのかについて言うのは難しいです、あなたはこれをあなた自身でホストしていますか、それともあなたは安いウェブホストを使っていますか?

于 2012-10-23T12:32:27.403 に答える
1

@EJTHは、0が画像をまったく再圧縮しないことを意味する可能性があるという点で正しいと思います。その他の値(1〜100)は、おそらく最初に画像をビットマップ(非常に大きい)に変換してから、ターゲット品質のjpegに圧縮することです。この再圧縮は完了するまでに処理時間がかかるため、0以外の値では60〜70秒が表示されます。

私はBitmap#compress以前にこの方法を使用したことがないので、上記は推測です。

于 2012-10-23T12:53:32.450 に答える