FIX: Compatibility with ImageMagick 7.

FIX: Compatibility with ImageMagick 7.

Miscellaneous -- IM v6 Examples

“The “-interpolate” setting of ‘Catrom’ (generally imprecisely known as ‘BiCubic’ interpolation)”

diff --git a/app/models/optimized_image.rb b/app/models/optimized_image.rb
index 6a7c388..d9f43b9 100644
--- a/app/models/optimized_image.rb
+++ b/app/models/optimized_image.rb
@@ -145,7 +145,7 @@ class OptimizedImage < ActiveRecord::Base
       -background transparent
       -#{thumbnail_or_resize} #{dimensions}^
       -extent #{dimensions}
-      -interpolate bicubic
+      -interpolate catrom
       -unsharp 2x0.5+0.7+0
       -interlace none
       -quality 98
diff --git a/lib/upload_creator.rb b/lib/upload_creator.rb
index 35fdc9c..b7f3a57 100644
--- a/lib/upload_creator.rb
+++ b/lib/upload_creator.rb
@@ -241,13 +241,13 @@ class UploadCreator
     when "profile_background"
       max_width = 850 * max_pixel_ratio
       width, height = ImageSizer.resize(@image_info.size[0], @image_info.size[1], max_width: max_width, max_height: max_width)
-      OptimizedImage.downsize(@file.path, @file.path, "#{width}x#{height}\\>", filename: @filename, allow_animation: allow_animation)
+      OptimizedImage.downsize(@file.path, @file.path, "#{width}x#{height}" + '>', filename: @filename, allow_animation: allow_animation)
     when "card_background"
       max_width = 590 * max_pixel_ratio
       width, height = ImageSizer.resize(@image_info.size[0], @image_info.size[1], max_width: max_width, max_height: max_width)
-      OptimizedImage.downsize(@file.path, @file.path, "#{width}x#{height}\\>", filename: @filename, allow_animation: allow_animation)
+      OptimizedImage.downsize(@file.path, @file.path, "#{width}x#{height}" + '>', filename: @filename, allow_animation: allow_animation)
     when "custom_emoji"
-      OptimizedImage.downsize(@file.path, @file.path, "100x100\\>", filename: @filename, allow_animation: allow_animation)
+      OptimizedImage.downsize(@file.path, @file.path, '100x100>', filename: @filename, allow_animation: allow_animation)
     end
 
     extract_image_info!
diff --git a/spec/fixtures/images/cropped.png b/spec/fixtures/images/cropped.png
new file mode 100644
index 0000000..ad84dfe
Binary files /dev/null and b/spec/fixtures/images/cropped.png differ
diff --git a/spec/fixtures/images/downsized.png b/spec/fixtures/images/downsized.png
new file mode 100644
index 0000000..9f3bd66
Binary files /dev/null and b/spec/fixtures/images/downsized.png differ
diff --git a/spec/fixtures/images/resized.png b/spec/fixtures/images/resized.png
new file mode 100644
index 0000000..2dd1533
Binary files /dev/null and b/spec/fixtures/images/resized.png differ
diff --git a/spec/models/optimized_image_spec.rb b/spec/models/optimized_image_spec.rb
index 07317e9..ce5604f 100644
--- a/spec/models/optimized_image_spec.rb
+++ b/spec/models/optimized_image_spec.rb
@@ -1,10 +1,71 @@
 require 'rails_helper'
 
 describe OptimizedImage do
-
   let(:upload) { build(:upload) }
   before { upload.id = 42 }
 
+  describe '.crop' do
+    it 'should work correctly' do
+      tmp_path = "/tmp/cropped.png"
+
+      begin
+        OptimizedImage.crop(
+          "#{Rails.root}/spec/fixtures/images/logo.png",
+          tmp_path,
+          5,
+          5
+        )
+
+        expect(File.read(tmp_path)).to eq(
+          File.read("#{Rails.root}/spec/fixtures/images/cropped.png")
+        )
+      ensure
+        File.delete(tmp_path) if File.exists?(tmp_path)
+      end
+    end
+  end
+
+  describe '.resize' do
+    it 'should work correctly' do
+      tmp_path = "/tmp/resized.png"
+
+      begin
+        OptimizedImage.resize(
+          "#{Rails.root}/spec/fixtures/images/logo.png",
+          tmp_path,
+          5,
+          5
+        )
+
+        expect(File.read(tmp_path)).to eq(
+          File.read("#{Rails.root}/spec/fixtures/images/resized.png")
+        )
+      ensure
+        File.delete(tmp_path) if File.exists?(tmp_path)
+      end
+    end
+  end
+
+  describe '.downsize' do
+    it 'should work correctly' do
+      tmp_path = "/tmp/downsized.png"
+
+      begin
+        OptimizedImage.downsize(
+          "#{Rails.root}/spec/fixtures/images/logo.png",
+          tmp_path,
+          '100x100>'
+        )
+
+        expect(File.read(tmp_path)).to eq(
+          File.read("#{Rails.root}/spec/fixtures/images/downsized.png")
+        )
+      ensure
+        File.delete(tmp_path) if File.exists?(tmp_path)
+      end
+    end
+  end
+
   describe ".safe_path?" do
 
     it "correctly detects unsafe paths" do

GitHub sha: 5778c33e

This commit has been mentioned on Discourse Meta. There might be relevant details there: