1

我正在使用此代码将Bitmap转换为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);

问题:

我从设备库中挑选并发送到服务器的实际图像大小为344 kb当我设置质量 = 0并显示一个微调器对话框时,base64字符串正在发送到服务器,发送需要5 秒,并且在服务器端接收到的图像是344 Kb但如果我设置质量 = 100发送需要60-70 秒,而我在服务器端接收到的图像是1.7 Mb

问题:

为什么我在使用质量 = 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

我认为@EJTH 是正确的,因为 0 可能意味着根本不重新压缩图像。任何其他值(1-100)可能首先将您的图像转换为位图(这将非常大),然后压缩为目标质量 jpeg。此重新压缩需要处理时间才能完成,因此对于 0 以外的值,您会看到 60-70 秒。

我之前没有使用过这种Bitmap#compress方法,所以以上是猜测。

于 2012-10-23T12:53:32.450 回答
1

当 PHP 手册指出 0 表示可能的最低质量时,它是错误的,它实际上意味着不要接触压缩。

至于为什么压缩图片需要这么长时间很难说,您是自己托管还是使用便宜的虚拟主机?

于 2012-10-23T12:32:27.403 回答