Class: Paperclip::Vips
- Inherits:
-
Processor
- Object
- Processor
- Paperclip::Vips
- Defined in:
- lib/paperclip/vips.rb
Instance Attribute Summary collapse
-
#auto_orient ⇒ Object
Returns the value of attribute auto_orient.
-
#convert_options ⇒ Object
Returns the value of attribute convert_options.
-
#current_geometry ⇒ Object
Returns the value of attribute current_geometry.
-
#format ⇒ Object
Returns the value of attribute format.
-
#source_file_options ⇒ Object
Returns the value of attribute source_file_options.
-
#target_geometry ⇒ Object
Returns the value of attribute target_geometry.
-
#whiny ⇒ Object
Returns the value of attribute whiny.
Instance Method Summary collapse
-
#initialize(file, options = {}, attachment = nil) ⇒ Vips
constructor
A new instance of Vips.
- #make ⇒ Object
Constructor Details
permalink #initialize(file, options = {}, attachment = nil) ⇒ Vips
Returns a new instance of Vips.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/paperclip/vips.rb', line 6 def initialize(file, = {}, = nil) super geometry = [:geometry].to_s @should_crop = geometry[-1, 1] == "#" @target_geometry = .fetch(:string_geometry_parser, Geometry).parse(geometry) @current_geometry = .fetch(:file_geometry_parser, Geometry).from_file(@file) @whiny = .fetch(:whiny, true) @auto_orient = .fetch(:auto_orient, true) @convert_options = [:convert_options] @current_format = current_format(file).downcase @format = [:format] || @current_format @basename = File.basename(@file.path, @current_format) end |
Instance Attribute Details
permalink #auto_orient ⇒ Object
Returns the value of attribute auto_orient.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def auto_orient @auto_orient end |
permalink #convert_options ⇒ Object
Returns the value of attribute convert_options.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def @convert_options end |
permalink #current_geometry ⇒ Object
Returns the value of attribute current_geometry.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def current_geometry @current_geometry end |
permalink #format ⇒ Object
Returns the value of attribute format.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def format @format end |
permalink #source_file_options ⇒ Object
Returns the value of attribute source_file_options.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def @source_file_options end |
permalink #target_geometry ⇒ Object
Returns the value of attribute target_geometry.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def target_geometry @target_geometry end |
permalink #whiny ⇒ Object
Returns the value of attribute whiny.
3 4 5 |
# File 'lib/paperclip/vips.rb', line 3 def whiny @whiny end |
Instance Method Details
permalink #make ⇒ Object
[View source]
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/paperclip/vips.rb', line 24 def make source = @file filename = [@basename, @format ? ".#{@format}" : ""].join destination = TempfileFactory.new.generate(filename) begin if @target_geometry.present? target_width = @target_geometry.width target_height = @target_geometry.height modifier = @target_geometry.modifier # e.g., ">", "#", etc. # Use thumbnail for efficient resizing and cropping crop = (modifier == "#") thumbnail = ::Vips::Image.thumbnail( source.path, target_width, height: crop ? target_height : nil, size: (modifier == ">" ? :down : :both), # ">" means shrink only crop: crop ? :centre : :none ) # Additional cropping for exact "#" dimensions if needed if crop && (thumbnail.width != target_width || thumbnail.height != target_height) left = [0, (thumbnail.width - target_width) / 2].max top = [0, (thumbnail.height - target_height) / 2].max crop_width = [target_width, thumbnail.width - left].min crop_height = [target_height, thumbnail.height - top].min if crop_width.positive? && crop_height.positive? thumbnail = thumbnail.crop(left, top, crop_width, crop_height) end end end # Fallback to original image if no geometry thumbnail = ::Vips::Image.new_from_file(source.path) unless defined?(thumbnail) && thumbnail # Apply convert options thumbnail = (thumbnail) # Save the processed image save_thumbnail(thumbnail, destination.path) rescue StandardError => e puts e., e.backtrace if @whiny = "There was an error processing the thumbnail for #{@basename}:\n#{e.}" raise Paperclip::Error, end end destination # Return the Tempfile object end |