X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FImages.php;h=130544130493ccdc6d4fd9a45c887127d831ad9f;hb=d4a5a8051ad34a7be72238967afb3e6b140afdc8;hp=c69b7cb9e02686a0c0743925fb53fcd87d93c55d;hpb=73c3b21665e7e22c4c9908272279d9605282acca;p=friendica.git diff --git a/src/Util/Images.php b/src/Util/Images.php index c69b7cb9e0..1305441304 100644 --- a/src/Util/Images.php +++ b/src/Util/Images.php @@ -1,6 +1,6 @@ 'JPG', + 'image/jpg' => 'JPG', 'image/png' => 'PNG', - 'image/gif' => 'GIF' + 'image/gif' => 'GIF', ]; - - return $m; } /** - * Return file extension for mime type - * @param string $mimetype - * @return string + * Return file extension for MIME type + * + * @param string $mimetype MIME type + * @return string File extension for MIME type */ public static function getExtensionByMimeType(string $mimetype): string { @@ -63,9 +64,14 @@ class Images $imagetype = IMAGETYPE_GIF; break; - default: + case 'image/jpeg': + case 'image/jpg': $imagetype = IMAGETYPE_JPEG; break; + + default: // Unknown type must be a blob then + return 'blob'; + break; } return image_type_to_extension($imagetype); @@ -76,11 +82,13 @@ class Images * * @return array */ - public static function supportedTypes() + public static function supportedTypes(): array { $types = [ - 'image/jpeg' => 'jpg' + 'image/jpeg' => 'jpg', + 'image/jpg' => 'jpg', ]; + if (class_exists('Imagick')) { // Imagick::queryFormats won't help us a lot there... // At least, not yet, other parts of friendica uses this array @@ -102,21 +110,20 @@ class Images * * @param string $image_data Image data * @param string $filename File name (for guessing the type via the extension) - * @param string $mime default mime type - * - * @return string + * @param string $default Default MIME type + * @return string MIME type * @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/') { - Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]); - return $mime; + if (substr($default, 0, 6) == 'image/') { + Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $default]); + return $default; } $image = @getimagesizefromstring($image_data); 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']; } @@ -128,21 +135,20 @@ class Images * * @param string $sourcefile Source file of the image * @param string $filename File name (for guessing the type via the extension) - * @param string $mime default mime type - * - * @return string + * @param string $default default MIME type + * @return string MIME type * @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/') { - Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]); - return $mime; + if (substr($default, 0, 6) == 'image/') { + Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $default]); + return $default; } $image = @getimagesize($sourcefile); if (!empty($image['mime'])) { - Logger::info('Mime type detected via file', ['filename' => $filename, 'default' => $mime, 'image' => $image]); + Logger::info('Mime type detected via file', ['filename' => $filename, 'default' => $default, 'image' => $image]); return $image['mime']; } @@ -150,14 +156,13 @@ class Images } /** - * Guess image mimetype from the filename - * - * @param string $filename Image filename + * Guess image MIME type from the filename's extension * - * @return string + * @param string $filename Image filename + * @return string Guessed MIME type by extension * @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); $types = self::supportedTypes(); @@ -173,11 +178,13 @@ class Images } /** + * Gets info array from given URL, cached data has priority + * * @param string $url - * @return array + * @return array Info * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getInfoFromURLCached($url) + public static function getInfoFromURLCached(string $url): array { $data = []; @@ -195,15 +202,17 @@ class Images DI::cache()->set($cacheKey, $data); } - return $data; + return $data ?? []; } /** + * Gets info from URL uncached + * * @param string $url - * @return array + * @return array Info array * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getInfoFromURL($url) + public static function getInfoFromURL(string $url): array { $data = []; @@ -220,7 +229,12 @@ class Images } if (empty($img_str)) { - $img_str = DI::httpClient()->fetch($url, 4, HttpClientAccept::IMAGE); + try { + $img_str = DI::httpClient()->fetch($url, HttpClientAccept::IMAGE, 4); + } catch (\Exception $exception) { + Logger::notice('Image is invalid', ['url' => $url, 'exception' => $exception]); + return []; + } } if (!$img_str) { @@ -235,20 +249,30 @@ class Images return []; } - if ($data) { - $data['size'] = $filesize; + if (!$data) { + return []; + } + + $image = new Image($img_str); + + if ($image->isValid()) { + $data['blurhash'] = $image->getBlurHash(); } + $data['size'] = $filesize; + return $data; } /** - * @param integer $width - * @param integer $height - * @param integer $max - * @return array + * Returns scaling information + * + * @param integer $width Width + * @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)) { return ['width' => 0, 'height' => 0]; @@ -294,4 +318,51 @@ class Images return ['width' => $dest_width, 'height' => $dest_height]; } + + /** + * Get a BBCode tag for an local photo page URL with a preview thumbnail and an image description + * + * @param string $resource_id + * @param string $nickname The local user owner of the resource + * @param int $preview Preview image size identifier, either 0, 1 or 2 in decreasing order of size + * @param string $ext Image file extension + * @param string $description + * @return string + */ + public static function getBBCodeByResource(string $resource_id, string $nickname, int $preview, string $ext, string $description = ''): string + { + return self::getBBCodeByUrl( + DI::baseUrl() . '/photos/' . $nickname . '/image/' . $resource_id, + DI::baseUrl() . '/photo/' . $resource_id . '-' . $preview. '.' . $ext, + $description + ); + } + + /** + * Get a BBCode tag for an image URL with a preview thumbnail and an image description + * + * @param string $photo Full image URL + * @param string $preview Preview image URL + * @param string $description + * @return string + */ + public static function getBBCodeByUrl(string $photo, string $preview = null, string $description = ''): string + { + if (!empty($preview)) { + return '[url=' . $photo . '][img=' . $preview . ']' . $description . '[/img][/url]'; + } + + return '[img=' . $photo . ']' . $description . '[/img]'; + } + + /** + * Get the maximum possible upload size in bytes + * + * @return integer + */ + public static function getMaxUploadBytes(): int + { + $upload_size = ini_get('upload_max_filesize') ?: DI::config()->get('system', 'maximagesize'); + return Strings::getBytesFromShorthand($upload_size); + } }