%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Image/ |
Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Helper/Image/AbstractImageHelper.php |
<?php /** * This file is part of the Passwords App * created by Marius David Wieschollek * and licensed under the AGPL. */ namespace OCA\Passwords\Helper\Image; use OC; use OCA\Passwords\Exception\Image\ImageConversionException; use OCA\Passwords\Exception\Image\ImageExportException; use OCA\Passwords\Services\ConfigurationService; /** * Class AbstractImageHelper * * @package OCA\Passwords\Helper\Image */ abstract class AbstractImageHelper { /** * AbstractImageHelper constructor. * * @param ConfigurationService $configurationService */ public function __construct(protected ConfigurationService $config) { } /** * @param int $width * @param int $height * @param int $minWidth * @param int $minHeight * @param int $maxWidth * @param int $maxHeight * * @return array */ public function getBestImageFit( int $width, int $height, int $minWidth, int $minHeight, int $maxWidth, int $maxHeight ) { $heightWidthRatio = (int) $height / $width; $widthHeightRatio = (int) $width / $height; $size = [ 'width' => (int) $minWidth, 'height' => (int) $minWidth * $heightWidthRatio, 'cropX' => 0, 'cropY' => 0, 'cropWidth' => 0, 'cropHeight' => 0, 'cropNeeded' => false ]; if($minHeight !== 0 && $size['height'] < $minHeight) { $size['width'] = (int) $minHeight * $widthHeightRatio; $size['height'] = (int) $minHeight; if($maxWidth !== 0 && $size['width'] > $maxWidth) { $size['cropX'] = (int) ($size['width'] - $maxWidth) / 2; $size['cropWidth'] = (int) $maxWidth; $size['cropHeight'] = (int) $size['height']; $size['cropNeeded'] = true; } } else if($maxHeight !== 0 && $size['height'] > $maxHeight) { $size['width'] = (int) $minHeight * $widthHeightRatio; if($maxWidth !== 0 && $size['width'] > $maxWidth) { $size['width'] = (int) $maxWidth; $size['height'] = (int) $maxWidth * $heightWidthRatio; $size['cropWidth'] = (int) $size['width']; $size['cropHeight'] = (int) $maxHeight; $size['cropNeeded'] = true; } else if($size['width'] < $minWidth) { $size['width'] = (int) $minWidth; $size['height'] = (int) $minWidth * $heightWidthRatio; $size['cropWidth'] = (int) $size['width']; $size['cropHeight'] = (int) $maxHeight; $size['cropNeeded'] = true; } } if($size['width'] === 0 && $size['height'] === 0) { $size['width'] = (int) $width; $size['height'] = (int) $height; } return $size; } /** * @param $blob * * @return string */ public function getImageMime($blob): string { $size = @getimagesizefromstring($blob); if(!$size || empty($size['mime'])) return 'application/octet-stream'; return $size['mime']; } /** * @param $blob * * @return bool */ public function supportsImage($blob): bool { $mime = $this->getImageMime($blob); [$type, $format] = explode('/', $mime); if($type !== 'image') return false; return $this->supportsFormat($format); } /** * @param $image * @param int $minWidth * @param int $minHeight * @param int $maxWidth * @param int $maxHeight * * @return mixed */ abstract public function advancedResizeImage($image, int $minWidth, int $minHeight, int $maxWidth, int $maxHeight); /** * @param $image * @param int $size * * @return mixed */ abstract public function simpleResizeImage($image, int $size); /** * @param $image * * @return mixed */ abstract public function cropImageRectangular($image); /** * @param $imageBlob * * @return mixed */ abstract public function getImageFromBlob($imageBlob); /** * @param $image * * @return bool */ abstract public function destroyImage($image): bool; /** * @param $image * * @return string * @trows ImageExportException */ abstract public function exportJpeg($image): string; /** * @param $image * * @return string * @trows ImageExportException */ abstract public function exportPng($image): string; /** * @param string $format * * @return bool */ abstract public function supportsFormat(string $format): bool; /** * @param $data * * @return string * @throws ImageConversionException */ abstract public function convertIcoToPng($data): string; /** * Whether this service can be used in the current environment * * @return bool */ abstract public function isAvailable(): bool; /** * @return string */ public function getDefaultFont(): string { return OC::$SERVERROOT.'/core/fonts/NotoSans-Regular.ttf'; } }