158 lines
3.9 KiB
PHP
158 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Vvveb
|
|
*
|
|
* Copyright (C) 2022 Ziadin Givan
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Manages image retrival and saving.
|
|
*
|
|
* @package Vvveb
|
|
* @subpackage System
|
|
* @since 0.0.1
|
|
*/
|
|
|
|
namespace Vvveb\System;
|
|
|
|
use function Vvveb\siteSettings;
|
|
use Vvveb\System\Media\Image;
|
|
|
|
class Images {
|
|
static public function resize($src, $dest, $width, $height, $method, $quality = 80, $format = '') {
|
|
$destDir = dirname($dest);
|
|
|
|
if (! file_exists($destDir)) {
|
|
@mkdir(dirname($dest), (0755 & ~umask()), true);
|
|
}
|
|
$img = new Image($src);
|
|
$result = $img->resize($width,$height, $method);
|
|
|
|
return $img->save($dest, $quality, $format);
|
|
}
|
|
|
|
static public function image($image, $type = '', $size = '', $method = 'cs', $format = '', $quality = 80) {
|
|
$publicPath = \Vvveb\publicUrlPath();
|
|
|
|
list($publicPath, $type, $image, $size) =
|
|
Event :: trigger(__CLASS__, 'publicPath', $publicPath, $type, $image, $size);
|
|
|
|
if ($publicPath == null) {
|
|
$publicPath = \Vvveb\publicUrlPath();
|
|
//if absolute path include subdir
|
|
if ($image[0] == '/') {
|
|
$publicPath = (V_SUBDIR_INSTALL ? V_SUBDIR_INSTALL : '') . $publicPath;
|
|
}
|
|
}
|
|
|
|
$mediaFolder = 'media/';
|
|
$cacheFolder = 'image-cache/';
|
|
|
|
if ($image && (substr($image, 0, 2) != '//') && (substr($image, 0, 4) != 'http')) {
|
|
$src = $image;
|
|
|
|
if ($size) {
|
|
if (is_array($size)) {
|
|
$width = $size[0];
|
|
$height = $size[1];
|
|
} else {
|
|
$site = siteSettings();
|
|
$width = $site["{$type}_{$size}_width"] ?? 0;
|
|
$height = $site["{$type}_{$size}_height"] ?? 0;
|
|
$method = $site["{$type}_{$size}_method"] ?? 'cs';
|
|
$format = $site['image_format'] ?? '';
|
|
$quality = $site['image_quality'] ?? 80;
|
|
}
|
|
|
|
$image = self::size($image,"{$width}x{$height}_$method");
|
|
|
|
if ($format) {
|
|
$image = self::extension($image, $format);
|
|
}
|
|
|
|
if ($width || $height) {
|
|
if (file_exists(DIR_PUBLIC . $cacheFolder . $image)) {
|
|
$mediaFolder = $cacheFolder;
|
|
} else {
|
|
if (self :: resize(DIR_PUBLIC . $mediaFolder . $src, DIR_PUBLIC . $cacheFolder . $image, $width, $height, $method, $quality, $format)) {
|
|
$mediaFolder = $cacheFolder;
|
|
} else {
|
|
$image = $src;
|
|
}
|
|
}
|
|
} else {
|
|
$image = $src;
|
|
}
|
|
}
|
|
|
|
$image = $publicPath . $mediaFolder . $image;
|
|
} else {
|
|
//return $public . 'media/placeholder.png';
|
|
}
|
|
|
|
list($image, $type, $size) =
|
|
Event :: trigger(__CLASS__,__FUNCTION__, $image, $type, $size);
|
|
|
|
return $image;
|
|
}
|
|
|
|
static public function size($image, $size) {
|
|
$pos = strrpos($image, '.');
|
|
|
|
if ($pos) {
|
|
$image = substr_replace($image, "-$size", $pos, 0);
|
|
}
|
|
|
|
return $image;
|
|
}
|
|
|
|
static public function extension($image, $extension) {
|
|
$dot = strrpos($image , '.');
|
|
|
|
if ($dot) {
|
|
return substr_replace($image , $extension, $dot + 1);
|
|
}
|
|
|
|
return $image;
|
|
}
|
|
|
|
static public function images($images, $type, $size = '') {
|
|
foreach ($images as $key => &$image) {
|
|
$image['image'] = Images::image($image['image'], $type, $size);
|
|
}
|
|
|
|
/*
|
|
uasort($images, function ($a, $b) {
|
|
if ($a['sort_order'] == $b['sort_order']) {
|
|
return 0;
|
|
}
|
|
|
|
return ($a['sort_order'] < $b['sort_order']) ? -1 : 1;
|
|
});
|
|
*/
|
|
|
|
return $images;
|
|
}
|
|
|
|
public function get($type, $id, $size, $attrs) {
|
|
}
|
|
|
|
public function save($type, $path, $attrs) {
|
|
}
|
|
}
|