%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/GdHelper.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 OCA\Passwords\Exception\Image\ImageExportException;
use OCP\Image;
use Throwable;
/**
* Class GdHelper
*
* @package OCA\Passwords\Helper\Image
*/
class GdHelper extends AbstractImageHelper {
/**
* @param Image $image
* @param int $minWidth
* @param int $minHeight
* @param int $maxWidth
* @param int $maxHeight
*
* @return Image
*/
public function advancedResizeImage($image, int $minWidth, int $minHeight, int $maxWidth, int $maxHeight) {
$size = $this->getBestImageFit($image->width(), $image->height(), $minWidth, $minHeight, $maxWidth, $maxHeight);
$image->preciseResize($size['width'], $size['height']);
if($size['cropNeeded']) {
if($size['cropHeight'] === 0) $size['cropHeight'] = $size['height'];
if($size['cropWidth'] === 0) $size['cropWidth'] = $size['width'];
$image->crop($size['cropX'], $size['cropY'], $size['cropWidth'], $size['cropHeight']);
}
return $image;
}
/**
* @param Image $image
* @param int $size
*
* @return Image
*/
public function simpleResizeImage($image, int $size) {
$image->preciseResize($size, $size);
return $image;
}
/**
* @param Image $image
*
* @return Image
*/
public function cropImageRectangular($image) {
$width = $image->width();
$height = $image->height();
if($width > $height) {
$padding = ($width - $height) / 2;
$image->crop($padding, 0, $height, $height);
}
if($width < $height) {
$padding = ($height - $width) / 2;
$image->crop(0, $padding, $width, $width);
}
return $image;
}
/**
* @param $imageBlob
*
* @return Image
* @throws Throwable
*/
public function getImageFromBlob($imageBlob) {
$size = getimagesizefromstring($imageBlob);
$mime = substr($size['mime'], 6);
$tempFile = $this->config->getTempDir().uniqid().'.'.$mime;
try {
file_put_contents($tempFile, $imageBlob);
$image = $this->getNewImageObject();
$image->loadFromFile($tempFile);
unlink($tempFile);
} catch(Throwable $e) {
if(is_file($tempFile)) @unlink($tempFile);
throw $e;
}
return $image;
}
/**
* @param Image $image
*
* @return bool
*/
public function destroyImage($image): bool {
$image->destroy();
return true;
}
/**
* @param Image $image
*
* @return string
* @throws ImageExportException
*/
public function exportJpeg($image): string {
$tempFile = $this->config->getTempDir().uniqid();
try {
$image->save($tempFile, 'image/jpeg');
$content = file_get_contents($tempFile);
unlink($tempFile);
} catch(Throwable $e) {
if(is_file($tempFile)) @unlink($tempFile);
throw new ImageExportException('jpg', $e);
}
return $content;
}
/**
* @param Image $image
*
* @return string
* @throws ImageExportException
*/
public function exportPng($image): string {
$tempFile = $this->config->getTempDir().uniqid();
try {
$image->save($tempFile, 'image/png');
$content = file_get_contents($tempFile);
unlink($tempFile);
} catch(Throwable $e) {
if(is_file($tempFile)) @unlink($tempFile);
throw new ImageExportException('png', $e);
}
return $content;
}
/**
* @param string $format
*
* @return bool
*/
public function supportsFormat(string $format): bool {
$format = strtolower($format);
return in_array($format, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'x-bmp']);
}
/**
* @param string $data
*
* @return string
*/
public function convertIcoToPng($data): string {
return $data;
}
/**
* @return Image
*/
protected function getNewImageObject() {
return new Image();
}
/**
* @inheritdoc
*/
public function isAvailable(): bool {
return true;
}
}