From e98d11a9ae49cf8c98ba4edaeb6acf7dd5ce8029 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 26 Mar 2021 06:56:08 +0000 Subject: [PATCH 1/2] Limit the size of contact avatars --- src/Model/Photo.php | 23 +++++++++++++++++++++++ src/Object/Image.php | 15 +++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 4c49bdf43a..1690388595 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -460,6 +460,29 @@ class Photo if ($Image->isValid()) { $Image->scaleToSquare(300); + $filesize = strlen($Image->asString()); + $maximagesize = DI::config()->get('system', 'maximagesize'); + if (!empty($maximagesize) && ($filesize > $maximagesize)) { + Logger::info('Avatar exceeds image limit', ['uid' => $uid, 'cid' => $cid, 'maximagesize' => $maximagesize, 'size' => $filesize, 'type' => $Image->getType()]); + if (($Image->getType() == 'image/gif')) { + $Image->toStatic(); + $Image = new Image($Image->asString(), 'image/png'); + + $filesize = strlen($Image->asString()); + Logger::info('Converted gif to a static png', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]); + } + if ($filesize > $maximagesize) { + foreach ([160, 80] as $pixels) { + if ($filesize > $maximagesize) { + Logger::info('Resize', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'max' => $maximagesize, 'pixels' => $pixels, 'type' => $Image->getType()]); + $Image->scaleDown($pixels); + $filesize = strlen($Image->asString()); + } + } + } + Logger::info('Avatar is resized', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]); + } + $r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4); if ($r === false) { diff --git a/src/Object/Image.php b/src/Object/Image.php index c1da711f9c..4645a8678a 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -575,6 +575,21 @@ class Image 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 From 0539c788ef447b3a77217e216e6937aa04a9069c Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 26 Mar 2021 15:51:26 +0100 Subject: [PATCH 2/2] Update src/Model/Photo.php Co-authored-by: Hypolite Petovan --- src/Model/Photo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 1690388595..8b677a5192 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -464,7 +464,7 @@ class Photo $maximagesize = DI::config()->get('system', 'maximagesize'); if (!empty($maximagesize) && ($filesize > $maximagesize)) { Logger::info('Avatar exceeds image limit', ['uid' => $uid, 'cid' => $cid, 'maximagesize' => $maximagesize, 'size' => $filesize, 'type' => $Image->getType()]); - if (($Image->getType() == 'image/gif')) { + if ($Image->getType() == 'image/gif') { $Image->toStatic(); $Image = new Image($Image->asString(), 'image/png');