2011-05-22 13 views
7

Lo que me gustaría hacer es cargar una imagen, luego llevar al usuario a una nueva página donde usaré Jcrop para permitirle al usuario seleccionar la parte de la imagen que desea recortar, y luego almacenar esa imagen. Esencialmente, quiero que sea un proceso de 2 etapas.¿Cómo se recorta una imagen con carrierwave 'after the fact' en rieles?

Sé cómo hacer la parte de JavaScript, y entiendo el flujo básico de cómo crear esta funcionalidad. Sin embargo, no conozco los detalles de la onda de transporte sobre cómo lograr esto.

Lo más cercano que puedo encontrar es:

image.recreate_versions! 

Pero todavía no puede pasar en la altura/anchura y empezando x, y para recortarla.

Por ejemplo, ¿cómo puedo decirle a carrierwave que haga el recorte 'después del hecho' - es decir, no cuando la imagen se carga por primera vez? Veo métodos para "procesar" la imagen, pero suceden automáticamente con altura y ancho fijos. ¿Cómo puedo retrasar esto?

En esencia, lo que me gustaría hacer es definir una versión dinámica, donde puedo especificar la altura y la anchura y X, Y

Gracias

Respuesta

5

Esto es lo mejor que puedo hacer. Probablemente hay una manera más fácil de hacerlo, pero esta es mi truco:

Aquí es mi acción del controlador 'post' cuando la información de cultivo se pasa:

def update_crop 
    @user = User.find(current_user.id) 
    @user.crop(params[:x].to_i, params[:y].to_i, params[:h].to_i, params[:w].to_i) 

    redirect_to(profile_path, :notice => 'Your profile and avatar was successfully updated.') 
    end 

Aquí es el método para agregar al Usuario modelo que contiene un "avatar" cargador de imágenes:

def crop(x, y, h, w) 
    image = Magick::ImageList.new(avatar.current_path) 
    cropped_image = image.crop(x, y, h, w) 
    cropped_image.write(avatar.current_path) 

    avatar.recreate_versions! 
    end 

Básicamente esto sólo hi-gatos de la actual, lo sobrescribe, y luego dice Carrierwave para crear

Cuestiones relacionadas