diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index 077b878f22..a1e38c702a 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -216,9 +216,11 @@ class CookedPostProcessor return if original_width <= width && original_height <= height return if original_width <= SiteSetting.max_image_width && original_height <= SiteSetting.max_image_height - crop = false - if original_width.to_f / original_height.to_f < MIN_RATIO_TO_CROP - crop = true + crop = original_width.to_f / original_height.to_f < MIN_RATIO_TO_CROP + # prevent iPhone X screenshots from being cropped + crop &= original_width != 1125 && original_height != 2436 + + if crop width, height = ImageSizer.crop(original_width, original_height) img["width"] = width img["height"] = height diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index 0034212b9a..60c27008c2 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -170,6 +170,58 @@ describe CookedPostProcessor do end + context "with tall images" do + + let(:upload) { Fabricate(:upload) } + let(:post) { Fabricate(:post_with_large_image) } + let(:cpp) { CookedPostProcessor.new(post) } + + before do + SiteSetting.create_thumbnails = true + + Upload.expects(:get_from_url).returns(upload) + FastImage.expects(:size).returns([860, 1900]) + OptimizedImage.expects(:resize).never + OptimizedImage.expects(:crop).returns(true) + + FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0) + end + + it "crops the image" do + cpp.post_process_images + expect(cpp.html).to match /width="690" height="500">/ + expect(cpp).to be_dirty + end + + end + + context "with iPhone X screenshots" do + + let(:upload) { Fabricate(:upload) } + let(:post) { Fabricate(:post_with_large_image) } + let(:cpp) { CookedPostProcessor.new(post) } + + before do + SiteSetting.create_thumbnails = true + + Upload.expects(:get_from_url).returns(upload) + FastImage.expects(:size).returns([1125, 2436]) + OptimizedImage.expects(:resize).returns(true) + OptimizedImage.expects(:crop).never + + FileStore::BaseStore.any_instance.expects(:get_depth_for).returns(0) + end + + it "crops the image" do + cpp.post_process_images + expect(cpp.html).to match_html "

+logo.png1125x2436 1.21 KB +

" + expect(cpp).to be_dirty + end + + end + context "with large images when using subfolders" do let(:upload) { Fabricate(:upload) }