Module: CarrierWave::ImageSorcery

Extended by:
ActiveSupport::Concern
Defined in:
lib/carrierwave-imagesorcery/version.rb,
lib/carrierwave-imagesorcery/image_sorcery.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
"0.0.5"

Instance Method Summary collapse

Instance Method Details

#convert(format) ⇒ Object

Changes the image encoding format to the given format

See www.imagemagick.org/script/command-line-options.php#format

Parameters

format (#to_s)

an abreviation of the format

Examples

image.convert(:png)


43
44
45
46
47
48
49
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 43

def convert(format)
  manipulate! do |img|
    img.manipulate!(:format => format.to_s.downcase)
    img = yield(img) if block_given?
    img
  end
end

#dimensionsObject



148
149
150
151
152
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 148

def dimensions
   manipulate! do |img|
    img.dimensions
  end
end

#manipulate!Object



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 154

def manipulate!
  cache_stored_file! if !cached?
  image = ::ImageSorcery.new current_path
  image = yield(image)

  replace_file(image.file) if !image.is_a?(Hash) && image.filename_changed?

  image
rescue RuntimeError, StandardError => e
  raise CarrierWave::ProcessingError , I18n.translate(:"errors.messages.imagesorcery_processing_error", :e => e)
end

#resize_and_pad(width, height, background = :transparent, gravity = 'Center') ⇒ Object

Resize the image to fit within the specified dimensions while retaining the original aspect ratio. If necessary, will pad the remaining area with the given color, which defaults to transparent (for gif and png, white for jpeg).

See www.imagemagick.org/script/command-line-options.php#gravity for gravity options.

Parameters

width (Integer)

the width to scale the image to

height (Integer)

the height to scale the image to

background (String, :transparent)

the color of the background as a hexcode, like “#ff45de”

gravity (String)

how to position the image



135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 135

def resize_and_pad(width, height, background=:transparent, gravity='Center')
  manipulate! do |img|
    opt={}
    opt[:thumbnail] = "#{width}x#{height}>"
    background == :transparent ? opt[:background] = "rgba(255, 255, 255, 0.0)" : opt[:background] = background
    opt[:gravity] = gravity
    opt[:extent] = "#{width}x#{height}"
    img.manipulate!(opt)
    img = yield(img) if block_given?
    img
  end
end

#resize_to_fill(width, height, gravity = 'Center') ⇒ Object

Resize the image to fit within the specified dimensions while retaining the aspect ratio of the original image. If necessary, crop the image in the larger dimension.

Parameters

width (Integer)

the width to scale the image to

height (Integer)

the height to scale the image to

gravity (String)

the current gravity suggestion (default: ‘Center’; options: ‘NorthWest’, ‘North’, ‘NorthEast’, ‘West’, ‘Center’, ‘East’, ‘SouthWest’, ‘South’, ‘SouthEast’)



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 99

def resize_to_fill(width, height, gravity = 'Center')
  manipulate! do |img|
    cols, rows = img.dimensions[:x].to_i, img.dimensions[:y].to_i
    opt={}
    if width != cols || height != rows
      scale = [width/cols.to_f, height/rows.to_f].max
      cols = (scale * (cols + 0.5)).round
      rows = (scale * (rows + 0.5)).round
      opt[:resize] = "#{cols}x#{rows}"
    end
    opt[:gravity] = gravity
    opt[:background] = "rgba(255,255,255,0.0)"
    opt[:extent] = "#{width}x#{height}" if cols != width || rows != height
    img.manipulate!(opt)
    img = yield(img) if block_given?
    img
  end
end

#resize_to_fit(width, height) ⇒ Object

Resize the image to fit within the specified dimensions while retaining the original aspect ratio. The image may be shorter or narrower than specified in the smaller dimension but will not be larger than the specified values.

Parameters

width (Integer)

the width to scale the image to

height (Integer)

the height to scale the image to



80
81
82
83
84
85
86
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 80

def resize_to_fit(width, height)
  manipulate! do |img|
    img.manipulate!(:resize => "#{width}x#{height}")
    img = yield(img) if block_given?
    img
  end
end

#resize_to_limit(width, height) ⇒ Object

Resize the image to fit within the specified dimensions while retaining the original aspect ratio. Will only resize the image if it is larger than the specified dimensions. The resulting image may be shorter or narrower than specified in the smaller dimension but will not be larger than the specified values.

Parameters

width (Integer)

the width to scale the image to

height (Integer)

the height to scale the image to



62
63
64
65
66
67
68
# File 'lib/carrierwave-imagesorcery/image_sorcery.rb', line 62

def resize_to_limit(width, height)
  manipulate! do |img|
    img.manipulate!(:resize => "#{width}x#{height}>")
    img = yield(img) if block_given?
    img
  end
end