Vimensionamiento de estilo Flickr con Adjunto_FU
-
20-09-2019 - |
Pregunta
Quiero que Adjuguen_fu cambie mis miniaturas de manera similar a cómo Flickr, Facebook y Twitter manejan esto: si quiero una miniatura de 100x100, quiero que la miniatura sea exactamente 100x100 con cualquier exceso de recorte para que se conserve la relación de aspecto.
¿Algunas ideas?
Solución 4
Mi solución fue profundizar en la carpeta de complemento adjunta_fu (proveedor/complementos) y editar el archivo rmagick_processor.rb. Primero cambié el nombre de resize_image a resize_image_internal, luego agregué:
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
Ahora puedo usar 'Square: 100x100' como mi cadena de geometría. Tenga en cuenta que el código anterior supone que la salida requerida es cuadrada.
Otros consejos
Para configurar las miniaturas 100x100, agregue lo siguiente a su modelo:
has_attachment :content_type => :image,
:storage => IMAGE_STORAGE,
:max_size => 20.megabytes,
:thumbnails => {
:thumb => '100x100>',
:large => '800x600>',
}
(En este ejemplo, estoy creando una miniatura de 100x100 y también un tamaño 'grande' de 800x600, adicional a mantener el tamaño original).
Además, tenga en cuenta que la miniatura podría no ser exactamente 100x100; Tendrá una dimensión máxima de 100x100. Esto significa que si el original tiene una ración de aspecto de 4: 3, la miniatura sería 100x75. No estoy exactamente seguro de si eso es lo que quisiste decir con "exactamente 100x100 con cualquier exceso de recorte para que se conserva la relación de aspecto".
Agregue esto a su modelo
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
y cambie el tamaño de la miniatura a:
:thumbnails => {:thumb => 'crop: 100x100' }
fuente:
http://stuff-things.net/2008/02/21/quick-and-dirty-cropping-images-with-attachment_fu/
Hay una directiva de cultivo que se puede dar en la especificación:
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100#'
}
Memonic: '#' se parece a la herramienta de cultivo.
Editar: Corrección
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100!'
}
El método anterior era para PaperClip que tiene una notación diferente.