Я хочу, чтобы изображение было изменено до определенной ширины (220px), а затем в основном resize_to_fill на максимальной высоте (280px).
Я смотрю на вывод строк и столбцов, когда оно изменяет размеры впроцесс большого пальца, и они не имеют смысла вообще.Показывает, что столбцы равны 220, а строки - 146, когда явно обрезанное изображение очень высокое и высокое разрешение.
Кроме того, когда изображение сохраняется, оно сохраняет большой палец, которыйочень высокий и худой, как будто обрезанный ... но без изменений, которые я внес в текущий процесс.
У меня есть обрезанное изображение, прежде чем я запускаю refreshate_versions!на нем, и это его класс:
process :resize_to_limit => [1000,1000]
version :thumb do
process :thumbprocess
end
version :med_thumb do
process :resize_to_fill => [105,80]
end
version :thumb_fill do
process :resize_to_fill => [164,125]
end
version :preview do
process :resize_to_limit => [728,620]
end
version :small_thumb do
process :resize_to_fill => [50,50]
end
def extension_white_list
%w(jpg jpeg gif png)
end
def thumbprocess
manipulate! do |img|
img.change_geometry!('220x') { |cols, rows, img|
if(rows < 280)
img.resize!(0, rows)
else
img.resize_to_fill!(0,280)
end
}
img = yield(img) if block_given?
img
end
end
А затем следующая функция обрезки изображения, вызываемая непосредственно перед refreshate_versions!
def cropImage(x,y,w,h)
begin
img = Magick::ImageList.new(self.file.url)
full_width = img[0].columns
ratio = full_width.to_f / 398
real_x = (x.to_i * ratio).round
real_y = (y.to_i * ratio).round
real_w = (w.to_i * ratio).round
real_h = (h.to_i * ratio).round
self.file.manipulate! do |img|
img = img.crop!(real_x, real_y, real_w, real_h)
end
self.file.store!
self.file.preview.store!
self.file = self.file.url
self.save
raise Hell.new("Not saved") unless self.saved?
return true
rescue Hell => e
flash[:error] = e.message
return false
end
end