使用介入图像优化重图像大小的任何方法吗?

时间:2017-12-14 17:12:58

标签: php laravel gd intervention

我有一个上传表单,允许选择多个文件。原始文件很重 - 约。每个10MB。

每个上传的文件都经过相同的调整大小和保存过程:

<?php

    $file = $request->file('qqfile'); // Huge JPG file in the request
    $image = Image::make($file); // Building an Intervention Image object

    $sizes = array(2560, 1980, 1366, 1024, 768, 480, 320);

    foreach ($sizes as $size) {
        $image = $image->widen($size->width);
        Storage::put('public/image_'.$size.'.jpg', $image->encode('jpg', 90));
    }

现在,我的理解是,在foreach循环中,它是重复使用的10MB原始图像对象。因此,在每次迭代期间,10MB图像对象被调整大小到更小的尺寸 - 例如在最后一次迭代中从4200x2460320x187,然后保存在磁盘上。

如果我是正确的(我是吗?)那么它效率不高,因为GD库操作非常昂贵且服务器CPU可能会比它应该更强大。

有什么方法可以优化调整大小过程吗?例如对于每次迭代,使用已经调整大小的图像对象,而不是巨大的原始图像对象?

我会避免这种情况:resize - save - read from disk - resize again,因为磁盘I / O也会受到攻击。我的想法是:resize the original - resize to the next size - ... - resize the last size, then save each。这意味着我需要一种方法将调整大小的Intervention对象存储在一个变量中,但还没有保存它(因为它将在最后一步中保存)。

这有意义吗?有什么想法吗?

谢谢。

0 个答案:

没有答案