From 5b699da1ab6865e6c7f18e8fc986b2fde16cbbb9 Mon Sep 17 00:00:00 2001 From: Flo Kosiol Date: Sun, 17 Apr 2022 07:57:30 +0200 Subject: [PATCH] revert mime types for gd + add im comments --- src/Focus/GdLib.php | 19 +------- src/Focus/ImageMagick.php | 97 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 18 deletions(-) diff --git a/src/Focus/GdLib.php b/src/Focus/GdLib.php index c15d188..e5b61b6 100644 --- a/src/Focus/GdLib.php +++ b/src/Focus/GdLib.php @@ -8,7 +8,6 @@ use Kirby\Image\Image; use Kirby\Image\Dimensions; use Kirby\Image\Darkroom; -use Kirby\Toolkit\Mime; class GdLib extends Darkroom { @@ -22,7 +21,6 @@ class GdLib extends Darkroom public function process(string $file, array $options = []): array { $options = $this->preprocess($file, $options); - $mime = $this->mime($options); // original image dimension for focus cropping $originalImage = new Image($file); @@ -39,7 +37,7 @@ public function process(string $file, array $options = []): array $image = $this->blur($image, $options); $image = $this->grayscale($image, $options); - $image->toFile($file, $mime, $options['quality']); + $image->toFile($file, null, $options['quality']); return $options; } @@ -115,19 +113,4 @@ protected function grayscale(SimpleImage $image, array $options) return $image->desaturate(); } - - /** - * Returns mime type based on `format` option - * - * @param array $options - * @return string|null - */ - protected function mime(array $options): ?string - { - if ($options['format'] === null) { - return null; - } - - return Mime::fromExtension($options['format']); - } } \ No newline at end of file diff --git a/src/Focus/ImageMagick.php b/src/Focus/ImageMagick.php index 87eac9b..20bad4f 100644 --- a/src/Focus/ImageMagick.php +++ b/src/Focus/ImageMagick.php @@ -8,8 +8,25 @@ use Kirby\Image\Darkroom; use Kirby\Toolkit\F; +/** + * ImageMagick + * + * @package Kirby Image + * @author Bastian Allgeier + * @link https://getkirby.com + * @copyright Bastian Allgeier GmbH + * @license https://opensource.org/licenses/MIT + */ class ImageMagick extends Darkroom { + /** + * Activates imagemagick's auto-orient feature unless + * it is deactivated via the options + * + * @param string $file + * @param array $options + * @return string + */ protected function autoOrient(string $file, array $options) { if ($options['autoOrient'] === true) { @@ -17,6 +34,13 @@ protected function autoOrient(string $file, array $options) } } + /** + * Applies the blur settings + * + * @param string $file + * @param array $options + * @return string + */ protected function blur(string $file, array $options) { if ($options['blur'] !== false) { @@ -24,6 +48,13 @@ protected function blur(string $file, array $options) } } + /** + * Keep animated gifs + * + * @param string $file + * @param array $options + * @return string + */ protected function coalesce(string $file, array $options) { if (F::extension($file) === 'gif') { @@ -31,11 +62,23 @@ protected function coalesce(string $file, array $options) } } + /** + * Creates the convert command with the right path to the binary file + * + * @param string $file + * @param array $options + * @return string + */ protected function convert(string $file, array $options): string { return sprintf($options['bin'] . ' "%s"', $file); } + /** + * Returns additional default parameters for imagemagick + * + * @return array + */ protected function defaults(): array { return parent::defaults() + [ @@ -44,6 +87,13 @@ protected function defaults(): array ]; } + /** + * Applies the correct settings for grayscale images + * + * @param string $file + * @param array $options + * @return string + */ protected function grayscale(string $file, array $options) { if ($options['grayscale'] === true) { @@ -51,6 +101,14 @@ protected function grayscale(string $file, array $options) } } + /** + * Applies the correct settings for interlaced JPEGs if + * activated via options + * + * @param string $file + * @param array $options + * @return string + */ protected function interlace(string $file, array $options) { if ($options['interlace'] === true) { @@ -58,6 +116,15 @@ protected function interlace(string $file, array $options) } } + /** + * Creates and runs the full imagemagick command + * to process the image + * + * @param string $file + * @param array $options + * @return array + * @throws \Exception + */ public function process(string $file, array $options = []): array { $options = $this->preprocess($file, $options); @@ -96,11 +163,26 @@ public function process(string $file, array $options = []): array return $options; } + /** + * Applies the correct JPEG compression quality settings + * + * @param string $file + * @param array $options + * @return string + */ protected function quality(string $file, array $options): string { return '-quality ' . $options['quality']; } + /** + * Creates the correct options to crop or resize the image + * and translates the crop positions for imagemagick + * + * @param string $file + * @param array $options + * @return string + */ protected function resize(string $file, array $options): string { // simple resize @@ -135,11 +217,26 @@ protected function resize(string $file, array $options): string return $command; } + /** + * Makes sure to not process too many images at once + * which could crash the server + * + * @param string $file + * @param array $options + * @return string + */ protected function save(string $file, array $options): string { return sprintf('-limit thread 1 "%s"', $file); } + /** + * Removes all metadata from the image + * + * @param string $file + * @param array $options + * @return string + */ protected function strip(string $file, array $options): string { return '-strip';