我正在Laravel 5上使用intervention library来实现一些图像处理。如果图像较小(例如700KB以下且尺寸小于800px宽),它可以很好地工作。

但是它不能处理大尺寸的图像,我想上传2000 MB宽,最大8 MB的图像。

我尝试过碰碰memory_limit的经典方法,但无法正常工作

ini_set("memory_limit","20M");

有什么解决方案可以在不终止服务器的情况下起作用。

这是我的上传服务的代码。它从Request::file('file')中获取图像,并通过干预将其调整为3种尺寸。
  • 大尺寸,最大宽度为2000 px,然后是
  • 中800px宽
  • Thumb的宽度为200px
    public function photo($file)
    {
        $me = Auth::user();
        //user folder for upload
        $userFolder = $me->media_folder;
    
        //Check the folder exist, if not create one
        if($this->setupUsrFolder($userFolder)) {
            //Unique filename for image
            $filename = $this->getUniqueFilename($userFolder);
    
            //Bump the memory to perform the image manipulation
            ini_set("memory_limit","20M");
    
            //Generate thumb, medium, and max_width image
            $img = Image::make($file);
            //big_img
            $big = $img->resize(config('go.img.max_width'), null, function ($constraint) {
                $constraint->aspectRatio();
                $constraint->upsize();
            });
            //Big Image
            $big->save($this->getPhotoPath($filename, $userFolder, 'b_'));
    
            //Medium image
            $med = $big->resize(config('go.img.med_width'), null, function ($constraint) {
                $constraint->aspectRatio();
                $constraint->upsize();
            });
            $med->save($this->getPhotoPath($filename, $userFolder, 'm_'));
    
            //Thumbnail
            $thumb = $med->resize(config('go.img.thumb_width'), null, function ($constraint) {
                $constraint->aspectRatio();
                $constraint->upsize();
            });
            $thumb->save($this->getPhotoPath($filename, $userFolder, 't_'));
    
            return $filename;
        }
    
        return null;
    }
    

  • 请帮助我如何使它更高效,更快捷

    最佳答案

    FWIW,评论的解决方案对我不起作用。也就是说,我无法满足以下条件:

    Image::make($file)->resize(2000, null)->save('big.jpg')->destroy();
    Image::make($file)->resize(800, null)->save('med.jpg')->destroy();
    Image::make($file)->resize(200, null)->save('thumb.jpg')->destroy();
    

    它仍然抛出以下错误:



    This solution对我有用的是更改内存限制,如下所示:
    public function resize() {
        ini_set('memory_limit', '256M');
        // Do your Intervention/image operations...
    }
    
    // or...
    
    ini_set('memory_limit', '256M');
    Image::make($file)->resize(2000, null)->save('big.jpg');
    Image::make($file)->resize(800, null)->save('med.jpg');
    Image::make($file)->resize(200, null)->save('thumb.jpg');
    

    这样就成功解决了问题。
    原因是:

    关于php - 干预镜像耗尽了20971520字节的允许内存大小(尝试分配10240字节),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31128856/

    10-09 23:04