Rails скрепка и перевернутые изображения - PullRequest
12 голосов
/ 05 марта 2012

Недавно я столкнулся с проблемой, когда пользователь загружает изображение и где-то вдоль строк скрепка переворачивает его вверх ногами.

Изображение можно посмотреть здесь http://photoramblr.com/photos/36

Как видите, изображение перевернуто; но перетащите изображение на рабочий стол, и оно появится справа вверх. Поскольку это изображение было сделано на iPhone, я могу только предположить, что это связано с настройкой ориентации изображения на iPhone. Кто-нибудь сталкивался с чем-то подобным или у вас есть предложения, как это решить?

Код здесь довольно простой в переводе: "Скрепка":

class Photo < ActiveRecord::Base
  has_attached_file :image,
    :storage => :s3,
    :s3_credentials => S3_CREDENTIALS,
    :styles => {
      :thumb => "100x100#",
      :small => "138x138>",
      :large => "580x580>",
      :x_large => "1600x1600>"}

Обновление

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

Ответы [ 4 ]

11 голосов
/ 05 марта 2012

Да, это проблема, которую мы решили на прошлой неделе, когда я работаю.:) Если вы используете ImageMagick / RMagic для обработки изображений, вы можете использовать Image#auto_orient, чтобы «повернуть или перевернуть изображение на основе тега ориентации EXIF ​​изображения» ;вызовите этот метод на изображении в процессоре Paperclip, и вам будет хорошо.

[Редактировать]

Возможно, вас заинтересуют Rails, Paperclip, -auto-orient,и изменение размера ... .Мне также было интересно, что CarrierWave сделал этот процесс очень простым:

class ImageUploader < CarrierWave::Uploader::Base
  ... # config here

  process :rotate

  def rotate
    manipulate! do |image|
      image.auto_orient
    end
  end
end
5 голосов
/ 06 января 2015

Параметры исходного файла

В Paperclip добавлено source_file_options, которое позволяет передавать параметры процессора, которые применяются непосредственно к исходному файлу, и до , генерируя последующие миниатюры и стили.

Вы можете добавить это, чтобы автоматически ориентировать исходный файл, например:

class Photo < ActiveRecord::Base
  has_attached_file :image,
    storage:             :s3,
    s3_credentials:      S3_CREDENTIALS,
    source_file_options: { all:     '-auto-orient' },
    styles:              { thumb:   "100x100#",
                           small:   "138x138>",
                           large:   "580x580>",
                           x_large: "1600x1600>" }

Это должно быть доступно начиная с версии 2.3.16 гема.

Для получения дополнительной информации см. Следующую проблему в репозитории Github Paperclip:

https://github.com/thoughtbot/paperclip/issues/591

Оригинальный стиль

Также неплохо установить стиль original, чтобы создать автоматически ориентированную и ограниченную по размеру версию, например так:

original: "5000x5000>"

ВНИМАНИЕ: Однако, если вы ожидаете получить загрузки, которые не являются просто изображениями, такими как PDF, это вызовет проблемы, если не сохранить исходный PDF-файл и просто сохранить изображение первой страницы PDF.

0 голосов
/ 04 января 2016

Просто добавьте оригинал: {convert_options: '-auto-orient'} в ваш стиль следующим образом

has_attached_file :image,
:storage => :s3,
:s3_credentials => S3_CREDENTIALS,
:styles => {original: {convert_options: '-auto-orient'},
  :thumb => "100x100#",
  :small => "138x138>",
  :large => "580x580>",
  :x_large => "1600x1600>"}
0 голосов
/ 10 ноября 2013

Это решение, которое наконец-то сработало для меня:

process :rotate
def rotate
  manipulate! do |img|
    img.auto_orient
    img = yield(img) if block_given?
    img
  end
end
...