]> git.mxchange.org Git - friendica.git/blobdiff - mod/wall_upload.php
Merge pull request #10124 from annando/media-attachments
[friendica.git] / mod / wall_upload.php
index 093d5db773d3325e372035d5eb78747703bc2d8d..c99c43fa0a1495a591b3954f615d075b134a0978 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -99,7 +99,7 @@ function wall_upload_post(App $a, $desktopmode = true)
                        echo json_encode(['error' => DI::l10n()->t('Permission denied.')]);
                        exit();
                }
-               notice(DI::l10n()->t('Permission denied.') . EOL);
+               notice(DI::l10n()->t('Permission denied.'));
                exit();
        }
 
@@ -159,7 +159,7 @@ function wall_upload_post(App $a, $desktopmode = true)
                        echo json_encode(['error' => DI::l10n()->t('Invalid request.')]);
                        exit();
                }
-               notice(DI::l10n()->t('Invalid request.').EOL);
+               notice(DI::l10n()->t('Invalid request.'));
                exit();
        }
 
@@ -168,19 +168,6 @@ function wall_upload_post(App $a, $desktopmode = true)
        Logger::log("File upload src: " . $src . " - filename: " . $filename .
                " - size: " . $filesize . " - type: " . $filetype, Logger::DEBUG);
 
-       $maximagesize = DI::config()->get('system', 'maximagesize');
-
-       if (($maximagesize) && ($filesize > $maximagesize)) {
-               $msg = DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize));
-               if ($r_json) {
-                       echo json_encode(['error' => $msg]);
-               } else {
-                       echo  $msg. EOL;
-               }
-               @unlink($src);
-               exit();
-       }
-
        $imagedata = @file_get_contents($src);
        $Image = new Image($imagedata, $filetype);
 
@@ -204,12 +191,39 @@ function wall_upload_post(App $a, $desktopmode = true)
        }
        if ($max_length > 0) {
                $Image->scaleDown($max_length);
+               $filesize = strlen($Image->asString());
                Logger::log("File upload: Scaling picture to new size " . $max_length, Logger::DEBUG);
        }
 
        $width = $Image->getWidth();
        $height = $Image->getHeight();
 
+       $maximagesize = DI::config()->get('system', 'maximagesize');
+
+       if (!empty($maximagesize) && ($filesize > $maximagesize)) {
+               // Scale down to multiples of 640 until the maximum size isn't exceeded anymore
+               foreach ([5120, 2560, 1280, 640] 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);
+                               $filesize = strlen($Image->asString());
+                               $width = $Image->getWidth();
+                               $height = $Image->getHeight();
+                       }
+               }
+               if ($filesize > $maximagesize) {
+                       Logger::notice('Image size is too big', ['size' => $filesize, 'max' => $maximagesize]);
+                       $msg = DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize));
+                       if ($r_json) {
+                               echo json_encode(['error' => $msg]);
+                       } else {
+                               echo  $msg. EOL;
+                       }
+                       @unlink($src);
+                       exit();
+               }
+       }
+
        $resource_id = Photo::newResource();
 
        $smallest = 0;