110 lines
3.9 KiB
PHP
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);
|
|
}
|
|
} |