上传脚本太长时间无法执行

时间:2014-02-24 13:08:25

标签: php optimization upload

所以,我有一个调整大小的脚本,保存一个gif并在我的服务器上保存这个gif的预览图像。

这是我的剧本:

public function createImageGif($gif, $x, $y, $w, $h)
    {
        $image = new Imagick();
        $decoded = base64_decode($gif);
        $image->readimageblob($decoded);
        $image = $image->coalesceImages();

        $image_name = uniqid(rand()).'.gif';

        foreach ($image as $frame) { //gif creation
          $frame->cropImage($w, $h, $x, $y);
          $frame->thumbnailImage(117, 135);
          $frame->setImagePage(117, 135, 0, 0);
        }

        $image = $image->deconstructImages();
        $image->writeImages('uploads/profiles/'.$image_name, true);

        //preview creation
        $im = imagecreatefromstring($decoded);
        if ($im !== false) {
            header('Content-Type: image/gif');
            $newimage = imagecreatetruecolor(117, 135);
            imagecopyresampled($newimage, $im, 0, 0, $x, $y, 117, 135, $w, $h);
            imagegif($newimage, 'uploads/profiles-preview/'.$image_name.'', 100);
            imagedestroy($newimage);
            imagedestroy($im);
        }

        return $image_name;
    }

因此,$gif最初是一个长字符串blob(大约2 000 000个字符)。最后,我服务器上的gif大小约为300ko。

此脚本需要20多个才能执行。我有很好的联系和良好的服务器。

如何优化此脚本?有什么想法吗?

编辑:这是我在javascript中创建数据的脚本:

var base64data;
          var img = document.createElement('img');
          var reader = new window.FileReader();
          reader.readAsDataURL(blob);
          reader.onloadend = function() {
            base64data = reader.result;
            img.src = base64data;
          }

1 个答案:

答案 0 :(得分:-1)

为什么你的脚本使用blob binary64编码作为输入?有很多合理的理由要做这件事,但你确定它是必要的吗?你不能只从PHP temp的文件夹加载图像吗?

也许,你是从javascript函数上传图像,通过ajax,base-64编码图像(从画布上即时创建?)并将其作为字符串发送到POST参数中

另外,我看到您首先保存图像,然后重新打开它以将回复发送回客户端。为什么不发送刚调整大小的图像($ image变量中包含的图像)