Forked from sprsquish/controller_for_image_model.rb
Created
February 8, 2009 21:35
-
-
Save shadowmaru/60520 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ImageModelsController < ApplicationController | |
before_filter :find_image_model, :only => [:update] | |
def update | |
if @image_model.update_attributes(params[:image_model]) | |
@image_model.image.reprocess! | |
end | |
end | |
protected | |
def find_image_model | |
@image_model = ImageModel.find params[:id] | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(function() { | |
function setCropMarks(c) { | |
$('#crop_x').val(c.x); | |
$('#crop_y').val(c.y); | |
$('#crop_w').val(c.w); | |
$('#crop_h').val(c.h); | |
} | |
$.globalEval('var cropSettings = '+$('#crop_settings').val()) | |
$('.crop img').Jcrop({ | |
setSelect: cropSettings, | |
onChange: setCropMarks, | |
onSelect: setCropMarks | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<% form_for @image_model do |f| %> | |
<div class='crop'><%= image_tag(@image_model.image.url) %></div> | |
<%= f.hidden_field :crop_x, :id => 'crop_x' %> | |
<%= f.hidden_field :crop_y, :id => 'crop_y' %> | |
<%= f.hidden_field :crop_w, :id => 'crop_w' %> | |
<%= f.hidden_field :crop_h, :id => 'crop_h' %> | |
<%= hidden_field_tag :crop_settings, @image_model.crop_settings.to_json %> | |
<% end %> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Jcropper paperclip processor | |
# | |
# This processor very slightly changes the default thumbnail processor in order to work properly with Jcrop | |
# the jQuery cropper plugin. | |
module Paperclip | |
# Handles thumbnailing images that are uploaded. | |
class Jcropper < Processor | |
attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options | |
# Creates a Thumbnail object set to work on the +file+ given. It | |
# will attempt to transform the image into one defined by +target_geometry+ | |
# which is a "WxH"-style string. +format+ will be inferred from the +file+ | |
# unless specified. Thumbnail creation will raise no errors unless | |
# +whiny+ is true (which it is, by default. If +convert_options+ is | |
# set, the options will be appended to the convert command upon image conversion | |
def initialize file, options = {} | |
super | |
geometry = options[:geometry] | |
@file = file | |
@crop = geometry[-1,1] == '#' | |
@target_geometry = Geometry.parse geometry | |
@current_geometry = Geometry.from_file @file | |
@convert_options = options[:convert_options] | |
@whiny = options[:whiny].nil? ? true : options[:whiny] | |
@format = options[:format] | |
@current_format = File.extname(@file.path) | |
@basename = File.basename(@file.path, @current_format) | |
end | |
# Returns true if the +target_geometry+ is meant to crop. | |
def crop? | |
@crop | |
end | |
# Returns true if the image is meant to make use of additional convert options. | |
def convert_options? | |
not @convert_options.blank? | |
end | |
# Performs the conversion of the +file+ into a thumbnail. Returns the Tempfile | |
# that contains the new image. | |
def make | |
src = @file | |
dst = Tempfile.new([@basename, @format].compact.join(".")) | |
dst.binmode | |
command = <<-end_command | |
"#{ File.expand_path(src.path) }[0]" | |
#{ transformation_command } | |
"#{ File.expand_path(dst.path) }" | |
end_command | |
begin | |
success = Paperclip.run("convert", command.gsub(/\s+/, " ")) | |
rescue PaperclipCommandLineError | |
raise PaperclipError, "There was an error processing the thumbnail for #{@basename}" if @whiny | |
end | |
dst | |
end | |
# Returns the command ImageMagick's +convert+ needs to transform the image | |
# into the thumbnail. | |
def transformation_command | |
scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) | |
trans = '' | |
trans << " #{convert_options}" if convert_options? | |
trans << " -resize \"#{scale}\"" | |
trans << " -crop \"#{crop}\" +repage" if crop | |
trans | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example usage of Jcropper | |
# == Schema Information | |
# Table name: image_models | |
# | |
# id :integer(4) not null, primary key | |
# image_file_name :string(255) | |
# image_content_type :string(255) | |
# image_file_size :integer(4) | |
# image_updated_at :datetime | |
# crop_x :integer(4) default(0) | |
# crop_y :integer(4) default(0) | |
# crop_h :integer(4) default(0) | |
# crop_w :integer(4) default(0) | |
# | |
class ImageModel < ActiveRecord::Base | |
has_attached_file :image, | |
:styles => { | |
:resized => '120x41>', | |
:cropped => '100%x100%' | |
}, | |
:processors => [:jcropper], | |
:convert_options => { :all => proc { |m| "-crop #{m.crop_w}x#{m.crop_h}+#{m.crop_x}+#{m.crop_y}" } } | |
def crop_settings | |
[crop_x, crop_y, (crop_x+crop_w), (crop_y+crop_h)] | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment