Redimensionnement du style flickr avec attachement_fu
-
20-09-2019 - |
Question
Je veux que la pièce jointe redimensionne mes miniatures d'une manière similaire à la façon dont Flickr, Facebook et Twitter gèrent ceci: si je veux une miniature de 100x100, je veux que la miniature soit exactement 100x100 avec un excès de raccourci afin que le rapport d'aspect soit conservé.
Des idées?
La solution 4
Ma solution consistait à plonger dans le dossier du plugin attachment_fu (fournisseur / plugins) et de modifier le fichier rmagick_processor.rb. J'ai d'abord renommé Resize_image à redimensi_image_internal, puis ajouté:
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
Je peux maintenant utiliser «carré: 100x100» comme ma chaîne de géométrie. Notez que le code ci-dessus suppose que la sortie requise est carrée.
Autres conseils
Pour configurer les miniatures 100x100, ajoutez ce qui suit à votre modèle:
has_attachment :content_type => :image,
:storage => IMAGE_STORAGE,
:max_size => 20.megabytes,
:thumbnails => {
:thumb => '100x100>',
:large => '800x600>',
}
(Dans cet exemple, je crée une miniature de 100x100, et aussi une taille de 800x600 «grande», en plus de maintenir la taille d'origine.)
Gardez également à l'esprit que la miniature pourrait ne pas être exactement 100x100; Il aura une dimension maximale de 100x100. Cela signifie que si l'original a une ration d'aspect de 4: 3, la vignette serait 100x75. Je ne sais pas exactement si c'est ce que vous vouliez dire par "exactement 100x100 avec un excès de raccourci afin que le rapport d'aspect soit conservé".
Ajoutez ceci à votre modèle
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
et changer la taille de la miniature en:
:thumbnails => {:thumb => 'crop: 100x100' }
la source:
http://stuff-things.net/2008/02/21/quick-and-dirty-cropping-images-with-attachment_fu/
Il y a une directive de culture qui peut être donnée dans la spécification:
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100#'
}
Memonic: '#' ressemble à l'outil de recadrage.
Éditer: Correction
has_attachment :content_type => :image,
:thumbnails => {
:thumb => '100x100!'
}
La méthode précédente était pour le trombone qui a une notation différente.