<?php
/**
- * @file src/Object/Image.php
- * @brief This file contains the Image class for image processing
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
*/
+
namespace Friendica\Object;
use Exception;
-use Friendica\Core\Config;
-use Friendica\Core\System;
+use Friendica\DI;
use Friendica\Util\Images;
use Imagick;
use ImagickPixel;
private $types;
/**
- * @brief Constructor
+ * Constructor
* @param string $data
* @param boolean $type optional, default null
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
}
/**
- * @brief Destructor
+ * Destructor
+ *
* @return void
*/
public function __destruct()
$this->image->setFormat($format);
// Always coalesce, if it is not a multi-frame image it won't hurt anyway
- $this->image = $this->image->coalesceImages();
+ try {
+ $this->image = $this->image->coalesceImages();
+ } catch (Exception $e) {
+ return false;
+ }
/*
* setup the compression here, so we'll do it only once
*/
switch ($this->getType()) {
case "image/png":
- $quality = Config::get('system', 'png_quality');
+ $quality = DI::config()->get('system', 'png_quality');
if ((! $quality) || ($quality > 9)) {
$quality = PNG_QUALITY;
}
$this->image->setCompressionQuality($quality);
break;
case "image/jpeg":
- $quality = Config::get('system', 'jpeg_quality');
+ $quality = DI::config()->get('system', 'jpeg_quality');
if ((! $quality) || ($quality > 100)) {
$quality = JPEG_QUALITY;
}
}
if ($this->isImagick()) {
- /* Clean it */
- $this->image = $this->image->deconstructImages();
- return $this->image;
+ try {
+ /* Clean it */
+ $this->image = $this->image->deconstructImages();
+ return $this->image;
+ } catch (Exception $e) {
+ return false;
+ }
}
return $this->image;
}
break;
}
- // Logger::log('exif: ' . print_r($exif,true));
return $exif;
}
}
/**
- * @brief Scale image to target dimensions
+ * Scale image to target dimensions
*
* @param int $dest_width
* @param int $dest_height
do {
// FIXME - implement horizontal bias for scaling as in following GD functions
// to allow very tall images to be constrained only horizontally.
- $this->image->scaleImage($dest_width, $dest_height);
+ try {
+ $this->image->scaleImage($dest_width, $dest_height);
+ } catch (Exception $e) {
+ // Imagick couldn't use the data
+ return false;
+ }
} while ($this->image->nextImage());
// These may not be necessary anymore
return true;
}
+ /**
+ * Convert a GIF to a PNG to make it static
+ */
+ public function toStatic()
+ {
+ if ($this->type != 'image/gif') {
+ return;
+ }
+
+ if ($this->isImagick()) {
+ $this->type == 'image/png';
+ $this->image->setFormat('png');
+ }
+ }
+
/**
* @param integer $max maximum
* @param integer $x x coordinate
$string = $this->asString();
- $a = \get_app();
-
- $stamp1 = microtime(true);
+ DI::profiler()->stopRecording('file');
file_put_contents($path, $string);
- $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack());
+ DI::profiler()->stopRecording();
}
/**
- * @brief Magic method allowing string casting of an Image object
+ * Magic method allowing string casting of an Image object
*
* Ex: $data = $Image->asString();
* can be replaced by
}
if ($this->isImagick()) {
- /* Clean it */
- $this->image = $this->image->deconstructImages();
- $string = $this->image->getImagesBlob();
- return $string;
+ try {
+ /* Clean it */
+ $this->image = $this->image->deconstructImages();
+ $string = $this->image->getImagesBlob();
+ return $string;
+ } catch (Exception $e) {
+ return false;
+ }
}
ob_start();
switch ($this->getType()) {
case "image/png":
- $quality = Config::get('system', 'png_quality');
+ $quality = DI::config()->get('system', 'png_quality');
if ((!$quality) || ($quality > 9)) {
$quality = PNG_QUALITY;
}
imagepng($this->image, null, $quality);
break;
case "image/jpeg":
- $quality = Config::get('system', 'jpeg_quality');
+ $quality = DI::config()->get('system', 'jpeg_quality');
if ((!$quality) || ($quality > 100)) {
$quality = JPEG_QUALITY;
}
}
/**
- * @brief supported mimetypes and corresponding file extensions
+ * supported mimetypes and corresponding file extensions
+ *
* @return array
* @deprecated in version 2019.12 please use Util\Images::supportedTypes() instead.
*/
}
/**
- * @brief Maps Mime types to Imagick formats
+ * 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.
*/
return Images::getFormatsMap();
}
- /**
- * Guess image mimetype from filename or from Content-Type header
- *
- * @param string $filename Image filename
- * @param boolean $fromcurl Check Content-Type header from curl request
- * @param string $header passed headers to take into account
- *
- * @return string|null
- * @throws Exception
- * @deprecated in version 2019.12 please use Util\Images::guessType() instead.
- */
- public static function guessType($filename, $fromcurl = false, $header = '')
- {
- return Images::guessType($filename, $fromcurl, $header);
- }
-
/**
* @param string $url url
* @return array