Skip to content

Commit 38d1556

Browse files
committed
Prevent resizing an image if it was already resized before.
1 parent 8a16cba commit 38d1556

File tree

1 file changed

+40
-6
lines changed

1 file changed

+40
-6
lines changed

app/code/Magento/MediaStorage/Service/ImageResize.php

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ private function makeImage(string $originalImagePath, array $imageParams): Image
294294
}
295295

296296
/**
297-
* Resize image.
297+
* Resize image if not already resized before
298298
*
299299
* @param array $imageParams
300300
* @param string $originalImagePath
@@ -303,13 +303,48 @@ private function makeImage(string $originalImagePath, array $imageParams): Image
303303
private function resize(array $imageParams, string $originalImagePath, string $originalImageName)
304304
{
305305
unset($imageParams['id']);
306-
$image = $this->makeImage($originalImagePath, $imageParams);
307306
$imageAsset = $this->assertImageFactory->create(
308307
[
309308
'miscParams' => $imageParams,
310309
'filePath' => $originalImageName,
311310
]
312311
);
312+
$imageAssetPath = $imageAsset->getPath();
313+
$usingDbAsStorage = $this->fileStorageDatabase->checkDbUsage();
314+
$mediaStorageFilename = $this->mediaDirectory->getRelativePath($imageAssetPath);
315+
316+
$alreadyResized = $usingDbAsStorage ?
317+
$this->fileStorageDatabase->fileExists($mediaStorageFilename) :
318+
$this->mediaDirectory->isFile($imageAssetPath);
319+
320+
if (!$alreadyResized) {
321+
$this->generateResizedImage(
322+
$imageParams,
323+
$originalImagePath,
324+
$imageAssetPath,
325+
$usingDbAsStorage,
326+
$mediaStorageFilename
327+
);
328+
}
329+
}
330+
331+
/**
332+
* Generate resized image
333+
*
334+
* @param array $imageParams
335+
* @param string $originalImagePath
336+
* @param string $imageAssetPath
337+
* @param bool $usingDbAsStorage
338+
* @param string $mediaStorageFilename
339+
*/
340+
private function generateResizedImage(
341+
array $imageParams,
342+
string $originalImagePath,
343+
string $imageAssetPath,
344+
bool $usingDbAsStorage,
345+
string $mediaStorageFilename
346+
) {
347+
$image = $this->makeImage($originalImagePath, $imageParams);
313348

314349
if ($imageParams['image_width'] !== null && $imageParams['image_height'] !== null) {
315350
$image->resize($imageParams['image_width'], $imageParams['image_height']);
@@ -335,11 +370,10 @@ private function resize(array $imageParams, string $originalImagePath, string $o
335370
$image->watermark($this->getWatermarkFilePath($imageParams['watermark_file']));
336371
}
337372

338-
$image->save($imageAsset->getPath());
373+
$image->save($imageAssetPath);
339374

340-
if ($this->fileStorageDatabase->checkDbUsage()) {
341-
$mediastoragefilename = $this->mediaDirectory->getRelativePath($imageAsset->getPath());
342-
$this->fileStorageDatabase->saveFile($mediastoragefilename);
375+
if ($usingDbAsStorage) {
376+
$this->fileStorageDatabase->saveFile($mediaStorageFilename);
343377
}
344378
}
345379

0 commit comments

Comments
 (0)