]> git.mxchange.org Git - friendica.git/commitdiff
New function to resize an image to not exceed a given file size
authorMichael <heluecht@pirati.ca>
Thu, 10 Aug 2023 21:12:35 +0000 (21:12 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 10 Aug 2023 21:12:35 +0000 (21:12 +0000)
src/Model/Photo.php

index 2235137be2f66c036b470082401384c579c37be1..f393211548dc0eed7e8f63706dc503c10104943a 100644 (file)
@@ -990,28 +990,21 @@ class Photo
        }
 
        /**
-        * Tries to resize image to wanted maximum size
+        * Resize to a given maximum file size
         *
-        * @param Image $image Image instance
-        * @return Image|null Image instance on success, null on error
+        * @param Image $image
+        * @param integer $maximagesize
+        * @return Image
         */
-       private static function fitImageSize(Image $image)
+       public static function resizeToFileSize(Image $image, int $maximagesize): Image
        {
-               $max_length = DI::config()->get('system', 'max_image_length');
-               if ($max_length > 0) {
-                       $image->scaleDown($max_length);
-                       Logger::info('File upload: Scaling picture to new size', ['max-length' => $max_length]);
-               }
-
                $filesize = strlen($image->asString());
                $width    = $image->getWidth();
                $height   = $image->getHeight();
-
-               $maximagesize = Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize'));
-
+       
                if ($maximagesize && ($filesize > $maximagesize)) {
                        // Scale down to multiples of 640 until the maximum size isn't exceeded anymore
-                       foreach ([5120, 2560, 1280, 640] as $pixels) {
+                       foreach ([5120, 2560, 1280, 640, 320] as $pixels) {
                                if (($filesize > $maximagesize) && (max($width, $height) > $pixels)) {
                                        Logger::info('Resize', ['size' => $filesize, 'width' => $width, 'height' => $height, 'max' => $maximagesize, 'pixels' => $pixels]);
                                        $image->scaleDown($pixels);
@@ -1020,13 +1013,26 @@ class Photo
                                        $height = $image->getHeight();
                                }
                        }
-                       if ($filesize > $maximagesize) {
-                               Logger::notice('Image size is too big', ['size' => $filesize, 'max' => $maximagesize]);
-                               return null;
-                       }
                }
+       
+               return $image;  
+       }
 
-               return $image;
+       /**
+        * Tries to resize image to wanted maximum size
+        *
+        * @param Image $image Image instance
+        * @return Image|null Image instance on success, null on error
+        */
+       private static function fitImageSize(Image $image)
+       {
+               $max_length = DI::config()->get('system', 'max_image_length');
+               if ($max_length > 0) {
+                       $image->scaleDown($max_length);
+                       Logger::info('File upload: Scaling picture to new size', ['max-length' => $max_length]);
+               }
+               
+               return self::resizeToFileSize($image, Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')));
        }
 
        /**
@@ -1237,32 +1243,7 @@ class Photo
         */
        public static function storeWithPreview(Image $image, int $uid, string $resource_id, string $filename, int $filesize, string $album, string $description, string $allow_cid, string $allow_gid, string $deny_cid, string $deny_gid): int
        {
-               if ($filesize == 0) {
-                       $filesize = strlen($image->asString());
-               }
-
-               $width  = $image->getWidth();
-               $height = $image->getHeight();
-
-               $maximagesize = Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize'));
-
-               if ($maximagesize && $filesize > $maximagesize) {
-                       // Scale down to multiples of 640 until the maximum size isn't exceeded anymore
-                       foreach ([5120, 2560, 1280, 640, 320] as $pixels) {
-                               if ($filesize > $maximagesize && max($width, $height) > $pixels) {
-                                       DI::logger()->info('Resize', ['size' => $filesize, 'width' => $width, 'height' => $height, 'max' => $maximagesize, 'pixels' => $pixels]);
-                                       $image->scaleDown($pixels);
-                                       $filesize = strlen($image->asString());
-                                       $width    = $image->getWidth();
-                                       $height   = $image->getHeight();
-                               }
-                       }
-
-                       if ($filesize > $maximagesize) {
-                               DI::logger()->notice('Image size is too big', ['size' => $filesize, 'max' => $maximagesize]);
-                               return -1;
-                       }
-               }
+               $image = self::resizeToFileSize($image, Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')));
 
                $width   = $image->getWidth();
                $height  = $image->getHeight();