From 11d371adf24558ee82966cf9d445809d9312e4d4 Mon Sep 17 00:00:00 2001 From: Ivan Moroz Date: Fri, 29 May 2026 13:39:04 +0300 Subject: [PATCH] CONV-048: Add PNG to JPG converter capability --- .../Converters/Image/PngToJpgConverter.php | 84 +++++++++++++++++++ .../Image/PngToJpgConverterTest.php | 30 +++++++ 2 files changed, 114 insertions(+) create mode 100644 app/Support/Converters/Image/PngToJpgConverter.php create mode 100644 tests/Unit/Converters/Image/PngToJpgConverterTest.php diff --git a/app/Support/Converters/Image/PngToJpgConverter.php b/app/Support/Converters/Image/PngToJpgConverter.php new file mode 100644 index 0000000..580e3ad --- /dev/null +++ b/app/Support/Converters/Image/PngToJpgConverter.php @@ -0,0 +1,84 @@ + 'quality', + 'type' => 'segmented', + 'label' => 'Quality', + 'default' => 'high', + 'options' => [ + ['value' => 'medium', 'label' => 'Medium'], + ['value' => 'high', 'label' => 'High'], + ['value' => 'best', 'label' => 'Best'], + ], + ], + [ + 'key' => 'resize', + 'type' => 'select', + 'label' => 'Resize', + 'default' => 'original', + 'options' => [ + ['value' => 'original', 'label' => 'Original'], + ['value' => '1920', 'label' => '1920 px'], + ['value' => '1280', 'label' => '1280 px'], + ['value' => 'custom', 'label' => 'Custom'], + ], + ], + [ + 'key' => 'background_color', + 'type' => 'color', + 'label' => 'Background color', + 'default' => '#ffffff', + ], + [ + 'key' => 'remove_metadata', + 'type' => 'toggle', + 'label' => 'Remove metadata', + 'default' => true, + ], + ]; + } + + public function validateOptions(array $options): array + { + return $this->optionsValidator->validate($this->optionsSchema(), $options); + } +} diff --git a/tests/Unit/Converters/Image/PngToJpgConverterTest.php b/tests/Unit/Converters/Image/PngToJpgConverterTest.php new file mode 100644 index 0000000..2edcc5b --- /dev/null +++ b/tests/Unit/Converters/Image/PngToJpgConverterTest.php @@ -0,0 +1,30 @@ +key())->toBe('png:jpg'); + expect($converter->sourceFormat())->toBe('png'); + expect($converter->targetFormat())->toBe('jpg'); + expect($converter->label())->toBe('JPG'); + expect($converter->description())->not->toBeEmpty(); +}); + +it('provides valid default options for png to jpg', function () { + $converter = app(PngToJpgConverter::class); + + $options = app(OptionsValidator::class)->validate( + $converter->optionsSchema(), + [] + ); + + expect($options)->toHaveKey('quality'); + expect($options)->toHaveKey('resize'); + expect($options)->toHaveKey('background_color'); + expect($options)->toHaveKey('remove_metadata'); + expect($options['background_color'])->toBe('#ffffff'); + expect($options['remove_metadata'])->toBeTrue(); +});