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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top