From 13f98c02e3b83619dd678d92e8ead173914287a2 Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 5 Sep 2021 07:43:31 -0500 Subject: [PATCH] media file: fix overly large thumbnails for animated GIFs. Fix regression in ef2857667 that caused animated GIFs and PNGs to generate thumbnails that were larger than 150x150. Also fix a bug with cropped previews not being generated for animated GIFs and PNGs. --- app/logical/media_file/image.rb | 32 ++++++++++++++------------- test/files/test-animated-256x256.png | Bin 0 -> 21213 bytes test/files/test-animated-400x281.gif | Bin 0 -> 16454 bytes test/unit/media_file_test.rb | 2 ++ 4 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 test/files/test-animated-256x256.png create mode 100644 test/files/test-animated-400x281.gif diff --git a/app/logical/media_file/image.rb b/app/logical/media_file/image.rb index dab6a5dab..cb0b75e9d 100644 --- a/app/logical/media_file/image.rb +++ b/app/logical/media_file/image.rb @@ -38,26 +38,28 @@ class MediaFile::Image < MediaFile # @see https://github.com/jcupitt/libvips/wiki/HOWTO----Image-shrinking # @see http://jcupitt.github.io/libvips/API/current/Using-vipsthumbnail.md.html def preview(width, height) - if is_animated? - FFmpeg.new(file).smart_video_preview - else - output_file = Tempfile.new(["image-preview", ".jpg"]) - resized_image = image.thumbnail_image(width, height: height, **THUMBNAIL_OPTIONS) - resized_image.jpegsave(output_file.path, **JPEG_OPTIONS) - - MediaFile::Image.new(output_file) - end - end - - def crop(width, height) - output_file = Tempfile.new(["image-crop", ".jpg"]) - resized_image = image.thumbnail_image(width, height: height, **CROP_OPTIONS) + output_file = Tempfile.new(["image-preview", ".jpg"]) + resized_image = preview_frame.image.thumbnail_image(width, height: height, **THUMBNAIL_OPTIONS) resized_image.jpegsave(output_file.path, **JPEG_OPTIONS) MediaFile::Image.new(output_file) end - private + def crop(width, height) + output_file = Tempfile.new(["image-crop", ".jpg"]) + resized_image = preview_frame.image.thumbnail_image(width, height: height, **CROP_OPTIONS) + resized_image.jpegsave(output_file.path, **JPEG_OPTIONS) + + MediaFile::Image.new(output_file) + end + + def preview_frame + if is_animated? + FFmpeg.new(file).smart_video_preview + else + self + end + end def is_animated_gif? file_ext == :gif && image.get("n-pages") > 1 diff --git a/test/files/test-animated-256x256.png b/test/files/test-animated-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f6c289a39d6a10c3dcccf9f988678d976286fa GIT binary patch literal 21213 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 literal 0 HcmV?d00001 diff --git a/test/files/test-animated-400x281.gif b/test/files/test-animated-400x281.gif new file mode 100644 index 0000000000000000000000000000000000000000..f413d5ac2a32e8e5a236737c92bb57193e67e9bb GIT binary patch literal 16454 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