From 36f31b5cad63285c22f0d4463062bc7e7cb69799 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 5 Jun 2020 23:10:41 +0200 Subject: [PATCH] Add blurhash to preview cards (#13984) Fixes #13001 --- app/models/preview_card.rb | 9 ++++++++- app/serializers/rest/preview_card_serializer.rb | 2 +- .../20200605155027_add_blurhash_to_preview_cards.rb | 5 +++++ db/schema.rb | 4 ++-- lib/paperclip/blurhash_transcoder.rb | 2 +- 5 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20200605155027_add_blurhash_to_preview_cards.rb diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 2802f4667b..235928260d 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -23,19 +23,25 @@ # updated_at :datetime not null # embed_url :string default(""), not null # image_storage_schema_version :integer +# blurhash :string # class PreviewCard < ApplicationRecord IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze LIMIT = 1.megabytes + BLURHASH_OPTIONS = { + x_comp: 4, + y_comp: 4, + }.freeze + self.inheritance_column = false enum type: [:link, :photo, :video, :rich] has_and_belongs_to_many :statuses - has_attached_file :image, styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 80 -strip' } + has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 80 -strip' } include Attachmentable @@ -72,6 +78,7 @@ class PreviewCard < ApplicationRecord geometry: '400x400>', file_geometry_parser: FastGeometryParser, convert_options: '-coalesce -strip', + blurhash: BLURHASH_OPTIONS, }, } diff --git a/app/serializers/rest/preview_card_serializer.rb b/app/serializers/rest/preview_card_serializer.rb index 2df9d07a7c..66ff47d22e 100644 --- a/app/serializers/rest/preview_card_serializer.rb +++ b/app/serializers/rest/preview_card_serializer.rb @@ -6,7 +6,7 @@ class REST::PreviewCardSerializer < ActiveModel::Serializer attributes :url, :title, :description, :type, :author_name, :author_url, :provider_name, :provider_url, :html, :width, :height, - :image, :embed_url + :image, :embed_url, :blurhash def image object.image? ? full_asset_url(object.image.url(:original)) : nil diff --git a/db/migrate/20200605155027_add_blurhash_to_preview_cards.rb b/db/migrate/20200605155027_add_blurhash_to_preview_cards.rb new file mode 100644 index 0000000000..dc4b7a9849 --- /dev/null +++ b/db/migrate/20200605155027_add_blurhash_to_preview_cards.rb @@ -0,0 +1,5 @@ +class AddBlurhashToPreviewCards < ActiveRecord::Migration[5.2] + def change + add_column :preview_cards, :blurhash, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index e220e13fed..beda93c01a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,8 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_06_01_222558) do - +ActiveRecord::Schema.define(version: 2020_06_05_155027) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -648,6 +647,7 @@ ActiveRecord::Schema.define(version: 2020_06_01_222558) do t.datetime "updated_at", null: false t.string "embed_url", default: "", null: false t.integer "image_storage_schema_version" + t.string "blurhash" t.index ["url"], name: "index_preview_cards_on_url", unique: true end diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb index 5c33c98b0c..1c3a6df025 100644 --- a/lib/paperclip/blurhash_transcoder.rb +++ b/lib/paperclip/blurhash_transcoder.rb @@ -3,7 +3,7 @@ module Paperclip class BlurhashTranscoder < Paperclip::Processor def make - return @file unless options[:style] == :small + return @file unless options[:style] == :small || options[:blurhash] pixels = convert(':source RGB:-', source: File.expand_path(@file.path)).unpack('C*') geometry = options.fetch(:file_geometry_parser).from_file(@file)