add cropped support for video uploads

This commit is contained in:
Albert Yi
2018-07-03 16:37:53 -07:00
parent 7f895bd91f
commit 99807580d5
2 changed files with 37 additions and 7 deletions

View File

@@ -130,7 +130,7 @@ class UploadService
def self.generate_resizes(file, upload)
if upload.is_video?
video = FFMPEG::Movie.new(file.path)
crop_file = generate_video_preview_for(video, Danbooru.config.small_image_width, Danbooru.config.small_image_width)
crop_file = generate_video_crop_for(video, Danbooru.config.small_image_width)
preview_file = generate_video_preview_for(video, Danbooru.config.small_image_width, Danbooru.config.small_image_width)
elsif upload.is_ugoira?
@@ -149,6 +149,14 @@ class UploadService
[preview_file, crop_file, sample_file]
end
def self.generate_video_crop_for(video, width)
vp = Tempfile.new(["video-preview", ".jpg"], binmode: true)
video.screenshot(vp.path, {:seek_time => 0, :resolution => "#{video.width}x#{video.height}"})
crop = DanbooruImageResizer.crop(vp, width, 85)
vp.close
return crop
end
def self.generate_video_preview_for(video, width, height)
dimension_ratio = video.width.to_f / video.height
if dimension_ratio > 1

View File

@@ -162,9 +162,14 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a preview and a video" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_operator(File.size(sample.path), :>, 0)
assert_equal(60, ImageSpec.new(preview.path).width)
assert_equal(60, ImageSpec.new(preview.path).height)
assert_equal(150, ImageSpec.new(crop.path).width)
assert_equal(150, ImageSpec.new(crop.path).height)
preview.close
preview.unlink
sample.close
@@ -186,10 +191,17 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a video" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_equal(150, ImageSpec.new(preview.path).width)
assert_equal(150, ImageSpec.new(preview.path).height)
assert_equal(150, ImageSpec.new(crop.path).width)
assert_equal(150, ImageSpec.new(crop.path).height)
preview.close
preview.unlink
crop.close
crop.unlink
end
end
@@ -202,10 +214,17 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a video" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_equal(150, ImageSpec.new(preview.path).width)
assert_equal(150, ImageSpec.new(preview.path).height)
assert_equal(150, ImageSpec.new(crop.path).width)
assert_equal(150, ImageSpec.new(crop.path).height)
preview.close
preview.unlink
crop.close
crop.unlink
end
end
end
@@ -230,8 +249,9 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a preview" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_operator(File.size(sample.path), :>, 0)
preview.close
preview.unlink
@@ -246,8 +266,9 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a preview" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_operator(File.size(sample.path), :>, 0)
preview.close
preview.unlink
@@ -262,8 +283,9 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "generate a preview" do
preview, sample = subject.generate_resizes(@file, @upload)
preview, crop, sample = subject.generate_resizes(@file, @upload)
assert_operator(File.size(preview.path), :>, 0)
assert_operator(File.size(crop.path), :>, 0)
assert_operator(File.size(sample.path), :>, 0)
preview.close
preview.unlink