]> cat aescling's git repositories - mastodon.git/commitdiff
Don't resize avatars/headers if their dimensions are already right (#6508)
authorEugen Rochko <eugen@zeonfederated.com>
Mon, 19 Feb 2018 15:06:12 +0000 (16:06 +0100)
committerGitHub <noreply@github.com>
Mon, 19 Feb 2018 15:06:12 +0000 (16:06 +0100)
Also don't apply "-quality 80" option which is probably the reason
for slight color differences between original and remote image
(because it would apply it twice, once on original instance, and
again on the receiving instance)

app/models/concerns/account_avatar.rb
app/models/concerns/account_header.rb

index 8a5c9a22c3e96c414125a6ca70e921934d41692a..53d0d876f59e913b8b4e9705830c5b81dd96b250 100644 (file)
@@ -7,9 +7,15 @@ module AccountAvatar
 
   class_methods do
     def avatar_styles(file)
-      styles = { original: '120x120#' }
-      styles[:static] = { format: 'png', convert_options: '-coalesce' } if file.content_type == 'image/gif'
+      styles   = {}
+      geometry = Paperclip::Geometry.from_file(file)
+
+      styles[:original] = '120x120#' if geometry.width != geometry.height || geometry.width > 120 || geometry.height > 120
+      styles[:static]   = { format: 'png', convert_options: '-coalesce' } if file.content_type == 'image/gif'
+
       styles
+    rescue Paperclip::Errors::NotIdentifiedByImageMagickError
+      {}
     end
 
     private :avatar_styles
@@ -17,7 +23,7 @@ module AccountAvatar
 
   included do
     # Avatar upload
-    has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '-quality 80 -strip' }
+    has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '-strip' }
     validates_attachment_content_type :avatar, content_type: IMAGE_MIME_TYPES
     validates_attachment_size :avatar, less_than: 2.megabytes
   end
index aff2aa3f90cc1f1038baeeaa2990e20142c8474d..991473d8c0f7073a925a9a9f479a4765343c74f6 100644 (file)
@@ -7,9 +7,15 @@ module AccountHeader
 
   class_methods do
     def header_styles(file)
-      styles = { original: '700x335#' }
-      styles[:static] = { format: 'png', convert_options: '-coalesce' } if file.content_type == 'image/gif'
+      styles   = {}
+      geometry = Paperclip::Geometry.from_file(file)
+
+      styles[:original] = '700x335#' unless geometry.width == 700 && geometry.height == 335
+      styles[:static]   = { format: 'png', convert_options: '-coalesce' } if file.content_type == 'image/gif'
+
       styles
+    rescue Paperclip::Errors::NotIdentifiedByImageMagickError
+      {}
     end
 
     private :header_styles
@@ -17,7 +23,7 @@ module AccountHeader
 
   included do
     # Header upload
-    has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '-quality 80 -strip' }
+    has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '-strip' }
     validates_attachment_content_type :header, content_type: IMAGE_MIME_TYPES
     validates_attachment_size :header, less_than: 2.megabytes
   end