imagetools 1.4.0 → 1.5.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c695900493f7e008bd7a71202f740d8cf7934017cc4dbd554102e52c45d68be5
4
- data.tar.gz: 9d0085886aac557e3da673d47258a30bf5c8ebcee4d77ad641ce232e73c21bb1
3
+ metadata.gz: f128fc1b72a58b40adbbba6c9c078cd5005d14c230134692c6d9237c2a35bc54
4
+ data.tar.gz: 38f28d503272cd72386ceb7f67b0201f6431adbf861ddfac4e96787467140440
5
5
  SHA512:
6
- metadata.gz: 9a0c730e84290e6f18afa19c5446d98e75fee8a2966229812d7e372e6e3dd9e38909c5f6c447ef8af9c807645b936248b50086709cce7f7df301e02536b60aef
7
- data.tar.gz: c3e99d26db139acc25fc259449e6ba7344c9e788bd595ad6744a408ff7e5da253d07f00dc0a57a8036e464dc8c6f3763f07327fb137dddfd2be49f7aa37bcadb
6
+ metadata.gz: 45346fcff77ae87676bb73a1cf7d622dfbcc14e90cabf114e2d123e4792ab9b175808a4cb0eb9412db6f600984e8973158e1406e804704c70e5ff08477dbbad2
7
+ data.tar.gz: c2ef3862385e14409f88dbe169248d3f624e2fbfd789ea63ef679c1826ad119461dbde03a38912886cec06a24e21dc1d9e0438f13fe275006e9aab4028a6bdd7
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="RunConfigurationProducerService">
4
+ <option name="ignoredProducers">
5
+ <set>
6
+ <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
7
+ </set>
8
+ </option>
9
+ </component>
10
+ </project>
data/.idea/workspace.xml CHANGED
@@ -1,12 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
3
  <component name="ChangeListManager">
4
- <list default="true" id="b197c64f-57f8-4389-ab8d-dc9fe3cb05ba" name="Default" comment="">
5
- <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
6
- <change beforePath="$PROJECT_DIR$/Gemfile.lock" beforeDir="false" afterPath="$PROJECT_DIR$/Gemfile.lock" afterDir="false" />
7
- <change beforePath="$PROJECT_DIR$/imagetools.gemspec" beforeDir="false" afterPath="$PROJECT_DIR$/imagetools.gemspec" afterDir="false" />
8
- <change beforePath="$PROJECT_DIR$/imagetools.iml" beforeDir="false" afterPath="$PROJECT_DIR$/imagetools.iml" afterDir="false" />
9
- </list>
4
+ <list default="true" id="b197c64f-57f8-4389-ab8d-dc9fe3cb05ba" name="Default" comment="" />
10
5
  <option name="SHOW_DIALOG" value="false" />
11
6
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
12
7
  <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -32,7 +27,6 @@
32
27
  <component name="ProjectId" id="1YvZY4FKb8fv8Y6MWahnStNLEFS" />
33
28
  <component name="ProjectViewState">
34
29
  <option name="hideEmptyMiddlePackages" value="true" />
35
- <option name="showExcludedFiles" value="true" />
36
30
  <option name="showLibraryContents" value="true" />
37
31
  </component>
38
32
  <component name="PropertiesComponent">
@@ -42,12 +36,17 @@
42
36
  <property name="MemberChooser.copyJavadoc" value="false" />
43
37
  <property name="MemberChooser.showClasses" value="true" />
44
38
  <property name="MemberChooser.sorted" value="false" />
39
+ <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
40
+ <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
45
41
  <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
46
42
  <property name="WebServerToolWindowFactoryState" value="false" />
47
43
  <property name="aspect.path.notification.shown" value="true" />
48
44
  <property name="last_opened_file_path" value="$PROJECT_DIR$" />
49
45
  <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
50
46
  <property name="nodejs_npm_path_reset_for_default_project" value="true" />
47
+ <property name="project.structure.last.edited" value="Project" />
48
+ <property name="project.structure.proportion" value="0.0" />
49
+ <property name="project.structure.side.proportion" value="0.0" />
51
50
  <property name="settings.editor.selected.configurable" value="preferences.keymap" />
52
51
  </component>
53
52
  <component name="RunManager">
@@ -73,11 +72,12 @@
73
72
  <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
74
73
  <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
75
74
  <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
76
- <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
75
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov" ENABLE_FORKED_COVERAGE="true">
77
76
  <COVERAGE_PATTERN ENABLED="true">
78
77
  <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
79
78
  </COVERAGE_PATTERN>
80
79
  </EXTENSION>
80
+ <EXTENSION ID="org.jetbrains.plugins.ruby.rails.run.RailsRunConfigurationExtension" SCRATCH_USE_RAILS_RUNNER="false" />
81
81
  <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$PROJECT_DIR$/exe/iconcreator" />
82
82
  <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
83
83
  <method v="2">
@@ -103,6 +103,7 @@
103
103
  </method>
104
104
  </configuration>
105
105
  </component>
106
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
106
107
  <component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" RAKE_SPRING_PRE_LOADER_OPTION="false" RAILS_SPRING_PRE_LOADER_OPTION="false" />
107
108
  <component name="SvnConfiguration">
108
109
  <configuration />
@@ -115,6 +116,7 @@
115
116
  <updated>1570340432394</updated>
116
117
  <workItem from="1570340436196" duration="217000" />
117
118
  <workItem from="1583825074054" duration="96000" />
119
+ <workItem from="1646719315550" duration="10000" />
118
120
  </task>
119
121
  <servers />
120
122
  </component>
@@ -131,12 +133,6 @@
131
133
  </list>
132
134
  </option>
133
135
  </component>
134
- <component name="WindowStateProjectService">
135
- <state x="100" y="123" width="1720" height="977" key="DiffContextDialog" timestamp="1583825160786">
136
- <screen x="0" y="23" width="1920" height="1177" />
137
- </state>
138
- <state x="100" y="123" width="1720" height="977" key="DiffContextDialog/-1920.23.1920.1177/0.23.1920.1177@0.23.1920.1177" timestamp="1583825160786" />
139
- </component>
140
136
  <component name="masterDetails">
141
137
  <states>
142
138
  <state key="ProjectJDKs.UI">
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.5
1
+ 3.0.2
data/Gemfile.lock CHANGED
@@ -1,15 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- imagetools (1.4.0)
5
- rmagick (= 3.2.0)
4
+ imagetools (1.5.2)
5
+ rmagick
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  minitest (5.15.0)
11
11
  rake (13.0.6)
12
- rmagick (3.2.0)
12
+ rmagick (4.2.4)
13
13
 
14
14
  PLATFORMS
15
15
  ruby
@@ -21,4 +21,4 @@ DEPENDENCIES
21
21
  rake (~> 13.0)
22
22
 
23
23
  BUNDLED WITH
24
- 2.1.4
24
+ 2.3.8
data/exe/imageblog ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'imagetools/imageblog'
4
+
5
+ Imagetools::Imageblog.run(ARGV)
data/imagetools.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.bindir = "exe"
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
- spec.add_dependency "rmagick", "3.2.0"
32
+ spec.add_dependency "rmagick"
33
33
  spec.add_development_dependency "bundler", "~> 2.0"
34
34
  spec.add_development_dependency "rake", "~> 13.0"
35
35
  spec.add_development_dependency "minitest", "~> 5.0"
data/imagetools.iml CHANGED
@@ -3,7 +3,7 @@
3
3
  <component name="NewModuleRootManager" inherit-compiler-output="true">
4
4
  <exclude-output />
5
5
  <content url="file://$MODULE_DIR$" />
6
- <orderEntry type="jdk" jdkName="rbenv: 2.6.5" jdkType="RUBY_SDK" />
6
+ <orderEntry type="jdk" jdkName="rbenv: 3.0.2" jdkType="RUBY_SDK" />
7
7
  <orderEntry type="sourceFolder" forTests="false" />
8
8
  <orderEntry type="module-library">
9
9
  <library name="minitest (vbundled(5.14.0)) [path][gem]" type="rubylib">
@@ -0,0 +1,148 @@
1
+ # coding: utf-8
2
+ # imagehugo: hugo用の画像処理。リネームとサムネイル&アイキャッチ画像の生成。
3
+
4
+ require 'imagetools/version'
5
+ require 'imagetools/imagefilter'
6
+ require 'rmagick'
7
+ require 'optparse'
8
+ require 'fileutils'
9
+
10
+ module Imagetools
11
+ class ImageItem
12
+ attr_accessor :srcfile, :dstfile, :outfile
13
+ def to_s
14
+ "#{srcfile}=>#{dstfile}=>#{outfile}"
15
+ end
16
+ end
17
+
18
+ class Imageblog
19
+ def self.run(argv)
20
+ STDOUT.sync = true
21
+ opts = {}
22
+ opt = OptionParser.new(argv)
23
+ opt.version = VERSION
24
+ opt.banner = "Usage: #{opt.program_name} [-h|--help] <dir> or <image1 image2 image3 ...>"
25
+ opt.separator('')
26
+ opt.separator("Examples:")
27
+ opt.separator(" #{opt.program_name} ~/tmp # concat two recent IMG_*jpg images.")
28
+ opt.separator(" #{opt.program_name} image1.jpg image2.jpg image3.jpg # concat specified images.")
29
+ opt.separator('')
30
+ opt.separator("Options:")
31
+ opt.on_head('-h', '--help', 'Show this message') do |v|
32
+ puts opt.help
33
+ exit
34
+ end
35
+ opt.on('-v', '--verbose', 'Verbose message') {|v| opts[:v] = v}
36
+ opt.on('--dry-run', 'Message only') {|v| opts[:dry_run] = v}
37
+ opt.on('-o OUTDIR', '--output=OUTDIR', 'Output dir') {|v| opts[:o] = v}
38
+ opt.on('-n NUM', '--number=NUM', 'Process image number') {|v| opts[:n] = v.to_i}
39
+ opt.on('-b BASENAME', '--base=BASENAME', 'Output file basename') {|v| opts[:b] = v}
40
+ opt.parse!(argv)
41
+ opts[:b] ||= Time.now.strftime("%Y%m%d")
42
+ dir, image_files = get_image_files(opts, argv)
43
+ if image_files.size == 0
44
+ puts opt.help
45
+ exit
46
+ end
47
+ command = Imageblog.new(opts)
48
+ command.run(dir, image_files)
49
+ end
50
+
51
+ def self.get_image_files(opts, argv)
52
+ image_files = []
53
+ # ディレクトリが処理対象かどうかを決める
54
+ dir = nil
55
+ if argv.size == 1
56
+ # 引き数が1個の場合は最初の引き数
57
+ path = File.expand_path(argv[0])
58
+ if FileTest.directory?(path)
59
+ dir = path
60
+ end
61
+ elsif argv.size == 0
62
+ # 引き数がない場合カレントディレクトリ
63
+ dir = File.expand_path('.')
64
+ end
65
+ if dir
66
+ concat_number = opts[:n] || 2
67
+ # ディレクトリが指定されていた場合、指定ディレクトリ内のIMG_ファイルの最新n個を対象とする
68
+ # 最新の基準は(ファイル名基準)
69
+ match_files = Dir.glob("#{dir}/*.{jpg,jpeg,png}", File::FNM_CASEFOLD).sort
70
+ # match_files.sort {|a, b|
71
+ # File.mtime(a) <=> File.mtime(b)
72
+ # }
73
+ # 後ろからn個を取得(小さい方の数とする)
74
+ count = [match_files.size, concat_number].min
75
+ image_files = match_files[-count..-1]
76
+ else
77
+ # それ以外は指定された引き数を全て対象とする
78
+ argv.each do |arg|
79
+ arg = File.expand_path(arg)
80
+ dir = File.dirname(arg)
81
+ if FileTest.file?(arg) && (arg =~ /\.jpe?g$/i || arg =~ /\.png/i)
82
+ image_files << arg
83
+ end
84
+ end
85
+ end
86
+ return dir, image_files
87
+ end
88
+
89
+ def initialize(opts)
90
+ @opts = opts
91
+ end
92
+
93
+
94
+ def run(dir, image_files)
95
+ outdir = dir
96
+ if @opts[:o]
97
+ outdir = @opts[:o]
98
+ end
99
+ rename_images(image_files, outdir)
100
+ # concat_images(image_files, output_path)
101
+ end
102
+
103
+ private
104
+ def rename_images(image_files, outdir)
105
+ # サムネイルはhoge_0.jpg
106
+ # アイキャッチはhoge_1.jpg hoge_2.jpg以降が通常の画像
107
+ items = []
108
+ thumbnal_item = nil # hoge_0.jpgとする
109
+ image_files.each_with_index do |image_file, index|
110
+ item = ImageItem.new
111
+ item.srcfile = image_file
112
+
113
+ src_basename = File.basename(image_file)
114
+ extname = File.extname(src_basename)
115
+ dst_basename = @opts[:b]
116
+
117
+ item.dstfile = File.join(outdir, "#{dst_basename}_#{index + 1}#{extname}")
118
+ if index == 0
119
+ thumbnal_item = ImageItem.new
120
+ thumbnal_item.srcfile = image_file
121
+ thumbnal_item.dstfile = File.join(outdir, "#{dst_basename}_0#{extname}")
122
+ end
123
+ items << item
124
+ end
125
+ items.each do |item|
126
+ FileUtils.cp(item.srcfile, item.dstfile)
127
+ end
128
+ FileUtils.cp(thumbnal_item.srcfile, thumbnal_item.dstfile)
129
+
130
+ #フィルタ実行
131
+ config = Config.new
132
+ config.init_default
133
+ opts = {}
134
+ filter = Imagefilter.new(opts, config)
135
+ items.each do |item|
136
+ item.outfile = filter.run(item.dstfile)
137
+ end
138
+
139
+
140
+ # サムネイル
141
+ config.resize_width = 400
142
+ filter = Imagefilter.new(opts, config)
143
+ thumbnal_item.outfile = filter.run(thumbnal_item.dstfile)
144
+
145
+ end
146
+ end
147
+ end
148
+
@@ -26,7 +26,7 @@ module Imagetools
26
26
  opt.on('-v', '--verbose', 'Verbose message') {|v| opts[:v] = v}
27
27
  opt.on('--dry-run', 'Message only') {|v| opts[:dry_run] = v}
28
28
  opt.on('-o OUTNAME', '--output=OUTNAME', 'Output file') {|v| opts[:o] = v}
29
- opt.on('-n NUM', '--number=NUM', 'Cancat image Number') {|v| opts[:n] = v.to_i}
29
+ opt.on('-n NUM', '--number=NUM', 'Concat image number') {|v| opts[:n] = v.to_i}
30
30
  opt.parse!(argv)
31
31
  image_files = get_image_files(opts, argv)
32
32
  if image_files.size < 2
@@ -89,14 +89,22 @@ module Imagetools
89
89
  def concat_images(image_files, output_file)
90
90
  puts image_files.join("+") + "=#{output_file}"
91
91
 
92
+ # 結果の画像リスト
92
93
  result_image_list = Magick::ImageList.new
94
+
93
95
  image_files.each do |image_file|
94
- #background_colorとflatten_imagesを組み合わせて背景色を指定
95
- image_list = Magick::ImageList.new(image_file) {self.background_color = 'white'}
96
+ # 個別画像の背景色を白に変換
97
+ # 一気に行く方法がないので、ImageListを作成しbackground_colorとflatten_imagesを組み合わる。
98
+ # image_list = Magick::ImageList.new(image_file) {self.background_color = 'white'}
99
+ # 2022/03/24「passing a block without an image argument is deprecate」対策。 https://github.com/rmagick/rmagick/blob/main/CHANGELOG.md RMagick 4.2.0
100
+ image_list = Magick::ImageList.new(image_file) {|image| image.background_color = 'white'}
96
101
  image = image_list.flatten_images
102
+
103
+ # 結果の画像リストに追加
97
104
  result_image_list << image
98
105
  end
99
-
106
+
107
+ #append(false)で横方向に結合
100
108
  result = result_image_list.append(false)
101
109
 
102
110
  width = result.columns
@@ -9,20 +9,45 @@ module Imagetools
9
9
  class Config
10
10
  FILENAME_SEARCH = 's (\d+)-(\d+)-(\d+) (\d+)\.(\d+)\.(\d+)'
11
11
  FILENAME_REPLACE = 's_\1\2\3_\4\5\6'
12
+ RESIZE_WIDTH = 1280
13
+
14
+ def self.create_from_yaml(yaml)
15
+ config = Config.new
16
+ config.filename_search1 = config_value(yaml, "filename", "search1", false)
17
+ config.filename_replace1 = config_value(yaml, "filename", "replace1", false)
18
+ config.filename_search2 = config_value(yaml, "filename", "search2", false)
19
+ config.filename_replace2 = config_value(yaml, "filename", "replace2", false)
20
+ config.filename_search3 = config_value(yaml, "filename", "search3", false)
21
+ config.filename_replace3 = config_value(yaml, "filename", "replace3", false)
22
+ config.resize_width = config_value(yaml, "resize", "width", false)
23
+ config.init_default
24
+ config
25
+ end
26
+
27
+
28
+ def self.config_value(yaml, section, key, require)
29
+ return nil unless yaml
30
+ return nil unless yaml[section]
31
+ value = yaml[section][key]
32
+ if require && (value.nil? || value.empty?)
33
+ raise RuntimeError, "#{section}:#{key}: is empty"
34
+ end
35
+ value
36
+ end
12
37
 
13
- def initialize(yaml)
14
- @yaml = yaml
15
- @filename_search1 = config_value("filename", "search1", false) || FILENAME_SEARCH
16
- @filename_replace1 = config_value("filename", "replace1", false) || FILENAME_REPLACE
17
- @filename_search2 = config_value("filename", "search2", false)
18
- @filename_replace2 = config_value("filename", "replace2", false)
19
- @filename_search3 = config_value("filename", "search3", false)
20
- @filename_replace3 = config_value("filename", "replace3", false)
38
+ def initialize
21
39
  end
22
40
 
23
- attr_reader :filename_search1, :filename_replace1,
24
- :filename_search2, :filename_replace2,
25
- :filename_search3, :filename_replace3
41
+ def init_default
42
+ @filename_search1 ||= FILENAME_SEARCH
43
+ @filename_replace1 ||= FILENAME_REPLACE
44
+ @resize_width ||= RESIZE_WIDTH
45
+ end
46
+
47
+ attr_accessor :filename_search1, :filename_replace1,
48
+ :filename_search2, :filename_replace2,
49
+ :filename_search3, :filename_replace3
50
+ attr_accessor :resize_width
26
51
 
27
52
  def filename_patterns
28
53
  [
@@ -31,16 +56,6 @@ module Imagetools
31
56
  [@filename_search3, @filename_replace3],
32
57
  ]
33
58
  end
34
-
35
- private
36
- def config_value(section, key, require)
37
- return nil unless @yaml
38
- value = @yaml[section][key]
39
- if require && (value.nil? || value.empty?)
40
- raise RuntimeError, "#{section}:#{key}: is empty"
41
- end
42
- value
43
- end
44
59
  end
45
60
 
46
61
  class Imagefilter
@@ -49,8 +64,7 @@ module Imagetools
49
64
 
50
65
  CONVERT_CMD = "convert"
51
66
  DWEBP_CMD = "dwebp"
52
- # RESIZE_CMD = "mogrify -resize 1280x\\> "
53
- RESIZE_CMD = "mogrify -background white -resize 1280x\\> "
67
+ RESIZE_CMD = "mogrify -background white -resize %dx\\> "
54
68
  ROTATE_CMD = "exiftran -ai "
55
69
  COMPRESS_CMD = "jpegoptim --strip-all --max=90 "
56
70
  EXTERNAL_CMDS = [RESIZE_CMD, ROTATE_CMD, COMPRESS_CMD]
