我最近遇到了一个问题,即用户上传了一张图片并且在某处某处,回形针正在翻转它。
可以在此处查看相关图片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>"}
答案 0 :(得分:11)
是的,这是我们上周解决的问题。 :)如果您使用ImageMagick / RMagic进行图像处理,可以使用Image#auto_orient
to "rotate or flip the image based on the image's EXIF orientation tag";在Paperclip处理器中对图像调用此方法,您应该好好去。
[编辑]
您可能对Rails, Paperclip, -auto-orient, and resizing...感兴趣。我还发现有趣的是CarrierWave使这个过程非常简单:
class ImageUploader < CarrierWave::Uploader::Base
... # config here
process :rotate
def rotate
manipulate! do |image|
image.auto_orient
end
end
end
答案 1 :(得分:5)
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>" }
这应该从gem的2.3.16版本开始提供。
有关详细信息,请参阅Paperclip&#39; Github回购中的以下问题:
https://github.com/thoughtbot/paperclip/issues/591
设置original
样式以创建面向自动和尺寸限制的版本也不是一个糟糕的主意,如下所示:
original: "5000x5000>"
注意但是,如果您希望上传不仅仅是图片(如PDF),则会因为不保留原始PDF而只是存储图像而导致问题PDF的第一页。
答案 2 :(得分:0)
这是最终对我有用的解决方案:
process :rotate
def rotate
manipulate! do |img|
img.auto_orient
img = yield(img) if block_given?
img
end
end
答案 3 :(得分:0)
只需将原作:{convert_options:&#39; -auto-orient&#39;}添加到您喜欢的风格中
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>"}