diff options
author | Thomas Citharel <tcit@tcit.fr> | 2022-05-16 19:45:17 +0200 |
---|---|---|
committer | Thomas Citharel <tcit@tcit.fr> | 2022-05-16 20:10:27 +0200 |
commit | b6dd2e3318f869f5abad1bcbce7458f2ae2a1c59 (patch) | |
tree | bbc7ff8aeea8c17c204667823f77bd55103bc9bf /lib | |
parent | 938bf0ca100b110176cfff1fe3a1a34555e3b811 (diff) |
Resize maximum dimensions for pictures coming from SocialApiService
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Service/ImageResizer.php | 50 | ||||
-rw-r--r-- | lib/Service/SocialApiService.php | 17 |
2 files changed, 65 insertions, 2 deletions
diff --git a/lib/Service/ImageResizer.php b/lib/Service/ImageResizer.php new file mode 100644 index 00000000..10581d09 --- /dev/null +++ b/lib/Service/ImageResizer.php @@ -0,0 +1,50 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Thomas Citharel <nextcloud@tcit.fr> + * + * @author Thomas Citharel <nextcloud@tcit.fr> + * + * @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 <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Contacts\Service; + +use OCP\Image; + +class ImageResizer { + public const RESIZE_MAX_X = 256; + public const RESIZE_MAX_Y = 256; + + /** + * @param string $socialData + * @return null|string + */ + public function resizeImage(string $socialData) { + $image = new Image(); + + $image->loadFromData($socialData); + + if ($image->valid()) { + $image->scaleDownToFit(self::RESIZE_MAX_X, self::RESIZE_MAX_Y); + return $image->data(); + } + return null; + } +} diff --git a/lib/Service/SocialApiService.php b/lib/Service/SocialApiService.php index 9d776bd3..9a27a93d 100644 --- a/lib/Service/SocialApiService.php +++ b/lib/Service/SocialApiService.php @@ -57,7 +57,8 @@ class SocialApiService { private $davBackend; /** @var ITimeFactory */ private $timeFactory; - + /** @var ImageResizer */ + private $imageResizer; public function __construct( CompositeSocialProvider $socialProvider, @@ -67,7 +68,8 @@ class SocialApiService { IL10N $l10n, IURLGenerator $urlGen, CardDavBackend $davBackend, - ITimeFactory $timeFactory) { + ITimeFactory $timeFactory, + ImageResizer $imageResizer) { $this->appName = Application::APP_ID; $this->socialProvider = $socialProvider; $this->manager = $manager; @@ -77,6 +79,7 @@ class SocialApiService { $this->urlGen = $urlGen; $this->davBackend = $davBackend; $this->timeFactory = $timeFactory; + $this->imageResizer = $imageResizer; } @@ -224,6 +227,16 @@ class SocialApiService { return new JSONResponse([], Http::STATUS_NOT_FOUND); } + if (is_resource($socialdata)) { + $socialdata = stream_get_contents($socialdata); + } + + $socialdata = $this->imageResizer->resizeImage($socialdata); + + if (!$socialdata) { + return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); + } + // update contact $changes = []; $changes['URI'] = $contact['URI']; |