Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
peripherad
/
vendor
/
spatie
/
laravel-medialibrary
/
src
/
ResponsiveImages
/
WidthCalculator
:
FileSizeOptimizedWidthCalculator.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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; } }