我有一个上传表单,允许选择多个文件。原始文件很重 - 约。每个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图像对象被调整大小到更小的尺寸 - 例如在最后一次迭代中从4200x2460
到320x187
,然后保存在磁盘上。
如果我是正确的(我是吗?)那么它效率不高,因为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对象存储在一个变量中,但还没有保存它(因为它将在最后一步中保存)。
这有意义吗?有什么想法吗?
谢谢。