}
/**
- * 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);
$height = $image->getHeight();
}
}
- if ($filesize > $maximagesize) {
- Logger::notice('Image size is too big', ['size' => $filesize, 'max' => $maximagesize]);
- return null;
- }
}
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')));
+ }
+
/**
* Fetches image from URL and returns an array with instance and local file name
*
*/
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();
return -1;
}
- if ($width > 640 || $height > 640) {
- $image->scaleDown(640);
+ if ($width > Proxy::PIXEL_MEDIUM || $height > Proxy::PIXEL_MEDIUM) {
+ $image->scaleDown(Proxy::PIXEL_MEDIUM);
}
- if ($width > 320 || $height > 320) {
+ if ($width > Proxy::PIXEL_SMALL || $height > Proxy::PIXEL_SMALL) {
$result = self::store($image, $uid, 0, $resource_id, $filename, $album, 1, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $description);
if ($result) {
$preview = 1;
}
- $image->scaleDown(320);
+ $image->scaleDown(Proxy::PIXEL_SMALL);
$result = self::store($image, $uid, 0, $resource_id, $filename, $album, 2, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $description);
if ($result && ($preview == 0)) {
$preview = 2;