File "FileSizeOptimizedWidthCalculator.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/vendor/spatie/laravel-medialibrary/src/ResponsiveImages/WidthCalculator/FileSizeOptimizedWidthCalculator.php
File size: 1.46 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Spatie\MediaLibrary\ResponsiveImages\WidthCalculator;
use Illuminate\Support\Collection;
use Spatie\MediaLibrary\Support\ImageFactory;
class FileSizeOptimizedWidthCalculator implements WidthCalculator
{
public function calculateWidthsFromFile(string $imagePath): Collection
{
$image = ImageFactory::load($imagePath);
$width = $image->getWidth();
$height = $image->getHeight();
$fileSize = filesize($imagePath);
return $this->calculateWidths($fileSize, $width, $height);
}
public function calculateWidths(int $fileSize, int $width, int $height): Collection
{
$targetWidths = collect();
$targetWidths->push($width);
$ratio = $height / $width;
$area = $height * $width;
$predictedFileSize = $fileSize;
$pixelPrice = $predictedFileSize / $area;
while (true) {
$predictedFileSize *= 0.7;
$newWidth = (int) floor(sqrt(($predictedFileSize / $pixelPrice) / $ratio));
if ($this->finishedCalculating((int) $predictedFileSize, $newWidth)) {
return $targetWidths;
}
$targetWidths->push($newWidth);
}
}
protected function finishedCalculating(int $predictedFileSize, int $newWidth): bool
{
if ($newWidth < 20) {
return true;
}
if ($predictedFileSize < (1024 * 10)) {
return true;
}
return false;
}
}