When avatar/header are GIF, generate static versions (#1428)
* When avatar/header are GIF, generate static versions. Account API returns "avatar"/"avatar_static", "header"/"header_static" Static version is the same as original for other cases Web UI de-animates avatars in toots, lists of users Fix #441, fix #596, prerequisite for #1064 * Fix JS test * Add rake task to generate static avatars/headers from GIF ones, add test
This commit is contained in:
parent
b57eed4584
commit
12f72e1740
15 changed files with 108 additions and 138 deletions
|
@ -12,12 +12,12 @@ class Account < ApplicationRecord
|
|||
validates :username, presence: true, uniqueness: { scope: :domain, case_sensitive: true }, unless: 'local?'
|
||||
|
||||
# Avatar upload
|
||||
has_attached_file :avatar, styles: { original: '120x120#' }, convert_options: { all: '-quality 80 -strip' }
|
||||
has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '-quality 80 -strip' }
|
||||
validates_attachment_content_type :avatar, content_type: IMAGE_MIME_TYPES
|
||||
validates_attachment_size :avatar, less_than: 2.megabytes
|
||||
|
||||
# Header upload
|
||||
has_attached_file :header, styles: { original: '700x335#' }, convert_options: { all: '-quality 80 -strip' }
|
||||
has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '-quality 80 -strip' }
|
||||
validates_attachment_content_type :header, content_type: IMAGE_MIME_TYPES
|
||||
validates_attachment_size :header, less_than: 2.megabytes
|
||||
|
||||
|
@ -158,6 +158,22 @@ class Account < ApplicationRecord
|
|||
save!
|
||||
end
|
||||
|
||||
def avatar_original_url
|
||||
avatar.url(:original)
|
||||
end
|
||||
|
||||
def avatar_static_url
|
||||
avatar_content_type == 'image/gif' ? avatar.url(:static) : avatar_original_url
|
||||
end
|
||||
|
||||
def header_original_url
|
||||
header.url(:original)
|
||||
end
|
||||
|
||||
def header_static_url
|
||||
header_content_type == 'image/gif' ? header.url(:static) : header_original_url
|
||||
end
|
||||
|
||||
def avatar_remote_url=(url)
|
||||
parsed_url = URI.parse(url)
|
||||
|
||||
|
@ -292,6 +308,18 @@ class Account < ApplicationRecord
|
|||
def follow_mapping(query, field)
|
||||
query.pluck(field).inject({}) { |mapping, id| mapping[id] = true; mapping }
|
||||
end
|
||||
|
||||
def avatar_styles(file)
|
||||
styles = { original: '120x120#' }
|
||||
styles[:static] = { format: 'png' } if file.content_type == 'image/gif'
|
||||
styles
|
||||
end
|
||||
|
||||
def header_styles(file)
|
||||
styles = { original: '700x335#' }
|
||||
styles[:static] = { format: 'png' } if file.content_type == 'image/gif'
|
||||
styles
|
||||
end
|
||||
end
|
||||
|
||||
before_create do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue