wir 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/wir +5 -0
  3. data/lib/wir/app.rb +89 -0
  4. data/lib/wir.rb +4 -0
  5. metadata +102 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d6f38850d1f9b2854c11da595c35e80fe768191df3d414cbab59e1dce1fb692f
4
+ data.tar.gz: f1aaa9e4cc24c7c01838d115acc40ded861b894161e96400ede59d806ad0be90
5
+ SHA512:
6
+ metadata.gz: 5ce460b112bcc7a09ea9bdd0cc0a49e63ea2c3b5886545a4c77c0a224a9839b3619a3dbe1bd2a53b37de16fb6a2b2d7807d7823829a661f7fe5b99f0e1a69a17
7
+ data.tar.gz: 48e4a80b8eb7ff009c8b08f98173fb3b5c0a9c05cceba8289d1466a0c97cee8f1a308a353bccba2e78ec244d51c3b7c088b64a09f6748195cbd7eb5b3346039b
data/bin/wir ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "wir"
4
+
5
+ Wir::App.start
data/lib/wir/app.rb ADDED
@@ -0,0 +1,89 @@
1
+ require "thor"
2
+ require "mini_magick"
3
+ require "image_optimizer"
4
+
5
+ module Wir
6
+ class App < Thor
7
+ ALLOWED_EXTENSIONS = ["jpg", "jpeg", "png"].freeze
8
+
9
+ desc "resize", "Bulk-resize the images within a given directory."
10
+
11
+ method_option :max_dimension,
12
+ aliases: "-m",
13
+ desc: "The maximum dimension of the resized image",
14
+ type: :numeric,
15
+ default: 1920
16
+ method_option :quality,
17
+ aliases: "-q",
18
+ desc: "The resized image quality",
19
+ type: :numeric,
20
+ default: 75
21
+ method_option :directory,
22
+ aliases: "-d",
23
+ desc: "The image input directory",
24
+ type: :string,
25
+ required: true
26
+ method_option :prefix,
27
+ aliases: "-p",
28
+ desc: "The resized image name prefix",
29
+ type: :string,
30
+ default: "image"
31
+ method_option :format,
32
+ aliases: "-f",
33
+ desc: "The resized image extension",
34
+ type: :string,
35
+ default: "jpeg"
36
+ method_option :output,
37
+ aliases: "-o",
38
+ desc: "The resized image output directory",
39
+ type: :string,
40
+ default: "."
41
+ def resize
42
+ unless Dir.exist? options["directory"]
43
+ puts "Cannot resize the image: directory is not exists!"
44
+ return
45
+ end
46
+
47
+ Dir.mkdir options["output"] unless Dir.exist? options["output"]
48
+
49
+ logger = Logger.new(STDOUT)
50
+ logger.info { "Resizing and compressing images with options: #{options.to_h}" }
51
+
52
+ filenames = Dir["#{options["directory"]}/*"].select do |file|
53
+ ALLOWED_EXTENSIONS.any? { |ext| file.downcase.end_with? ext }
54
+ end
55
+
56
+ logger.info { "Got #{filenames.size} images to be resized and compressed. Resizing..." }
57
+
58
+ filenames.each_with_index do |filename, index|
59
+ image = MiniMagick::Image.open(filename)
60
+ image.auto_orient
61
+
62
+ width, height = calculate_dimensions image.dimensions
63
+ output_path = "#{options["output"]}/#{options["prefix"]}-#{index + 1}.#{options["format"]}"
64
+
65
+ logger.info { "Processing #{output_path}..." }
66
+ image.resize "#{width}x#{height}"
67
+ image.format options["format"]
68
+ image.write(output_path)
69
+ ImageOptimizer.new(output_path, quality: options.quality, quiet: true).optimize
70
+ end
71
+
72
+ logger.info { "Done." }
73
+ end
74
+
75
+ private
76
+ def calculate_dimensions(dimensions)
77
+ minimum, maximum = dimensions.sort
78
+ max_dimension = options["max_dimension"]
79
+
80
+ width = maximum.clamp(0, max_dimension)
81
+ height = minimum unless width == max_dimension
82
+
83
+ height ||= (minimum.to_f / maximum * width).ceil.to_i
84
+
85
+ dimensions[0] > dimensions[1] ? [width, height] : [height, width]
86
+ end
87
+ end
88
+ end
89
+
data/lib/wir.rb ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'wir/app'
4
+ module Wir end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Adi Purnama
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-02-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: image_optimizer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mini_magick
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
70
+ email: adiprnm84@gmail.com
71
+ executables:
72
+ - wir
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - bin/wir
77
+ - lib/wir.rb
78
+ - lib/wir/app.rb
79
+ homepage: https://github.com/adiprnm/wir
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubygems_version: 3.0.3
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: Resize and compress the image via command-line interface.
102
+ test_files: []