如何用回形针手动裁剪图像?
How to crop image manually with paperclip?
我正在使用 Rails 4.2 和 Mongoid 构建一个网站。我正在使用 mongoid-paperclip,我正在尝试将图像裁剪成正方形,同时保留短边的尺寸(这样图像将填满整个正方形)。这是我的自定义处理器:
module Paperclip
class Cropper < Thumbnail
def initialize(file, options = {}, attachment = nil)
super
@preserved_size = [@current_geometry.width, @current_geometry.height].min
@current_geometry.width = @preserved_size
@current_geometry.height = @preserved_size
end
def target
@attachment.instance
end
def transformation_command
if crop_command
crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ')
else
super
end
end
def crop_command
["-crop", "#{@preserved_size}x#{@preserved_size}+#{@preserved_size}+#{@preserved_size}"]
end
end
end
它附加到的模型看起来有这条线:
has_mongoid_attached_file :image, styles: {square: {processors: [:cropper]}}
但是好像不行。保存了名为 'square' 的图像版本,但它与原始图像完全相同。我怎样才能让它工作?
我能够在不使用回形针处理器的情况下解决这个问题。在我的模型中,我使用 lambda 为图像指定了 styles
:
has_mongoid_attached_file :image, styles: lambda {|a|
tmp = a.queued_for_write[:original]
return {} if tmp.nil?
geometry = Paperclip::Geometry.from_file(tmp)
preserved_size = [geometry.width.to_i, geometry.height.to_i].min
{square: "#{preserved_size}x#{preserved_size}#"}
}
请注意,尺寸末尾的 #
可确保裁剪后的图像始终为指定尺寸,而不只是按比例缩小图像。
我正在使用 Rails 4.2 和 Mongoid 构建一个网站。我正在使用 mongoid-paperclip,我正在尝试将图像裁剪成正方形,同时保留短边的尺寸(这样图像将填满整个正方形)。这是我的自定义处理器:
module Paperclip
class Cropper < Thumbnail
def initialize(file, options = {}, attachment = nil)
super
@preserved_size = [@current_geometry.width, @current_geometry.height].min
@current_geometry.width = @preserved_size
@current_geometry.height = @preserved_size
end
def target
@attachment.instance
end
def transformation_command
if crop_command
crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ')
else
super
end
end
def crop_command
["-crop", "#{@preserved_size}x#{@preserved_size}+#{@preserved_size}+#{@preserved_size}"]
end
end
end
它附加到的模型看起来有这条线:
has_mongoid_attached_file :image, styles: {square: {processors: [:cropper]}}
但是好像不行。保存了名为 'square' 的图像版本,但它与原始图像完全相同。我怎样才能让它工作?
我能够在不使用回形针处理器的情况下解决这个问题。在我的模型中,我使用 lambda 为图像指定了 styles
:
has_mongoid_attached_file :image, styles: lambda {|a|
tmp = a.queued_for_write[:original]
return {} if tmp.nil?
geometry = Paperclip::Geometry.from_file(tmp)
preserved_size = [geometry.width.to_i, geometry.height.to_i].min
{square: "#{preserved_size}x#{preserved_size}#"}
}
请注意,尺寸末尾的 #
可确保裁剪后的图像始终为指定尺寸,而不只是按比例缩小图像。