diff --git a/app/Jobs/ProcessPosterImage.php b/app/Jobs/ProcessPosterImage.php index e82ea46..fe6920d 100644 --- a/app/Jobs/ProcessPosterImage.php +++ b/app/Jobs/ProcessPosterImage.php @@ -24,8 +24,11 @@ class ProcessPosterImage implements ShouldQueue public function handle() { $imageContents = Storage::disk('public')->get($this->concert->poster_image_path); - $image = Image::make($imageContents); - $image->resize(600)->encode(); + + $image = Image::make($imageContents)->resize(600, null, function ($constraint) { + $constraint->aspectRatio(); + })->limitColors(255)->encode(); + Storage::disk('public')->put($this->concert->poster_image_path, (string) $image); } } diff --git a/tests/Unit/Jobs/ProcessPosterImageTest.php b/tests/Unit/Jobs/ProcessPosterImageTest.php index ddeb38f..28d1873 100644 --- a/tests/Unit/Jobs/ProcessPosterImageTest.php +++ b/tests/Unit/Jobs/ProcessPosterImageTest.php @@ -26,8 +26,35 @@ class ProcessPosterImageTest extends TestCase ProcessPosterImage::dispatch($concert); $resizedImage = Storage::disk('public')->get('posters/example-poster.png'); - list($width) = getimagesizefromstring($resizedImage); + list($width, $height) = getimagesizefromstring($resizedImage); $this->assertEquals(600, $width); + $this->assertEquals(776, $height); + $resizedImageContents = Storage::disk('public')->get('posters/example-poster.png'); + $controlImageContents = file_get_contents(base_path('tests/__fixtures__/optimized-poster.png')); + $this->assertEquals($controlImageContents, $resizedImageContents); + } + + /** @test */ + function it_optimizes_the_poster_image() + { + Storage::fake('public'); + Storage::disk('public')->put( + 'posters/example-poster.png', + file_get_contents(base_path('tests/__fixtures__/small-unoptimized-poster.png')) + ); + $concert = \ConcertFactory::createUnpublished([ + 'poster_image_path' => 'posters/example-poster.png', + ]); + + ProcessPosterImage::dispatch($concert); + + $optimizedImageSize = Storage::disk('public')->size('posters/example-poster.png'); + $originalSize = filesize(base_path('tests/__fixtures__/small-unoptimized-poster.png')); + $this->assertLessThan($originalSize, $optimizedImageSize); + + $optimizedImageContents = Storage::disk('public')->get('posters/example-poster.png'); + $controlImageContents = file_get_contents(base_path('tests/__fixtures__/optimized-poster.png')); + $this->assertEquals($controlImageContents, $optimizedImageContents); } } diff --git a/tests/__fixtures__/optimized-poster.png b/tests/__fixtures__/optimized-poster.png new file mode 100644 index 0000000..4421180 Binary files /dev/null and b/tests/__fixtures__/optimized-poster.png differ diff --git a/tests/__fixtures__/small-unoptimized-poster.png b/tests/__fixtures__/small-unoptimized-poster.png new file mode 100644 index 0000000..94b0b82 Binary files /dev/null and b/tests/__fixtures__/small-unoptimized-poster.png differ