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
crop = (modifier == "#")
thumbnail = ::Vips::Image.thumbnail(
source.path,
target_width,
height: crop ? target_height : nil,
size: (modifier == ">" ? :down : :both), crop: crop ? :centre : :none
)
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
thumbnail = ::Vips::Image.new_from_file(source.path) unless defined?(thumbnail) && thumbnail
thumbnail = process_convert_options(thumbnail)
save_thumbnail(thumbnail, destination.path)
rescue StandardError => e
puts e.message, e.backtrace
if @whiny
message = "There was an error processing the thumbnail for #{@basename}:\n#{e.message}"
raise Paperclip::Error, message
end
end
destination end
|