Move Object\Image static methods to Util\Images

- Optimize imports in modified files
This commit is contained in:
Hypolite Petovan 2019-10-17 21:26:15 -04:00
parent b543ee8ac7
commit 03bf1dcbd3
15 changed files with 322 additions and 217 deletions

View file

@ -6,11 +6,9 @@
namespace Friendica\Object;
use Exception;
use Friendica\Core\Cache;
use Friendica\Core\Config;
use Friendica\Core\Logger;
use Friendica\Core\System;
use Friendica\Util\Network;
use Friendica\Util\Images;
use Imagick;
use ImagickPixel;
@ -32,31 +30,6 @@ class Image
private $type;
private $types;
/**
* @brief supported mimetypes and corresponding file extensions
* @return array
*/
public static function supportedTypes()
{
if (class_exists('Imagick')) {
// Imagick::queryFormats won't help us a lot there...
// At least, not yet, other parts of friendica uses this array
$t = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/gif' => 'gif'
];
} else {
$t = [];
$t['image/jpeg'] ='jpg';
if (imagetypes() & IMG_PNG) {
$t['image/png'] = 'png';
}
}
return $t;
}
/**
* @brief Constructor
* @param string $data
@ -67,9 +40,9 @@ class Image
public function __construct($data, $type = null)
{
$this->imagick = class_exists('Imagick');
$this->types = static::supportedTypes();
$this->types = Images::supportedTypes();
if (!array_key_exists($type, $this->types)) {
$type='image/jpeg';
$type = 'image/jpeg';
}
$this->type = $type;
@ -108,20 +81,6 @@ class Image
return $this->imagick;
}
/**
* @brief Maps Mime types to Imagick formats
* @return array With with image formats (mime type as key)
*/
public static function getFormatsMap()
{
$m = [
'image/jpeg' => 'JPG',
'image/png' => 'PNG',
'image/gif' => 'GIF'
];
return $m;
}
/**
* @param string $data data
* @return boolean
@ -142,7 +101,7 @@ class Image
/*
* Setup the image to the format it will be saved to
*/
$map = self::getFormatsMap();
$map = Images::getFormatsMap();
$format = $map[$this->type];
$this->image->setFormat($format);
@ -712,6 +671,26 @@ class Image
return $string;
}
/**
* @brief supported mimetypes and corresponding file extensions
* @return array
* @deprecated in version 2019.12 please use Util\Images::supportedTypes() instead.
*/
public static function supportedTypes()
{
return Images::supportedTypes();
}
/**
* @brief Maps Mime types to Imagick formats
* @return array With with image formats (mime type as key)
* @deprecated in version 2019.12 please use Util\Images::getFormatsMap() instead.
*/
public static function getFormatsMap()
{
return Images::getFormatsMap();
}
/**
* Guess image mimetype from filename or from Content-Type header
*
@ -719,102 +698,24 @@ class Image
* @param boolean $fromcurl Check Content-Type header from curl request
* @param string $header passed headers to take into account
*
* @return object
* @throws \ImagickException
* @return string|null
* @throws Exception
* @deprecated in version 2019.12 please use Util\Images::guessType() instead.
*/
public static function guessType($filename, $fromcurl = false, $header = '')
{
Logger::log('Image: guessType: '.$filename . ($fromcurl?' from curl headers':''), Logger::DEBUG);
$type = null;
if ($fromcurl) {
$headers=[];
$h = explode("\n", $header);
foreach ($h as $l) {
$data = array_map("trim", explode(":", trim($l), 2));
if (count($data) > 1) {
list($k,$v) = $data;
$headers[$k] = $v;
}
}
if (array_key_exists('Content-Type', $headers))
$type = $headers['Content-Type'];
}
if (is_null($type)) {
// Guessing from extension? Isn't that... dangerous?
if (class_exists('Imagick') && file_exists($filename) && is_readable($filename)) {
/**
* Well, this not much better,
* but at least it comes from the data inside the image,
* we won't be tricked by a manipulated extension
*/
$image = new Imagick($filename);
$type = $image->getImageMimeType();
$image->setInterlaceScheme(Imagick::INTERLACE_PLANE);
} else {
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$types = self::supportedTypes();
$type = "image/jpeg";
foreach ($types as $m => $e) {
if ($ext == $e) {
$type = $m;
}
}
}
}
Logger::log('Image: guessType: type='.$type, Logger::DEBUG);
return $type;
return Images::guessType($filename, $fromcurl, $header);
}
/**
* @param string $url url
* @return object
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @deprecated in version 2019.12 please use Util\Images::getInfoFromURLCached() instead.
*/
public static function getInfoFromURL($url)
{
$data = [];
if (empty($url)) {
return $data;
}
$data = Cache::get($url);
if (is_null($data) || !$data || !is_array($data)) {
$img_str = Network::fetchUrl($url, true, 4);
if (!$img_str) {
return false;
}
$filesize = strlen($img_str);
try {
if (function_exists("getimagesizefromstring")) {
$data = @getimagesizefromstring($img_str);
} else {
$tempfile = tempnam(get_temppath(), "cache");
$a = \get_app();
$stamp1 = microtime(true);
file_put_contents($tempfile, $img_str);
$a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack());
$data = getimagesize($tempfile);
unlink($tempfile);
}
} catch (Exception $e) {
return false;
}
if ($data) {
$data["size"] = $filesize;
}
Cache::set($url, $data);
}
return $data;
return Images::getInfoFromURLCached($url);
}
/**
@ -822,50 +723,10 @@ class Image
* @param integer $height height
* @param integer $max max
* @return array
* @deprecated in version 2019.12 please use Util\Images::getScalingDimensions() instead.
*/
public static function getScalingDimensions($width, $height, $max)
{
if ((!$width) || (!$height)) {
return false;
}
if ($width > $max && $height > $max) {
// very tall image (greater than 16:9)
// constrain the width - let the height float.
if ((($height * 9) / 16) > $width) {
$dest_width = $max;
$dest_height = intval(($height * $max) / $width);
} elseif ($width > $height) {
// else constrain both dimensions
$dest_width = $max;
$dest_height = intval(($height * $max) / $width);
} else {
$dest_width = intval(($width * $max) / $height);
$dest_height = $max;
}
} else {
if ($width > $max) {
$dest_width = $max;
$dest_height = intval(($height * $max) / $width);
} else {
if ($height > $max) {
// very tall image (greater than 16:9)
// but width is OK - don't do anything
if ((($height * 9) / 16) > $width) {
$dest_width = $width;
$dest_height = $height;
} else {
$dest_width = intval(($width * $max) / $height);
$dest_height = $max;
}
} else {
$dest_width = $width;
$dest_height = $height;
}
}
}
return ["width" => $dest_width, "height" => $dest_height];
return Images::getScalingDimensions($width, $height, $max);
}
}