无法以两种单独的格式调整同一文件的大小。干预图像 - Laravel

时间:2016-11-09 13:21:14

标签: php laravel laravel-5 intervention

使用:Laravel 5.2Intervention Image http://image.intervention.io/

我有一张可以上传图片的表格。此图像调整大小并存储在我的服务器上。这一切都很完美,但我最近需要制作第二个图像尺寸。所以我做了以下事情:

控制器

// Resize uploaded thumbnail and return the temporary file path
        $thumbnail = $request->file('thumbnail');
        $thumbnail_url = $this->storeTempImage($thumbnail,350,230);
        $video_thumbnail_url = $this->storeTempImage($thumbnail,1140,640);

StoreTempImage方法

  public function storeTempImage($uploadedImage, $width, $height) 
    {
        //resize and save image to temporary storage
        $originalName = $uploadedImage->getClientOriginalName();
        $name = time() . $originalName;
        $uploadedImage->move('images/temp/', $name);

        Image::make("images/temp/{$name}")->fit($width, $height, function ($constraint) {
            $constraint->upsize();
        })->save("images/temp/{$name}");

        return "images/temp/{$name}";
    }

发布表单后,我的第一张图片被正确保存,但之后会抛出错误:

  

文件" myfile.jpg"因未知错误而未上传。

我尝试了什么

  1. 我的第一个想法是time()函数不够具体,文件名称相同。所以我将time()更改为microtime(true)

  2. 我为图像尺寸制作了两种单独的方法

  3. 这两种解决方案都没有起作用并且犯了同样的错误。

2 个答案:

答案 0 :(得分:1)

实际上您使用相同的对象来创建和保存图像,您应该这样做:

// wait for X number of elements
presenceOfAll = function (elem, num, timeout) {
    var time = timeout || 5000;
    console.log('Waiting for elements ' + elem.locator() + ' to have a count of ' + num);
    return browser.wait(function () {
        return elem.count().then(function (count) {
            return count >= num;
        });
    }, time, 'Failed waiting for ' + elem.locator() + ' to have ' + num + ' total items');
};

希望这有帮助。

答案 1 :(得分:0)

试试这个解决方案

    $thumbnail = $request->file('thumbnail');
    $thumbnail_url = $this->storeTempImage($thumbnail,350,230);
    $video_thumbnail_url = $this->storeTempImage(clone $thumbnail,1140,640);
    $video_thumbnail_url = $this->storeTempImage($thumbnail,1140,640);

您将OBJECT发送到storeTempImage() - 并在行

中修改此对象
$uploadedImage->move('images/temp/', $name);

我认为你必须有2个物体 - 换句话说它不能正常运作。