【问题标题】:Compressing an image before sending it to the Server在将图像发送到服务器之前压缩图像
【发布时间】:2012-10-23 21:00:30
【问题描述】:

我正在使用此代码将 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 当我设置 quality = 0 并显示微调对话框实用程序时base64 字符串被发送到服务器需要 5 秒 发送,并且在服务器端接收到的图像是 344 Kb 但如果我设置 quality = 100 发送需要 60-70 秒,我在服务器端收到的图像是 1.7 Mb p>

问题:

为什么我在使用 quality = 0 时得到实际尺寸,而在 quality = 100

时得到几乎 5 倍 图像

注意:

当我设置 quality = 100 并更改

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

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

发送需要 60-70 秒,但服务器端接收到的图像太小 67 Kb

谢谢

【问题讨论】:

    标签: php android base64


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      PHP 手册错误地指出 0 表示质量最低,它的实际意思是不要接触压缩。

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

      【讨论】:

      • PHP 手册??你是说安卓吗?因为我从未尝试在 PHP 中设置 0。在 Android 中,当我使用质量 = 0 时,我得到实际图像大小,但当我使用质量 = 100 时,我得到 5 倍大的图像
      • 啊,好吧,误会了,因为您提到的 PHP 函数也采用从 0 到 100 的质量参数。
      • 但是您的主机呢?由于您似乎没有对这个问题进行任何真正的分析,我假设实际上需要时间的是您的应用程序和您的服务器之间的通信,我可能是错的,如果您不执行该 imagejpeg() 调用,您仍然必须等待 60-70 秒才能发送图像?如果不是 PHP 问题。
      猜你喜欢
      • 2017-02-26
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2017-02-01
      • 2015-06-06
      • 2011-02-13
      相关资源
      最近更新 更多