Module: StorageImageProcessing

Includes:
ImageManipulation, WatermarkFu
Included in:
ActAsAttachedFile
Defined in:
app/models/concerns/storage_image_processing.rb

Instance Method Summary collapse

Methods included from ImageManipulation

#crop_image, #landscape?, #portrait?, #resize_to_larger_side, #resize_to_larger_side!, #rotate_attached_image, #rotate_image, #rotate_left, #rotate_right

Methods included from WatermarkFu

#build_watermarks, #create_watermark, #create_watermark_canvas, #has_watermark?, #need_watermark?, #put_watermark_on_base_image, #watermark_canvas_path, #watermark_dir_path, #watermark_font, #watermark_path

Instance Method Details

#build_base_imageObject



67
68
69
70
71
# File 'app/models/concerns/storage_image_processing.rb', line 67

def build_base_image
  src  = path
  base = path :base
  prepare_image(src, base, TheStorages.config.base_larger_side)
end

#build_base_imagesObject



12
13
14
15
16
17
18
19
# File 'app/models/concerns/storage_image_processing.rb', line 12

def build_base_images
  resize_src_image
  refresh_base_image

  # set process state
  src_size = File.size?(path)
  update(processing: :finished, attachment_file_size: src_size)
end

#build_correct_previewObject



61
62
63
64
65
# File 'app/models/concerns/storage_image_processing.rb', line 61

def build_correct_preview
  src      = path
  preview  = path :preview
  build_square_image(src, preview, 100)
end

#build_square_image(src, dest, side = 100) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/models/concerns/storage_image_processing.rb', line 36

def build_square_image src, dest, side = 100
  image = MiniMagick::Image.open src

  min_size = image[:width]
  shift    = { x: 0, y: 0}
  
  if landscape?(image)
    min_size  = image[:height]
    shift[:x] = (image[:width] - min_size) / 2
  elsif portrait?(image)
    min_size  = image[:width]
    shift[:y] = (image[:height] - min_size) / 2
  end    
  
  x0 = shift[:x]
  y0 = shift[:y]
  w  = h = min_size

  image.crop "#{w}x#{h}+#{x0}+#{y0}"
  image.resize "#{side}x#{side}!"

  create_img_dir_path(dest)
  image.write dest
end

#create_img_dir_path(path) ⇒ Object



21
22
23
24
# File 'app/models/concerns/storage_image_processing.rb', line 21

def create_img_dir_path path
  _path = path.split('/')[0...-1].join('/')
  FileUtils.mkdir_p _path
end

#destroy_processed_filesObject



84
85
86
87
88
89
# File 'app/models/concerns/storage_image_processing.rb', line 84

def destroy_processed_files
  base    = path :base
  preview = path :preview

  FileUtils.rm([base, preview], force: true)
end

#draw_watermarkObject



6
7
8
9
10
# File 'app/models/concerns/storage_image_processing.rb', line 6

def draw_watermark
  return false unless need_watermark?
  build_watermarks
  put_watermark_on_base_image
end

#prepare_image(src, dest, larger_side) ⇒ Object

IMAGE PROCESSING



27
28
29
30
31
32
33
34
# File 'app/models/concerns/storage_image_processing.rb', line 27

def prepare_image src, dest, larger_side
  image = MiniMagick::Image.open src
  image.auto_orient
  resize_to_larger_side(image, larger_side)
  image.strip
  create_img_dir_path(dest)
  image.write(dest)
end

#refresh_base_imageObject



73
74
75
76
77
# File 'app/models/concerns/storage_image_processing.rb', line 73

def refresh_base_image
  build_base_image
  build_correct_preview
  draw_watermark
end

#resize_src_imageObject



79
80
81
82
# File 'app/models/concerns/storage_image_processing.rb', line 79

def resize_src_image
  src = path
  prepare_image(src, src, TheStorages.config.original_larger_side)
end