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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top