Изменение размера стиля Flickr с Attachment_fu
-
20-09-2019 - |
Вопрос
Я хочу, чтобы Attachment_fu изменил размер мои миниатюры аналогично тому, как Flickr, Facebook и Twitter справляются с этим: если я хочу миниатюр 100x100, я хочу, чтобы миниатюр был ровно 100x100 с любым избыточным обрезанием, так что соотношение сторон сохранилось.
Любые идеи?
Решение 4
Мое решение состояло в том, чтобы ввести в папку плагина Attachment_fu (поставщик/плагины) и отредактировать файл rmagick_processor.rb. Сначала я переименовал RESIZIZE_IMAGE в RESIZIZE_IMAGE_INTERNAL, затем добавил:
def resize_image(img, size)
# resize_image take size in a number of formats, we just want
# Strings in the form of "square: WxH"
if (size.is_a?(String) && size =~ /^square: (\d*)x(\d*)/i) ||
(size.is_a?(Array) && size.first.is_a?(String) &&
size.first =~ /^square: (\d*)x(\d*)/i)
iw, ih = img.columns, img.rows
aspect = iw.to_f / ih.to_f
if aspect > 1
shave_off = (iw - ih) / 2
img.shave!(shave_off, 0)
else
shave_off = (ih-iw) / 2
img.shave!(0, shave_off)
end
resize_image_internal(img, "#{$1}x#{$2}!")
else
resize_image_internal(img, size) # Otherwise let attachment_fu handle it
end
end
Теперь я могу использовать «Square: 100x100» в качестве строки геометрии. Обратите внимание, что приведенный выше код предполагает, что требуемый выход - квадратный.
Другие советы
Чтобы настроить миниатюры 100x100, добавьте следующее в свою модель:
has_attachment :content_type => :image,
:storage => IMAGE_STORAGE,
:max_size => 20.megabytes,
:thumbnails => {
:thumb => '100x100>',
:large => '800x600>',
}
(В этом примере я создаю миниатюру 100x100, а также большой размер 800x600, в дополнение к сохранению исходного размера.)
Кроме того, имейте в виду, что миниатюра может быть не ровно 100x100; Он будет иметь максимальный размер 100x100. Это означает, что если у оригинала есть аспект 4: 3, миниатюра будет 100x75. Я не совсем уверен, что это то, что вы имели в виду под «ровно 100x100 с любым избыточным обрезанием, так что соотношение сторон сохранилось».
Добавьте это в свою модель
protected
# Override image resizing method
def resize_image(img, size)
# resize_image take size in a number of formats, we just want
# Strings in the form of "crop: WxH"
if (size.is_a?(String) && size =~ /^crop: (\d*)x(\d*)/i) ||
(size.is_a?(Array) && size.first.is_a?(String) &&
size.first =~ /^crop: (\d*)x(\d*)/i)
img.crop_resized!($1.to_i, $2.to_i)
# We need to save the resized image in the same way the
# orignal does.
self.temp_path = write_to_temp_file(img.to_blob)
else
super # Otherwise let attachment_fu handle it
end
end
и изменить размер миниатюры на:
:thumbnails => {:thumb => 'crop: 100x100' }
источник:
http://stuff-things.net/2008/02/21/quick-and-dirty-cropping-images-with-attachment_fu/
В спецификации есть директива, которая может быть указана:
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100#'
}
Memonic: '#' выглядит как инструмент обрезки.
Редактировать: Коррекция
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100!'
}
Предыдущий метод был для скрепки, который имеет другую нотация.