mirror of
https://github.com/friendica/friendica
synced 2024-12-23 06:40:15 +00:00
Changes:
- added more type-hints - added missing documentation
This commit is contained in:
parent
fa973d3b0f
commit
84bfc37bf1
5 changed files with 453 additions and 431 deletions
|
@ -34,7 +34,7 @@ abstract class HTTPException extends Exception
|
||||||
protected $httpdesc = '';
|
protected $httpdesc = '';
|
||||||
protected $explanation = '';
|
protected $explanation = '';
|
||||||
|
|
||||||
public function __construct($message = '', Exception $previous = null)
|
public function __construct(string $message = '', Exception $previous = null)
|
||||||
{
|
{
|
||||||
parent::__construct($message, $this->code, $previous);
|
parent::__construct($message, $this->code, $previous);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -47,12 +47,13 @@ class Image
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param string $data
|
*
|
||||||
* @param boolean $type optional, default null
|
* @param string $data Image data
|
||||||
|
* @param string $type optional, default null
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
public function __construct($data, $type = null)
|
public function __construct(string $data, string $type = null)
|
||||||
{
|
{
|
||||||
$this->imagick = class_exists('Imagick');
|
$this->imagick = class_exists('Imagick');
|
||||||
$this->types = Images::supportedTypes();
|
$this->types = Images::supportedTypes();
|
||||||
|
@ -62,12 +63,12 @@ class Image
|
||||||
$this->type = $type;
|
$this->type = $type;
|
||||||
|
|
||||||
if ($this->isImagick() && $this->loadData($data)) {
|
if ($this->isImagick() && $this->loadData($data)) {
|
||||||
return true;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// Failed to load with Imagick, fallback
|
// Failed to load with Imagick, fallback
|
||||||
$this->imagick = false;
|
$this->imagick = false;
|
||||||
}
|
}
|
||||||
return $this->loadData($data);
|
$this->loadData($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -98,12 +99,14 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $data data
|
* Loads image data into handler class
|
||||||
* @return boolean
|
*
|
||||||
|
* @param string $data Image data
|
||||||
|
* @return boolean Success
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
private function loadData($data)
|
private function loadData(string $data): bool
|
||||||
{
|
{
|
||||||
if ($this->isImagick()) {
|
if ($this->isImagick()) {
|
||||||
$this->image = new Imagick();
|
$this->image = new Imagick();
|
||||||
|
@ -132,7 +135,7 @@ class Image
|
||||||
* setup the compression here, so we'll do it only once
|
* setup the compression here, so we'll do it only once
|
||||||
*/
|
*/
|
||||||
switch ($this->getType()) {
|
switch ($this->getType()) {
|
||||||
case "image/png":
|
case 'image/png':
|
||||||
$quality = DI::config()->get('system', 'png_quality');
|
$quality = DI::config()->get('system', 'png_quality');
|
||||||
/*
|
/*
|
||||||
* From http://www.imagemagick.org/script/command-line-options.php#quality:
|
* From http://www.imagemagick.org/script/command-line-options.php#quality:
|
||||||
|
@ -145,7 +148,9 @@ class Image
|
||||||
$quality = $quality * 10;
|
$quality = $quality * 10;
|
||||||
$this->image->setCompressionQuality($quality);
|
$this->image->setCompressionQuality($quality);
|
||||||
break;
|
break;
|
||||||
case "image/jpeg":
|
|
||||||
|
case 'image/jpg':
|
||||||
|
case 'image/jpeg':
|
||||||
$quality = DI::config()->get('system', 'jpeg_quality');
|
$quality = DI::config()->get('system', 'jpeg_quality');
|
||||||
$this->image->setCompressionQuality($quality);
|
$this->image->setCompressionQuality($quality);
|
||||||
}
|
}
|
||||||
|
@ -185,7 +190,7 @@ class Image
|
||||||
/**
|
/**
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function isValid()
|
public function isValid(): bool
|
||||||
{
|
{
|
||||||
if ($this->isImagick()) {
|
if ($this->isImagick()) {
|
||||||
return ($this->image !== false);
|
return ($this->image !== false);
|
||||||
|
@ -269,10 +274,12 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Scales image down
|
||||||
|
*
|
||||||
* @param integer $max max dimension
|
* @param integer $max max dimension
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function scaleDown($max)
|
public function scaleDown(int $max)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -327,10 +334,12 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Rotates image
|
||||||
|
*
|
||||||
* @param integer $degrees degrees to rotate image
|
* @param integer $degrees degrees to rotate image
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function rotate($degrees)
|
public function rotate(int $degrees)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -351,11 +360,13 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Flips image
|
||||||
|
*
|
||||||
* @param boolean $horiz optional, default true
|
* @param boolean $horiz optional, default true
|
||||||
* @param boolean $vert optional, default false
|
* @param boolean $vert optional, default false
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function flip($horiz = true, $vert = false)
|
public function flip(bool $horiz = true, bool $vert = false)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -391,10 +402,12 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $filename filename
|
* Fixes orientation and maybe returns EXIF data (?)
|
||||||
|
*
|
||||||
|
* @param string $filename Filename
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function orient($filename)
|
public function orient(string $filename)
|
||||||
{
|
{
|
||||||
if ($this->isImagick()) {
|
if ($this->isImagick()) {
|
||||||
// based off comment on http://php.net/manual/en/imagick.getimageorientation.php
|
// based off comment on http://php.net/manual/en/imagick.getimageorientation.php
|
||||||
|
@ -470,10 +483,12 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param integer $min minimum dimension
|
* Rescales image to minimum size
|
||||||
|
*
|
||||||
|
* @param integer $min Minimum dimension
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function scaleUp($min)
|
public function scaleUp(int $min)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -513,10 +528,12 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param integer $dim dimension
|
* Scales image to square
|
||||||
|
*
|
||||||
|
* @param integer $dim Dimension
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function scaleToSquare($dim)
|
public function scaleToSquare(int $dim)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -528,11 +545,11 @@ class Image
|
||||||
/**
|
/**
|
||||||
* Scale image to target dimensions
|
* Scale image to target dimensions
|
||||||
*
|
*
|
||||||
* @param int $dest_width
|
* @param int $dest_width Destination width
|
||||||
* @param int $dest_height
|
* @param int $dest_height Destination height
|
||||||
* @return boolean
|
* @return boolean Success
|
||||||
*/
|
*/
|
||||||
private function scale($dest_width, $dest_height)
|
private function scale(int $dest_width, int $dest_height): bool
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -584,6 +601,8 @@ class Image
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a GIF to a PNG to make it static
|
* Convert a GIF to a PNG to make it static
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function toStatic()
|
public function toStatic()
|
||||||
{
|
{
|
||||||
|
@ -598,6 +617,8 @@ class Image
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Crops image
|
||||||
|
*
|
||||||
* @param integer $max maximum
|
* @param integer $max maximum
|
||||||
* @param integer $x x coordinate
|
* @param integer $x x coordinate
|
||||||
* @param integer $y y coordinate
|
* @param integer $y y coordinate
|
||||||
|
@ -605,7 +626,7 @@ class Image
|
||||||
* @param integer $h height
|
* @param integer $h height
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function crop($max, $x, $y, $w, $h)
|
public function crop(int $max, int $x, int $y, int $w, int $h)
|
||||||
{
|
{
|
||||||
if (!$this->isValid()) {
|
if (!$this->isValid()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -638,6 +659,9 @@ class Image
|
||||||
$this->image = $dest;
|
$this->image = $dest;
|
||||||
$this->width = imagesx($this->image);
|
$this->width = imagesx($this->image);
|
||||||
$this->height = imagesy($this->image);
|
$this->height = imagesy($this->image);
|
||||||
|
|
||||||
|
// All successful
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -650,11 +674,14 @@ class Image
|
||||||
* @return string
|
* @return string
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public function __toString() {
|
public function __toString(): string
|
||||||
return $this->asString();
|
{
|
||||||
|
return (string) $this->asString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Returns image as string or false on failure
|
||||||
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
|
@ -681,13 +708,16 @@ class Image
|
||||||
imageinterlace($this->image, true);
|
imageinterlace($this->image, true);
|
||||||
|
|
||||||
switch ($this->getType()) {
|
switch ($this->getType()) {
|
||||||
case "image/png":
|
case 'image/png':
|
||||||
$quality = DI::config()->get('system', 'png_quality');
|
$quality = DI::config()->get('system', 'png_quality');
|
||||||
imagepng($this->image, null, $quality);
|
imagepng($this->image, null, $quality);
|
||||||
break;
|
break;
|
||||||
case "image/jpeg":
|
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
$quality = DI::config()->get('system', 'jpeg_quality');
|
$quality = DI::config()->get('system', 'jpeg_quality');
|
||||||
imagejpeg($this->image, null, $quality);
|
imagejpeg($this->image, null, $quality);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$string = ob_get_contents();
|
$string = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
|
|
|
@ -34,23 +34,23 @@ class Images
|
||||||
/**
|
/**
|
||||||
* Maps Mime types to Imagick formats
|
* Maps Mime types to Imagick formats
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array Format map
|
||||||
*/
|
*/
|
||||||
public static function getFormatsMap()
|
public static function getFormatsMap()
|
||||||
{
|
{
|
||||||
$m = [
|
return [
|
||||||
'image/jpeg' => 'JPG',
|
'image/jpeg' => 'JPG',
|
||||||
|
'image/jpg' => 'JPG',
|
||||||
'image/png' => 'PNG',
|
'image/png' => 'PNG',
|
||||||
'image/gif' => 'GIF'
|
'image/gif' => 'GIF',
|
||||||
];
|
];
|
||||||
|
|
||||||
return $m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return file extension for mime type
|
* Return file extension for MIME type
|
||||||
* @param string $mimetype
|
*
|
||||||
* @return string
|
* @param string $mimetype MIME type
|
||||||
|
* @return string File extension for MIME type
|
||||||
*/
|
*/
|
||||||
public static function getExtensionByMimeType(string $mimetype): string
|
public static function getExtensionByMimeType(string $mimetype): string
|
||||||
{
|
{
|
||||||
|
@ -63,9 +63,14 @@ class Images
|
||||||
$imagetype = IMAGETYPE_GIF;
|
$imagetype = IMAGETYPE_GIF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
$imagetype = IMAGETYPE_JPEG;
|
$imagetype = IMAGETYPE_JPEG;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default: // Unknown type must be a blob then
|
||||||
|
return 'blob';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return image_type_to_extension($imagetype);
|
return image_type_to_extension($imagetype);
|
||||||
|
@ -76,11 +81,13 @@ class Images
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function supportedTypes()
|
public static function supportedTypes(): array
|
||||||
{
|
{
|
||||||
$types = [
|
$types = [
|
||||||
'image/jpeg' => 'jpg'
|
'image/jpeg' => 'jpg',
|
||||||
|
'image/jpg' => 'jpg',
|
||||||
];
|
];
|
||||||
|
|
||||||
if (class_exists('Imagick')) {
|
if (class_exists('Imagick')) {
|
||||||
// Imagick::queryFormats won't help us a lot there...
|
// Imagick::queryFormats won't help us a lot there...
|
||||||
// At least, not yet, other parts of friendica uses this array
|
// At least, not yet, other parts of friendica uses this array
|
||||||
|
@ -102,21 +109,20 @@ class Images
|
||||||
*
|
*
|
||||||
* @param string $image_data Image data
|
* @param string $image_data Image data
|
||||||
* @param string $filename File name (for guessing the type via the extension)
|
* @param string $filename File name (for guessing the type via the extension)
|
||||||
* @param string $mime default mime type
|
* @param string $default Default MIME type
|
||||||
*
|
* @return string MIME type
|
||||||
* @return string
|
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function getMimeTypeByData(string $image_data, string $filename = '', string $mime = '')
|
public static function getMimeTypeByData(string $image_data, string $filename = '', string $default = ''): string
|
||||||
{
|
{
|
||||||
if (substr($mime, 0, 6) == 'image/') {
|
if (substr($default, 0, 6) == 'image/') {
|
||||||
Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]);
|
Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $default]);
|
||||||
return $mime;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
$image = @getimagesizefromstring($image_data);
|
$image = @getimagesizefromstring($image_data);
|
||||||
if (!empty($image['mime'])) {
|
if (!empty($image['mime'])) {
|
||||||
Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $mime, 'mime' => $image['mime']]);
|
Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $default, 'mime' => $image['mime']]);
|
||||||
return $image['mime'];
|
return $image['mime'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,12 +134,11 @@ class Images
|
||||||
*
|
*
|
||||||
* @param string $sourcefile Source file of the image
|
* @param string $sourcefile Source file of the image
|
||||||
* @param string $filename File name (for guessing the type via the extension)
|
* @param string $filename File name (for guessing the type via the extension)
|
||||||
* @param string $mime default mime type
|
* @param string $default default MIME type
|
||||||
*
|
* @return string MIME type
|
||||||
* @return string
|
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function getMimeTypeBySource(string $sourcefile, string $filename = '', string $mime = '')
|
public static function getMimeTypeBySource(string $sourcefile, string $filename = '', string $default = ''): string
|
||||||
{
|
{
|
||||||
if (substr($mime, 0, 6) == 'image/') {
|
if (substr($mime, 0, 6) == 'image/') {
|
||||||
Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]);
|
Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]);
|
||||||
|
@ -150,14 +155,13 @@ class Images
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Guess image mimetype from the filename
|
* Guess image MIME type from the filename's extension
|
||||||
*
|
*
|
||||||
* @param string $filename Image filename
|
* @param string $filename Image filename
|
||||||
*
|
* @return string Guessed MIME type by extension
|
||||||
* @return string
|
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function guessTypeByExtension(string $filename)
|
public static function guessTypeByExtension(string $filename): string
|
||||||
{
|
{
|
||||||
$ext = pathinfo(parse_url($filename, PHP_URL_PATH), PATHINFO_EXTENSION);
|
$ext = pathinfo(parse_url($filename, PHP_URL_PATH), PATHINFO_EXTENSION);
|
||||||
$types = self::supportedTypes();
|
$types = self::supportedTypes();
|
||||||
|
@ -173,11 +177,13 @@ class Images
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $url
|
* Gets info array from given URL, cached data has priority
|
||||||
* @return array
|
*
|
||||||
|
* @param string $url URL
|
||||||
|
* @return array Info
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public static function getInfoFromURLCached($url)
|
public static function getInfoFromURLCached(string $url): array
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
@ -199,11 +205,12 @@ class Images
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $url
|
* Gets info from URL uncached
|
||||||
* @return array
|
* @param string $url URL
|
||||||
|
* @return array Info array
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public static function getInfoFromURL($url)
|
public static function getInfoFromURL(string $url): array
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
@ -243,12 +250,14 @@ class Images
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param integer $width
|
* Returns scaling information
|
||||||
* @param integer $height
|
*
|
||||||
* @param integer $max
|
* @param integer $width Width
|
||||||
* @return array
|
* @param integer $height Height
|
||||||
|
* @param integer $max Max width/height
|
||||||
|
* @return array Scaling dimensions
|
||||||
*/
|
*/
|
||||||
public static function getScalingDimensions($width, $height, $max)
|
public static function getScalingDimensions(int $width, int $height, int $max): array
|
||||||
{
|
{
|
||||||
if ((!$width) || (!$height)) {
|
if ((!$width) || (!$height)) {
|
||||||
return ['width' => 0, 'height' => 0];
|
return ['width' => 0, 'height' => 0];
|
||||||
|
|
|
@ -31,10 +31,9 @@ class Image
|
||||||
* Give all available options for the background image
|
* Give all available options for the background image
|
||||||
*
|
*
|
||||||
* @param array $arr Array with the present user settings
|
* @param array $arr Array with the present user settings
|
||||||
*
|
|
||||||
* @return array Array with the immage options
|
* @return array Array with the immage options
|
||||||
*/
|
*/
|
||||||
public static function get_options($arr)
|
public static function get_options(array $arr): array
|
||||||
{
|
{
|
||||||
$bg_image_options = [
|
$bg_image_options = [
|
||||||
'stretch' => ['frio_bg_image_option', DI::l10n()->t('Top Banner'), 'stretch', DI::l10n()->t('Resize image to the width of the screen and show background color below on long pages.'), ($arr['bg_image_option'] == 'stretch')],
|
'stretch' => ['frio_bg_image_option', DI::l10n()->t('Top Banner'), 'stretch', DI::l10n()->t('Resize image to the width of the screen and show background color below on long pages.'), ($arr['bg_image_option'] == 'stretch')],
|
||||||
|
|
Loading…
Reference in a new issue