@@ -99,7 +113,7 @@ EOM
99
113
  if FileTest.file?(config_file)
100
114
  yaml = YAML.load_file(config_file)
101
115
  end
102
- config = Config.new(yaml)
116
+ config = Config.create_from_yaml(yaml)
103
117
  if opts[:t]
104
118
  ret = selftest
105
119
  exit(ret)
@@ -269,7 +283,8 @@ EOM
269
283
  return filepath
270
284
  end
271
285
  puts "resize: #{filepath}"
272
- cmd = "#{RESIZE_CMD} \"#{filepath}\""
286
+ resize_cmd = sprintf(RESIZE_CMD, @config.resize_width)
287
+ cmd = "#{resize_cmd} \"#{filepath}\""
273
288
  system(cmd)
274
289
  return filepath
275
290
  end
@@ -1,3 +1,3 @@
1
1
  module Imagetools
2
- VERSION = "1.4.0"
2
+ VERSION = "1.5.2"
3
3
  end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/test_imageblog.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ bundle exec ruby exe/imageblog "$@"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imagetools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - src
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-17 00:00:00.000000000 Z
11
+ date: 2022-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +72,7 @@ email:
72
72
  executables:
73
73
  - iconcreator
74
74
  - iconextractor
75
+ - imageblog
75
76
  - imageburst
76
77
  - imageconcat
77
78
  - imagefilter
@@ -86,6 +87,7 @@ files:
86
87
  - ".idea/inspectionProfiles/Project_Default.xml"
87
88
  - ".idea/misc.xml"
88
89
  - ".idea/modules.xml"
90
+ - ".idea/runConfigurations.xml"
89
91
  - ".idea/vcs.xml"
90
92
  - ".idea/workspace.xml"
91
93
  - ".ruby-version"
@@ -102,6 +104,7 @@ files:
102
104
  - build.sh
103
105
  - exe/iconcreator
104
106
  - exe/iconextractor
107
+ - exe/imageblog
105
108
  - exe/imageburst
106
109
  - exe/imageconcat
107
110
  - exe/imagefilter
@@ -113,6 +116,7 @@ files:
113
116
  - lib/imagetools.rb
114
117
  - lib/imagetools/iconcreator.rb
115
118
  - lib/imagetools/iconextractor.rb
119
+ - lib/imagetools/imageblog.rb
116
120
  - lib/imagetools/imageburst.rb
117
121
  - lib/imagetools/imageconcat.rb
118
122
  - lib/imagetools/imagefilter.rb
@@ -142,12 +146,19 @@ files:
142
146
  - sample/demo/demo/Base.lproj/Main.storyboard
143
147
  - sample/demo/demo/Info.plist
144
148
  - sample/demo/demo/ViewController.swift
149
+ - sample/hugo_dst/1200x400.png
150
+ - sample/hugo_dst/1200x800.png
151
+ - sample/hugo_dst/600x200.png
152
+ - sample/hugo_src/0000.png
153
+ - sample/hugo_src/0001.png
154
+ - sample/hugo_src/0002.png
145
155
  - sample/icon.png
146
156
  - sample/icon.sketch
147
157
  - sample_iconcreator.sh
148
158
  - test.sh
149
159
  - test_iconcreator.sh
150
160
  - test_iconextractor.sh
161
+ - test_imageblog.sh
151
162
  - test_imageburst.sh
152
163
  - test_imageconcat.sh
153
164
  - test_imagefilter.sh
@@ -156,7 +167,7 @@ homepage: ''
156
167
  licenses:
157
168
  - MIT
158
169
  metadata: {}
159
- post_install_message:
170
+ post_install_message:
160
171
  rdoc_options: []
161
172
  require_paths:
162
173
  - lib
@@ -171,8 +182,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
182
  - !ruby/object:Gem::Version
172
183
  version: '0'
173
184
  requirements: []
174
- rubygems_version: 3.1.6
175
- signing_key:
185
+ rubygems_version: 3.2.22
186
+ signing_key:
176
187
  specification_version: 4
177
188
  summary: Image Tools.
178
189
  test_files: []