Подтвердить что ты не робот

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

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

Изображение, о котором идет речь, можно увидеть здесь 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>"}

Update

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

4b9b3361

Ответ 1

Да, это проблема, которую мы решили на прошлой неделе, когда я работаю.:) Если вы используете 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

Ответ 2

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

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.

Ответ 3

Это решение, которое, наконец, помогло мне:

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

Ответ 4

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