wp_back/wp-content/plugins/smart-slider-3/Nextend/SmartSlider3/Slider/Feature/Optimize.php
2024-05-20 15:37:46 +03:00

110 lines
3.9 KiB
PHP

<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Exception;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class Optimize {
private $slider;
private $playWhenVisible = 1;
private $playWhenVisibleAt = 0.5;
private $backgroundImageWidthNormal = 1920, $quality = 70, $thumbnailWidth = 100, $thumbnailHeight = 60, $thumbnailQuality = 70;
public function __construct($slider) {
$this->slider = $slider;
$this->playWhenVisible = intval($slider->params->get('playWhenVisible', 1));
$this->playWhenVisibleAt = max(0, min(100, intval($slider->params->get('playWhenVisibleAt', 50)))) / 100;
$this->backgroundImageWidthNormal = intval($slider->params->get('optimize-slide-width-normal', 1920));
$this->quality = intval($slider->params->get('optimize-quality', 70));
$this->thumbnailWidth = $slider->params->get('optimizeThumbnailWidth', 100);
$this->thumbnailHeight = $slider->params->get('optimizeThumbnailHeight', 60);
$this->thumbnailQuality = $slider->params->get('optimize-thumbnail-quality', 70);
}
public function makeJavaScriptProperties(&$properties) {
$properties['playWhenVisible'] = $this->playWhenVisible;
$properties['playWhenVisibleAt'] = $this->playWhenVisibleAt;
}
public function optimizeBackground($image, $x = 50, $y = 50) {
try {
$imageSize = FastImageSize::getSize($image);
if ($imageSize) {
$optimizeScale = $this->slider->params->get('optimize-scale', 0);
$targetWidth = $imageSize['width'];
$targetHeight = $imageSize['height'];
if ($optimizeScale && $targetWidth > $this->backgroundImageWidthNormal) {
$targetHeight = ceil($this->backgroundImageWidthNormal / $targetWidth * $targetHeight);
$targetWidth = $this->backgroundImageWidthNormal;
}
return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $targetWidth, $targetHeight, false, 'normal', 'ffffff', true, $this->quality, true, $x, $y);
}
return $image;
} catch (Exception $e) {
return $image;
}
}
public function optimizeThumbnail($image) {
if ($this->slider->params->get('optimize-thumbnail-scale', 0)) {
try {
return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $this->thumbnailWidth, $this->thumbnailHeight, false, 'normal', 'ffffff', true, $this->thumbnailQuality, true);
} catch (Exception $e) {
return ResourceTranslator::toUrl($image);
}
}
return ResourceTranslator::toUrl($image);
}
public function adminOptimizeThumbnail($image) {
if ($this->slider->params->get('optimize-thumbnail-scale', 0)) {
try {
return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $this->thumbnailWidth, $this->thumbnailHeight, true, 'normal', 'ffffff', true, $this->thumbnailQuality, true);
} catch (Exception $e) {
return ResourceTranslator::toUrl($image);
}
}
return ResourceTranslator::toUrl($image);
}
public function optimizeImageWebP($src, $options) {
$options = array_merge(array(
'optimize' => false,
'quality' => 70,
'resize' => false,
'defaultWidth' => 1920,
'mediumWidth' => 1200,
'mediumHeight' => 0,
'smallWidth' => 500,
'smallHeight' => 0,
'focusX' => 50,
'focusY' => 50,
'compressOriginal' => false
), $options);
}
}