Php 上载脚本太长,无法执行

Php 上载脚本太长,无法执行,php,optimization,upload,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-&g

因此,我有一个脚本,用于调整大小、保存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最初是一个长字符串,大约有200000个字符。最后,我的服务器上的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;
          }

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

也许,您正在通过ajax从javascript函数上传图像,base-64编码从画布动态创建的图像?并将其作为POST参数中的字符串发送


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

$gif是用javascript从网络摄像头创建的;我还不明白你的第三点..忘了第三点吧,我读你的代码时没有足够的注意力。是我的错。大约一年前,我在使用jQuery库拍摄相机屏幕截图时遇到了同样的问题,我仍然记得代码中的问题:从javascript到服务器的图像编码!您是否发送编码为base_64的图像,将所有像素的8位值串联在一起?这可以解释为什么图像在到达服务器之前会从300k爆炸到2M。这个转换是使整个事情变慢的问题。你能把一小段字符串发送到服务器上吗?base64编码之前base64编码之前,它只是一个blob对象。我用base64对这个blob进行编码,并将数据放入myImage.src。我的建议是使用html的canvas对象将图像转换为png对象客户端,然后发送该对象base_64,该对象按照我在上一篇评论中链接的库中的描述进行编码。您可以设置一些断点,更接近代码挂起的部分。这可能会使帮助您改进代码变得更容易一些。如果您不能创建断点,您可以创建一些echo 1;出口找到代码挂起的地方。嗯,我的问题不在我的PHP脚本中,而是在我的ajax请求中。我试图在编辑img.src时使用jqueryajax发送一个非常大的字符串。所以,问题是ajax