Rails 5.2 ActiveStorage сохранить и затем прочитать данные Exif - PullRequest
0 голосов
/ 18 декабря 2018

В Rails 5.2. Я пытаюсь сохранить аватар через ActiveStorage, но кажется, что в активном хранилище не сохраняются данные об ориентации изображения.

Я сохраняю аватар через файл_файла в действии создания мой

#user model 

has_one_attached :avatar

private

def avatar_validation
  if avatar.attached?
    if avatar.blob.byte_size > 1000000
      avatar.purge
      errors.add(:avatar, 'file is too large')
    elsif !avatar.blob.content_type.in?(%w[image/png image/jpg 
          image/jpeg])
      avatar.purge
      errors.add(:avatar, 'file type needs to be JPEG, JPG, or PNG')
    end
  end
end

Я читал некоторую документацию для minimagick https://github.com/minimagick/minimagick, но не понял, как я могуассоциировать

user.avatar.blob 

с

image = MiniMagick::Image.open("input.jpg")

Я пытался

image = MiniMagick::Image.open("user.avatar.blob")

, но не повезло

Мне нужно попытаться понять этоиз-за того, что некоторые аватары, хранящиеся в активном хранилище, отображаются повернутыми на 90 градусов.

https://edgeguides.rubyonrails.org/active_storage_overview.html разговоры об обработке изображений, но мне также не повезло с рельсами для драгоценных камней, которые рекомендуют

1 Ответ

0 голосов
/ 18 декабря 2018

Я думаю, что вы хотите использовать вариант при отображении изображения, а не пытаться редактировать сохраненное изображение.Чтобы исправить ориентацию, вы можете сказать:

user.avatar.variant(auto_orient: true)

А если вы хотите выполнить несколько операций одновременно (а не в конвейере), используйте combine_options:

user.avatar.variant(combine_options: {
  auto_orient: true,
  gravity:     'center',
  resize:      '23x42',    # Using real dimensions of course.
  crop:        '23x42+0+0'
})

Отредактированное изображение будет сохранено в кэше, поэтому вы выполняете преобразование только при первом доступе.Возможно, вы захотите поместить свои variant в помощники по видам (или, возможно, даже в зависимости от ваших потребностей), чтобы вы могли изолировать шум.

Возможно, вы также захотите обратиться к документации API.в качестве руководства:

...