From a8e613e508ce5865e7e1e90a6556f541c1028ec3 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sun, 25 Jan 2015 22:56:55 +0100 Subject: [PATCH] Animated GIF restructuring, ImageMagick only used for resizing animated sequences. --- classes/File.php | 2 +- lib/default.php | 6 ++--- plugins/ImageMagick/ImageMagickPlugin.php | 33 +++++------------------ 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/classes/File.php b/classes/File.php index 65414977d3..58b1b0ed89 100644 --- a/classes/File.php +++ b/classes/File.php @@ -386,7 +386,7 @@ class File extends Managed_DataObject { // Get some more information about this file through our ImageFile class $image = ImageFile::fromFileObject($this); - if ($image->animated && !common_config('image', 'resize_animated')) { + if ($image->animated && is_null(common_config('thumbnail', 'animated'))) { throw new UseFileAsThumbnailException($this->id); } diff --git a/lib/default.php b/lib/default.php index b3918494ed..9ca7760280 100644 --- a/lib/default.php +++ b/lib/default.php @@ -131,8 +131,7 @@ $default = 'delete' => false, 'move' => true), 'image' => - array('jpegquality' => 85, - 'resize_animated' => false), // true doesn't mean we _can_, only that we will _try_ (plugins might do it) + array('jpegquality' => 85), 'avatar' => array('server' => null, 'dir' => INSTALLDIR . '/avatar/', @@ -258,7 +257,8 @@ $default = array('crop' => false, // overridden to true if thumb height === null 'maxsize' => 1000, // thumbs with an edge larger than this will not be generated 'width' => 450, - 'height' => 600), + 'height' => 600, + 'animated' => null), // null="UseFileAsThumbnail", false="take still image". true requires ImageMagickPlugin 'application' => array('desclimit' => null), 'group' => diff --git a/plugins/ImageMagick/ImageMagickPlugin.php b/plugins/ImageMagick/ImageMagickPlugin.php index 26335b6df8..20ea468c72 100644 --- a/plugins/ImageMagick/ImageMagickPlugin.php +++ b/plugins/ImageMagick/ImageMagickPlugin.php @@ -34,32 +34,18 @@ if (!defined('GNUSOCIAL')) { exit(1); } * php5-imagick * * Provides: - * Animated image support (for image/gif at least) + * Animated GIF resize support * - * Suggestions: - * After enabling the ImageMagick plugin, you might want to regenerate - * thumbnails for the newly support formats. This is easiest done with - * a script in the GNU social-bundled scripts directory: - * $ php scripts/clean_thumbnails.php + * Comments: + * Animated GIF resize requires setting $config['thumbnail']['animated'] = true; * * Bugs: * Not even ImageMagick is very good at resizing animated GIFs. + * We are not infinitely fast, so resizing animated GIFs is _not_ recommended. */ class ImageMagickPlugin extends Plugin { - // configurable plugin options must be declared public - public $resize_animated = null; - - public function initialize() - { - parent::initialize(); - - if (is_null($this->resize_animated)) { - $this->resize_animated = common_config('image', 'resize_animated'); - } - } - /** * @param ImageFile $file An ImageFile object we're getting metadata for * @param array $info The response from getimagesize() @@ -76,12 +62,8 @@ class ImageMagickPlugin extends Plugin public function onStartResizeImageFile(ImageFile $imagefile, $outpath, array $box) { // So far we only take over the resize for IMAGETYPE_GIF - // (and only animated for gifs!) - if ($imagefile->type == IMAGETYPE_GIF && $imagefile->animated) { - if (!$this->resize_animated) { - // Don't resize if not desired, due to CPU/time limitations - return false; - } + // (and only animated for gifs! (and only if we really want to resize the animation!)) + if ($imagefile->type == IMAGETYPE_GIF && $imagefile->animated && common_config('thumbnail', 'animated')) { $magick = new Imagick($imagefile->filepath); $magick = $magick->coalesceImages(); $magick->setIteratorIndex(0); @@ -111,8 +93,7 @@ class ImageMagickPlugin extends Plugin 'homepage' => 'http://gnu.io/social', 'rawdescription' => // TRANS: Plugin description. - _m('Use ImageMagick for better image support.')); + _m('Use ImageMagick for some more image support.')); return true; } } -