Скрепка Rails и перевернутые изображения

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

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

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

Код здесь довольно прост на языке Paperclip:

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

Обновлять

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


person Tony Beninate    schedule 04.03.2012    source источник


Ответы (4)


Да, это проблема, которую мы решили на прошлой неделе там, где я работаю. :) Если вы используете 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
person Michelle Tilley    schedule 05.03.2012
comment
Эй, спасибо за совет; Я обязательно это реализую. - person Tony Beninate; 05.03.2012
comment
Удивительно! Спасибо @Брэндон Тилли - person VvDPzZ; 29.11.2012
comment
Это то, что сработало для меня def rotate manipulate! do |img| img.auto_orient img = yield(img) if block_given? img end end - person anu; 29.11.2012
comment
Мне пришлось изменить это на image.tap(&:auto_orient), иначе я получил бы NoMethodError: undefined method destroy!' для истинного: TrueClass` - person Besi; 05.03.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 драгоценного камня.

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

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

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

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

original: "5000x5000>"

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

person Joshua Pinter    schedule 06.01.2015

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

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

Просто добавьте оригинал: {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>"}
person jmcastel    schedule 04.01.2016