images-convert 0.4.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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +25 -0
  5. data/.github/workflows/ci.yml +79 -0
  6. data/.github/workflows/release.yml +122 -0
  7. data/.gitignore +14 -0
  8. data/CHANGELOG.md +146 -0
  9. data/Gemfile +9 -0
  10. data/LICENSE +41 -0
  11. data/README.md +378 -0
  12. data/RELEASE_NOTES_v0.2.12.md +66 -0
  13. data/RELEASE_NOTES_v0.2.3.md +19 -0
  14. data/RELEASE_NOTES_v0.3.0.md +66 -0
  15. data/RELEASE_NOTES_v0.4.0.md +14 -0
  16. data/RELEASE_NOTES_v0.4.1.md +13 -0
  17. data/Rakefile +13 -0
  18. data/bin/images-convert +8 -0
  19. data/bin/imgconv +8 -0
  20. data/images-convert.gemspec +39 -0
  21. data/lib/images_convert/cleanup.rb +31 -0
  22. data/lib/images_convert/configuration.rb +303 -0
  23. data/lib/images_convert/mini_magick_stub.rb +121 -0
  24. data/lib/images_convert/version.rb +5 -0
  25. data/lib/images_convert/waifu2x_test_stub.rb +93 -0
  26. data/lib/images_convert.rb +1557 -0
  27. data/lib/rubygems_plugin.rb +34 -0
  28. data/lib/waifu2x/downloader.rb +89 -0
  29. data/lib/waifu2x/pdf_builder.rb +105 -0
  30. data/lib/waifu2x/processor.rb +301 -0
  31. data/lib/waifu2x/setup.rb +127 -0
  32. data/lib/waifu2x/version.rb +5 -0
  33. data/lib/waifu2x.rb +221 -0
  34. data/test/images/autumn.jpg +0 -0
  35. data/test/images/spring.jpg +0 -0
  36. data/test/images/summer.jpg +0 -0
  37. data/test/images/winter.jpg +0 -0
  38. data/test/support/waifu2x_test_stub.rb +91 -0
  39. data/test/test_config.rb +143 -0
  40. data/test/test_fixtures.rb +144 -0
  41. data/test/test_formats.rb +213 -0
  42. data/test/test_help.rb +33 -0
  43. data/test/test_helper.rb +17 -0
  44. data/test/test_helper_mini_magick_stub.rb +4 -0
  45. data/test/test_selection.rb +142 -0
  46. data/test/test_version.rb +16 -0
  47. data/test/test_waifu2x.rb +81 -0
  48. metadata +179 -0
data/README.md ADDED
@@ -0,0 +1,378 @@
1
+ # ImageMagickで簡単画像変換
2
+
3
+ [![RubyGems Version](https://img.shields.io/gem/v/images-convert.svg)](https://rubygems.org/gems/images-convert)
4
+ [![RubyGems Downloads](https://img.shields.io/gem/dt/images-convert.svg)](https://rubygems.org/gems/images-convert)
5
+ [![CI](https://github.com/Atelier-Mirai/images-convert/actions/workflows/ci.yml/badge.svg)](https://github.com/Atelier-Mirai/images-convert/actions/workflows/ci.yml)
6
+
7
+ ImageMagickを使った画像形式変換のためのRuby gem。Thorで構築され、単一ファイル変換、ディレクトリ一括変換、設定値の保存機能、waifu2xによる高解像度アップスケールを備えたCLIツールです。HEIC、JPG、PNG、WebPなど様々な画像形式間の変換をサポートします。
8
+
9
+ ## インストール
10
+
11
+ **インストールは超簡単! ターミナルから次のコマンドを実行するだけ**
12
+ ```bash
13
+ gem install images-convert
14
+ ```
15
+
16
+ **🎉 インストール完了!** すぐに使い始めてみましょう!
17
+ ```bash
18
+ # 単一ファイル変換
19
+ # HEIC→JPGへの変換が既定値です。画像幅は1920xにリサイズされます。
20
+ # 例: ~/Downloads/IMG_2000.HEIC を ~/Desktop/IMG_2000.jpg に変換
21
+ images-convert IMG_2000.HEIC ~/Downloads ~/Desktop
22
+
23
+ # 入力ディレクトリは ~/Downloads、出力ディレクトリは ~/Desktop が既定値です。
24
+ # また、画像ファイル名がIMG_で始まる場合は、以下のように省略できます。
25
+ images-convert 2000
26
+
27
+ # 短縮コマンド(エイリアス)を用いて、同じ操作を実行できます。
28
+ imgconv 2000
29
+
30
+ # 「最新N件をまとめて変換」ショートカット
31
+ images-convert -5 # 最新の5件を既定値で変換
32
+ images-convert -0 # すべての対象ファイルを既定値で変換
33
+ images-convert --all # すべての対象ファイルを既定値で変換
34
+ ```
35
+
36
+ ## 基本的な使い方
37
+
38
+ ### HEICをJPGに変換する
39
+ 入力ディレクトリは `~/Downloads`、出力ディレクトリは `~/Desktop` が既定値です。
40
+ また、画像ファイル名が `IMG_` で始まる場合は、`IMG_2000.HEIC` に代えて、`2000` と省略できます。
41
+
42
+ ```bash
43
+ images-convert 2000
44
+ # または
45
+ imgconv 2000
46
+ ```
47
+
48
+ ### 最新N件/全件を変換する
49
+ 既定の入出力ディレクトリ、変換形式、リサイズ幅を用いて、最新N件または全件を変換します。
50
+ 判定基準の既定値は、`mtime`(ファイル更新日時)です。`exif`(EXIF 撮影日時)を基準に最新N件を選定する場合は、`--latest-exif` オプションを指定します。
51
+
52
+ ```bash
53
+ images-convert -5 # 最新5件を既定値で変換
54
+ images-convert -5 --latest-exif # EXIF 撮影日時で最新5件を変換
55
+ images-convert -0 # すべての対象ファイルを既定値で変換
56
+ images-convert --all # --all でも同じ
57
+ ```
58
+
59
+ ### 最新件数の判定基準を切り替える
60
+
61
+ `-N` を利用した際の「最新順」の基準は、`mtime`(ファイル更新日時)が既定値ですが、 `exif`(EXIF 撮影日時)を既定値に設定することもできます。
62
+
63
+ ```bash
64
+ images-convert set-latest-mode exif # 以後は EXIF を基準に最新N件を選定する
65
+ images-convert set-latest-mode mtime # ファイル更新日時を既定値に戻す
66
+ ```
67
+
68
+ ### 直接入出力ディレクトリやリサイズ幅を指定する
69
+ 以下のように書くことで、任意の入出力ディレクトリや変換形式、リサイズ幅を指定できます。`~/Pictures/flower.jpg` は入力ファイル、`~/Desktop/flower.webp` は出力ファイル、`1024x` はリサイズ幅を表します。
70
+
71
+ ```bash
72
+ images-convert ~/Pictures/flower.jpg ~/Desktop/flower.webp 1024x
73
+ ```
74
+
75
+ ディレクトリ名を省略した場合には、既定値の入出力ディレクトリが用いられます。
76
+ 横幅を1024xにリサイズして、flower.jpgをflower.webpに変換します。
77
+
78
+ ```bash
79
+ images-convert flower.jpg flower.webp 1024x
80
+ ```
81
+
82
+ 高さをx1024にリサイズして、flower.jpgをflower.webpに変換します。
83
+
84
+ ```bash
85
+ images-convert flower.jpg flower.webp x1024
86
+ ```
87
+
88
+ 横幅を50%にリサイズして、flower.jpgをflower.webpに変換します。
89
+
90
+ ```bash
91
+ images-convert flower.jpg flower.webp 50%
92
+ ```
93
+
94
+ ### 変換形式やリサイズ幅、入出力ディレクトリを変更する
95
+
96
+ 既定値を、ご自身が良く用いる変換形式やリサイズ幅に変更できます。
97
+
98
+ ```bash
99
+ # 例: JPG→WebP、リサイズ幅1024x
100
+ images-convert set JPG WebP 1024x
101
+ # 例: JPG→WebP、リサイズ幅50% (拡張子は大文字小文字を区別しません。またjpg/jpegを同一視します。)
102
+ images-convert set jpeg webp 50%
103
+ ```
104
+
105
+ 以後はファイル名(または番号)だけで変換できます。
106
+
107
+ ```bash
108
+ # 例: ~/Downloads/flower.jpg を ~/Desktop/flower.webp に変換
109
+ images-convert flower
110
+ # 例: ~/Downloads/IMG_2000.jpg を ~/Desktop/IMG_2000.webp に変換
111
+ images-convert 2000
112
+ ```
113
+
114
+ 入力/出力ディレクトリを設定することも可能です。
115
+ 入力元 `~/Documentsフォルダ`、出力先 `~/Documents/converted`フォルダにする例です。
116
+
117
+ ```bash
118
+ images-convert set-dir ~/Documents ~/Documents/converted
119
+ ```
120
+
121
+ ### waifu2x による高解像度化(AI アップスケール)
122
+
123
+ `--resize` などで指定したサイズが現在の画像より大きくなる場合、自動的に waifu2x (waifu2x-ncnn-vulkan) を利用した高解像度化に切り替わります。waifu2x 実行ファイルやモデルは、必要に応じて自動ダウンロードされます。
124
+
125
+ ```bash
126
+ # 例: 元画像が幅500pxの場合は 4 倍に拡大
127
+ images-convert input.png --resize 2000x --output output.png
128
+ ```
129
+
130
+ 出力形式が `png`/`jpg`/`jpeg`/`webp` のいずれかであれば、自動アップスケールが適用されます。それ以外の形式やアップスケール不要な場合は、従来どおり MiniMagick による通常変換が行われます。
131
+
132
+ > **補足**: たとえば元画像が 300px なら waifu2x が 4 倍、700px なら 2 倍に拡大し、最後は MiniMagick が `--resize` で指定した 2000px へ仕上げます。常に最終出力は `--resize` の指示どおりになります。
133
+
134
+ #### waifu2x の既定値を設定する
135
+
136
+ ```bash
137
+ # 例: 既定倍率4倍、ノイズ除去レベル3、モデル anime を設定
138
+ images-convert config set-waifu2x --scale 4 --noise 3 --model anime
139
+
140
+ # 例: A4向け自動スケールを無効化し、出力フォーマットを jpg に固定
141
+ images-convert config set-waifu2x --no-auto-scale-a4 --image_format jpg
142
+ ```
143
+
144
+ 利用可能な主なオプション(`config set-waifu2x`):
145
+
146
+ - `--scale NUM` … 既定の拡大率 (1〜4, 3は4と同等)
147
+ - `--noise NUM` … ノイズ除去レベル (0〜4)
148
+ - `--model NAME` … モデルエイリアス(例: `anime`, `photo`, `anime_style_art_rgb` など)
149
+ - `--[no-]auto-scale-a4` … A4 用紙に合わせた自動スケール調整を利用するか
150
+ - `--[no-]a4-print` … PDF 生成時に A4 レイアウトを適用するか
151
+ - `--image_format FORMAT` … waifu2x の出力画像フォーマット
152
+ - `--on_error ACTION` … エラー発生時の挙動 (`stop` または `skip`)
153
+ - `--quality NUM` … waifu2x 出力品質 (1〜100, 未指定時は既定値)
154
+
155
+ 設定後は `images-convert config` で現在の waifu2x 既定値を確認できます。
156
+
157
+ #### PDF を生成する
158
+
159
+ 複数ページの PDF を出力したい場合は、`--output-mode` に `pdf` または `both` を指定します。拡大・縮小のいずれの場合でも利用でき、`both` を指定すると画像出力と PDF を同時に取得できます。
160
+
161
+ ```bash
162
+ # 例: ディレクトリ内の画像を拡大(または縮小)して PDF 化
163
+ images-convert convert /path/to/images --output-mode pdf --waifu2x-model anime --pdf-quality 90 --pdf-density 300
164
+
165
+ # 例: 拡大(または縮小)した画像と PDF を両方出力
166
+ images-convert convert /path/to/images --output-mode both --waifu2x-image-format webp
167
+ ```
168
+
169
+ PDF 関連オプション:
170
+
171
+ - `--pdf-compression {jpeg|jpeg2000|zip}` … PDF に埋め込む画像の圧縮方式
172
+ - `--pdf-quality NUM` … 圧縮品質 (0〜100)
173
+ - `--pdf-density NUM` … ページ解像度 (DPI)
174
+ - `--waifu2x-a4-print/--no-waifu2x-a4-print` … A4 レイアウト (余白・中央寄せ) の有無
175
+
176
+ PDF 出力先は、指定がなければ入力ディレクトリに `ディレクトリ名.pdf` として作成されます。`--output` や `--output-dir` と組み合わせて保存先を調整できます。
177
+
178
+ ### 最新件数の判定基準を切り替える
179
+
180
+ `--latest` を利用した際の「最新順」の基準を `mtime`(ファイル更新日時)と `exif`(EXIF 撮影日時)から選べます。
181
+
182
+ ```bash
183
+ images-convert set-latest-mode exif # 以後は EXIF を基準に最新N件を選定
184
+ images-convert set-latest-mode mtime # 既定値(ファイル更新日時)に戻す
185
+ ```
186
+
187
+ ### ディレクトリからディレクトリへ一括変換する
188
+ 入力ディレクトリ内にある画像ファイルを纏めて、出力ディレクトリに変換することができます。
189
+
190
+ 例: `~/Pictures/HEIC` ディレクトリ内の `HEIC`ファイルを、`~/Desktop/converted` ディレクトリに `JPG(既定値)` + `リサイズ幅1920x(既定値)`で一括変換する
191
+
192
+ ```bash
193
+ images-convert ~/Pictures/HEIC ~/Desktop/converted
194
+ ```
195
+
196
+ 事前に出力形式やサイズを変更しておけば、その設定が適用されます
197
+
198
+ ```bash
199
+ images-convert set HEIC WebP 1024x
200
+ # 以降は、HEIC->WebP、1024xで一括変換されます。
201
+ images-convert convert ~/Pictures/HEIC ~/Desktop/converted
202
+ ```
203
+
204
+ ### 引数
205
+
206
+ `images-convert ファイル名または番号`
207
+ または
208
+ `images-convert 入力ディレクトリ 出力ディレクトリ`
209
+ - ファイル名または番号のみ指定すれば、設定された形式・サイズで変換します
210
+ - ディレクトリ指定時は、入力ディレクトリ内の対象拡張子を一括で変換し、出力ディレクトリに保存します
211
+ - 対応形式: HEIC, JPG, PNG, GIF, WebP, TIFF, BMP, ICO, PDFなど、ImageMagickでサポートする形式
212
+ - 形式名は大文字・小文字を区別しません(例: HEIC/heic/JPG/jpg いずれも可)
213
+ - jpeg 指定時は出力拡張子を jpg に統一します(入力は .jpg / .jpeg の両方を自動検出)
214
+
215
+ 入力ディレクトリに変換後のファイルを書き出す場合には、出力ディレクトリの指定を省略できます。
216
+ `images-convert 入力ディレクトリ兼出力ディレクトリ`
217
+
218
+ ### オプション
219
+ - `-h, --help`: ヘルプメッセージを表示
220
+ - `-v, --version`: バージョン情報を表示
221
+
222
+ - `-d, --delete`: 変換後に元のファイルを削除
223
+ - `-i, --input_dir`: 入力ディレクトリを指定
224
+ - `-o, --output_dir`: 出力ディレクトリを指定
225
+ - `-f, --overwrite`: 既存の出力ファイルがある場合に上書き(デフォルトはスキップ)
226
+ - `-s, --suffix VALUE`: 出力ファイル名にサフィックスを付与(例: `_resized`)
227
+ - `--recursive`: ディレクトリを再帰的に処理
228
+ - `--latest N`: 入力ディレクトリ内(既定は設定の input_dir)から更新日時の新しい順に N 件を変換
229
+ - `-N`: 入力ディレクトリ内(既定は設定の input_dir)から更新日時の新しい順に N 件を変換(ショートカット)
230
+ - `--all` または `-0`: 入力ディレクトリ内の対象ファイルをすべて変換
231
+ - `--quality NUM`: JPEG / WebP などの出力品質 (1〜100)。未指定時は設定ファイルの既定値を使用
232
+
233
+ ディレクトリ一括変換で `入力ディレクトリ` のみ指定した場合についての補足説明:
234
+ - JPG から WebP への変換など、異なる形式の変換を行う場合は、出力先は入力先と同じディレクトリになります。
235
+ (例: 同じディレクトリに flower.jpg -> flower.webp が生成されます。)
236
+ - JPG から JPG への変換など、同一形式の変換を行う場合(リサイズのみを行う場合)は、出力先は入力先と同じディレクトリですが、安全の為、デフォルトでは上書きしません。`--overwrite` を明示することにより、上書きを許可できます。(flower.jpg -> flower.jpg)。または `--suffix _resized` を使用して、flower.jpg -> flower_resized.jpg のように出力ファイル名を変更できます。
237
+
238
+ ### 既定値(デフォルト設定)
239
+
240
+ 初回実行時に自動作成される設定ファイル(`~/.images-convert/config.yml`)の既定値は以下の通りです。
241
+
242
+ - 入力形式(from): HEIC
243
+ - 出力形式(to): JPG
244
+ - リサイズ(resize): 1920x
245
+ - 入力ディレクトリ: `~/Downloads`
246
+ - 出力ディレクトリ: `~/Desktop`
247
+
248
+ ### 設定のカスタマイズ
249
+
250
+ **使いやすいように、自分好みの設定にカスタマイズしましょう!**
251
+
252
+ ```bash
253
+ # 現在の設定を表示(初回実行時は自動で設定ファイルが作成されます)
254
+ images-convert config
255
+
256
+ # デフォルト値を変更(例: JPG→WebP、サイズ1024x)
257
+ images-convert config set JPG WebP 1024x
258
+
259
+ # 設定変更後は省略して使用可能
260
+ images-convert 2000 # JPG→WebP、1024xで変換、Documentsフォルダから出力
261
+
262
+ # 最新N件を指定のディレクトリで
263
+ images-convert -3 --input_dir ~/Pictures --output_dir ~/Desktop
264
+ # または次のように省略できます
265
+ images-convert -3 ~/Pictures ~/Desktop
266
+
267
+ # コマンドラインオプションで一時的に指定することもできます。
268
+ # 例: 入力ディレクトリを ~/Pictures、出力ディレクトリを ~/Desktop に指定する例
269
+ images-convert flower ~/Pictures ~/Desktop
270
+ images-convert 2000 ~/Pictures ~/Desktop
271
+ ```
272
+
273
+ **設定ファイルは自動で作成されます** `~/.images-convert/config.yml` に保存されます。
274
+ 既定値へ戻したい場合は `imgconv config reset` を実行してください(確認を省略する場合は `--force` を付与)。
275
+
276
+ ### アンインストール時のクリーンアップ
277
+
278
+ gemをアンインストールする際は、設定ファイルも自動で削除されます:
279
+
280
+ ```bash
281
+ images-convert cleanup
282
+ ```
283
+
284
+ これで `~/.images-convert/` ディレクトリ全体が削除されます。
285
+
286
+ ### 設定ファイルの例(既定値)
287
+
288
+ Gemインストール直後に作成される設定ファイルは次のようになっています。
289
+
290
+ ```yaml
291
+ # ~/.images-convert/config.yml
292
+ defaults:
293
+ from: HEIC # 入力形式
294
+ to: JPG # 出力形式
295
+ resize: 1920x # リサイズ値
296
+ directories:
297
+ input: ~/Downloads # 入力ディレクトリ
298
+ output: ~/Desktop # 出力ディレクトリ
299
+ selection:
300
+ latest_mode: mtime # 最新件数判定基準 (mtime/exif)
301
+ waifu2x:
302
+ scale: 2 # 拡大率 (1-4)
303
+ noise: 1 # ノイズ除去レベル (0-4)
304
+ model: photo # モデルエイリアス
305
+ auto_scale_a4: true # A4基準の自動スケール調整
306
+ a4_print: true # A4レイアウトPDF調整(デフォルトで有効)
307
+ image_format: webp # waifu2x出力フォーマット
308
+ on_error: stop # エラー時の挙動 (stop/skip)
309
+ output:
310
+ image_quality: 90 # 出力画像品質 (1-100)
311
+ pdf_quality: 90 # PDF埋め込み画像の品質 (1-100)
312
+ pdf_compression: jpeg # PDF埋め込み画像の圧縮方式 (jpeg/jpeg2000/zip)
313
+ pdf_density: 300 # PDF埋め込み画像のDPI
314
+ ```
315
+
316
+ ### 対話式セットアップを利用する
317
+
318
+ `imgconv setup` コマンドを実行すると、既定値を対話形式で更新できるウィザードが起動します。
319
+
320
+ ```bash
321
+ bin/imgconv setup
322
+ ```
323
+
324
+ - **現在値を保持したい場合は Enter** キーを押すだけで OK です。
325
+ - `y`/`n` の質問では、「現在値」と「既定値」が併記されるため、いま有効になっている設定を確認しながら変更できます。
326
+ - 形式名やモデル名など、候補が決まっている項目は、入力ミスがあれば再入力を求めます(例: 最新判定モードは `mtime` または `exif` のみ受け付け)。
327
+ - ウィザード終了時には、変更された項目が `旧値 => 新値` の形式で表示され、新しい値は端末上で緑色でハイライトされます。
328
+ - そのまま `imgconv config` が呼び出され、**最新の設定一式が即座に表示** されます。
329
+
330
+ ### ヘルプを表示する
331
+
332
+ ```bash
333
+ images-convert --help
334
+ # または
335
+ imgconv --help
336
+ ```
337
+
338
+ ### バージョン情報を表示する
339
+
340
+ ```bash
341
+ images-convert --version
342
+ # または
343
+ imgconv --version
344
+ ```
345
+
346
+ ## 要件
347
+
348
+ - Ruby 3.3+
349
+ - `images-convert` は Ruby 製の CLI ツールです。Ruby 3.3 以上がインストールされた環境でご利用ください。
350
+ - ImageMagick(未導入の場合は初回実行時に自動導入を案内します)
351
+ - 変換処理には ImageMagick を利用します。インストールされていない場合、初回実行時に対話形式で導入を案内します。
352
+ - waifu2x-ncnn-vulkan(AI アップスケール機能を使用する場合)
353
+ - waifu2x バイナリを環境に用意するか、または `config set-waifu2x` でパス/自動ダウンロードURLを指定してください。
354
+
355
+ ## 開発
356
+
357
+ 貢献するには:
358
+ 1. リポジトリを取得し、ローカル環境にクローンします。
359
+ 2. プロジェクトディレクトリへ移動し、依存関係をインストールしてください。
360
+
361
+ ```bash
362
+ git clone https://github.com/Atelier-Mirai/images-convert.git
363
+ cd images-convert
364
+ bundle install
365
+ ```
366
+
367
+ ## ライセンス
368
+
369
+ MIT License です。詳しくは [LICENSE](./LICENSE) ファイルをご確認ください。
370
+
371
+ ### テストで使用している画像の出典
372
+
373
+ - 桜と小鳥、メジロの夫婦: https://www.photo-ac.com/main/detail/28776655
374
+ - 青空とひまわり: https://www.photo-ac.com/main/detail/33232207
375
+ - 秋の満月: https://www.photo-ac.com/main/detail/27810146
376
+ - 雪だるま: https://www.photo-ac.com/main/detail/4880573
377
+
378
+ これらの写真をご提供くださった photoAC の作者の皆さまに深く感謝いたします。
@@ -0,0 +1,66 @@
1
+ # images-convert 0.2.12
2
+
3
+ リリース日: 2025-09-25
4
+
5
+ ## ハイライト
6
+ - EXIF 撮影日時を基準にした「最新 N 件」選定に対応(`--latest-exif`)。
7
+ - 既定の最新選定基準を設定できる `set-latest-mode` コマンドを追加(`mtime`/`exif`)。
8
+ - 設定ファイルに `selection.latest_mode` を追加し、設定の表示/保存/読み込みに対応。
9
+
10
+ ## 変更点詳細
11
+ - 機能追加
12
+ - `--latest-exif` フラグを追加(`--latest N` と併用)。
13
+ - EXIF の `DateTimeOriginal` / `CreateDate` / `DateTimeDigitized` / `DateTime` の順で解析し、並び替えに使用。
14
+ - EXIF が無い、または解析失敗時はファイル更新日時(mtime)へフォールバックし、実行時にその旨を通知。
15
+ - `images-convert config set-latest-mode MODE` を追加(`MODE`: `mtime` または `exif`)。
16
+ - 現在設定は `images-convert config` で確認可能。
17
+ - 設定ファイル
18
+ - `~/.images-convert/config.yml` に `selection.latest_mode` を追加。例:
19
+ ```yaml
20
+ selection:
21
+ latest_mode: mtime
22
+ ```
23
+ - CLI オプション/ヘルプ
24
+ - `convert` コマンドに `--latest-exif` を追加。
25
+ - 最新 N 件/全件の選定メッセージに基準(`mtime`/`exif`)を表示。
26
+ - ドキュメント
27
+ - `README.md` に `--latest-exif` と `set-latest-mode` の使い方を追記。
28
+ - テスト
29
+ - `CLILatestSelectionTest`: EXIF 順ソートと mtime フォールバックのテストを追加。
30
+ - `CLIConfigTest`: `set-latest-mode` の正常系/異常系テストを追加。
31
+
32
+ ## 破壊的変更
33
+ - 廃止: `--dry-run` オプションを削除しました。テスト用途は MiniMagick スタブにより実変換検証で代替します。
34
+ - 変更: 短縮コマンド名を `imgcvt` から `imgconv` に統一しました(エイリアス移行)。
35
+
36
+ ## アップグレード手順
37
+ 1. gem を更新:
38
+ ```bash
39
+ gem install images-convert
40
+ # もしくは
41
+ bundle update images-convert
42
+ ```
43
+ 2. 既定の最新判定基準を EXIF にしたい場合:
44
+ ```bash
45
+ images-convert config set-latest-mode exif
46
+ ```
47
+ 3. 破壊的変更への対応(必要な場合):
48
+ - `--dry-run` を使っていた箇所を削除
49
+ - `imgcvt` を使用しているスクリプトは `imgconv` に置換
50
+
51
+ ## 利用例
52
+ - EXIF を基準に最新 5 件を変換:
53
+ ```bash
54
+ images-convert --latest 5 --latest-exif
55
+ ```
56
+ - 既定の基準を EXIF に設定(以降は `--latest N` のみで EXIF 基準を使用):
57
+ ```bash
58
+ images-convert config set-latest-mode exif
59
+ ```
60
+ - 全件変換(従来どおり):
61
+ ```bash
62
+ images-convert --all
63
+ ```
64
+
65
+ ## 参考
66
+ - 変更の全体像は `CHANGELOG.md` の「未リリース」セクションを参照してください。
@@ -0,0 +1,19 @@
1
+ # images-convert 0.2.3
2
+
3
+ 以下は CHANGELOG.md の 0.2.3 抜粋です。
4
+
5
+ ## 0.2.3 - 2025-09-23
6
+ - 機能追加: 「最新の画像 N 件」または「全件」を既定値に従って一括変換できるオプションを追加
7
+ - `-N`(例: `-1`, `-5`)… 最新の N 件を変換(`convert --latest N` のショートカット)
8
+ - `-0` / `--all` … すべての対象ファイルを変換
9
+ - サブコマンド省略時でも `images-convert -5` のように実行可能(内部的に `convert` を補完)
10
+ - 入力/出力ディレクトリや from/to/resize は設定ファイルの既定値(`images-convert config`)を使用
11
+
12
+ ### 使用例
13
+ ```bash
14
+ images-convert -1 # 最新1件
15
+ images-convert -5 --delete # 最新5件、変換後に元ファイル削除
16
+ images-convert -0 --overwrite # 全件、上書き許可
17
+ images-convert convert --latest 3 # ロングオプション
18
+ images-convert convert --all
19
+ ```
@@ -0,0 +1,66 @@
1
+ # images-convert 0.3.0
2
+
3
+ リリース日: 2025-09-25
4
+
5
+ ## ハイライト
6
+ - EXIF 撮影日時を基準にした「最新 N 件」選定に対応(`--latest-exif`)。
7
+ - 既定の最新選定基準を設定できる `set-latest-mode` コマンドを追加(`mtime`/`exif`)。
8
+ - 設定ファイルに `selection.latest_mode` を追加し、設定の表示/保存/読み込みに対応。
9
+
10
+ ## 変更点詳細
11
+ - 機能追加
12
+ - `--latest-exif` フラグを追加(`--latest N` と併用)。
13
+ - EXIF の `DateTimeOriginal` / `CreateDate` / `DateTimeDigitized` / `DateTime` の順で解析し、並び替えに使用。
14
+ - EXIF が無い、または解析失敗時はファイル更新日時(mtime)へフォールバックし、実行時にその旨を通知。
15
+ - `images-convert config set-latest-mode MODE` を追加(`MODE`: `mtime` または `exif`)。
16
+ - 現在設定は `images-convert config` で確認可能。
17
+ - 設定ファイル
18
+ - `~/.images-convert/config.yml` に `selection.latest_mode` を追加。例:
19
+ ```yaml
20
+ selection:
21
+ latest_mode: mtime
22
+ ```
23
+ - CLI オプション/ヘルプ
24
+ - `convert` コマンドに `--latest-exif` を追加。
25
+ - 最新 N 件/全件の選定メッセージに基準(`mtime`/`exif`)を表示。
26
+ - ドキュメント
27
+ - `README.md` に `--latest-exif` と `set-latest-mode` の使い方を追記。
28
+ - テスト
29
+ - `CLILatestSelectionTest`: EXIF 順ソートと mtime フォールバックのテストを追加。
30
+ - `CLIConfigTest`: `set-latest-mode` の正常系/異常系テストを追加。
31
+
32
+ ## 破壊的変更
33
+ - 廃止: `--dry-run` オプションを削除しました。テスト用途は MiniMagick スタブにより実変換検証で代替します。
34
+ - 変更: 短縮コマンド名を `imgcvt` から `imgconv` に統一しました(エイリアス移行)。
35
+
36
+ ## アップグレード手順
37
+ 1. gem を更新:
38
+ ```bash
39
+ gem install images-convert
40
+ # もしくは
41
+ bundle update images-convert
42
+ ```
43
+ 2. 既定の最新判定基準を EXIF にしたい場合:
44
+ ```bash
45
+ images-convert config set-latest-mode exif
46
+ ```
47
+ 3. 破壊的変更への対応(必要な場合):
48
+ - `--dry-run` を使っていた箇所を削除
49
+ - `imgcvt` を使用しているスクリプトは `imgconv` に置換
50
+
51
+ ## 利用例
52
+ - EXIF を基準に最新 5 件を変換:
53
+ ```bash
54
+ images-convert --latest 5 --latest-exif
55
+ ```
56
+ - 既定の基準を EXIF に設定(以降は `--latest N` のみで EXIF 基準を使用):
57
+ ```bash
58
+ images-convert config set-latest-mode exif
59
+ ```
60
+ - 全件変換(従来どおり):
61
+ ```bash
62
+ images-convert --all
63
+ ```
64
+
65
+ ## 参考
66
+ - 変更の全体像は `CHANGELOG.md` の「0.3.0」セクションを参照してください。
@@ -0,0 +1,14 @@
1
+ # リリースノート v0.4.0 (2025-09-26)
2
+
3
+ ## ハイライト
4
+ - `imgconv setup` の**対話式セットアップウィザード**を新設しました。質問形式で現在値と既定値を確認しながら設定でき、入力内容を検証して誤りを防ぎます。完了時には変更点を色付きで比較表示し、そのまま `imgconv config` を実行して最新設定を即確認できます。
5
+ - **waifu2x 連携**を追加しました。リサイズ指定が元画像を上回る場合、自動的に waifu2x (waifu2x-ncnn-vulkan) に委譲して高解像度化します。`config set-waifu2x` で倍率・ノイズ除去・モデル・エラー時動作などを細かく調整でき、バイナリ/モデルパスや PDF 出力モードの上書きにも対応します。
6
+
7
+ ## 改善
8
+ - `lib/images_convert/mini_magick_stub.rb` を拡張し、寸法取得や `Image.ping` のスタブを実装しました。ImageMagick が無い環境でもテストを強化できます。
9
+
10
+ ## テストと品質
11
+ - `lib/images_convert/waifu2x_test_stub.rb` と `test/test_waifu2x.rb` を追加し、waifu2x パイプライン全体をテスト可能にしました。本番コードとスタブの両方で安定した動作を担保します。
12
+
13
+ ## アップグレード手順
14
+ - アップグレード後は `bin/imgconv setup` を実行し、ウィザードで既定値を見直してください。終了時に自動で表示される `imgconv config` で設定内容を確認できます。
@@ -0,0 +1,13 @@
1
+ # リリースノート v0.4.1 (2025-09-26)
2
+
3
+ ## ハイライト
4
+ - `imgconv config reset` サブコマンドを追加しました。確認プロンプト付きで設定を既定値に戻せるようになり、`--force` オプションで確認をスキップできます。
5
+
6
+ ## 変更点
7
+ - CLI `config` コマンドに `reset` サブコマンドを実装し、復元後は `show_all_settings` の結果を即座に表示して現在の構成を把握しやすくしました。
8
+ - `ImagesConvert::Configuration.reset_to_defaults` を新設し、設定ファイルの再生成・キャッシュクリアを一括で行えるようにしました。
9
+ - `README.md` と `CHANGELOG.md` にリセット手順とリリース情報を追記しました。
10
+ - `test/test_config.rb` に `config reset` の回帰テストを追加し、既存の設定関連テスト一式がグリーンになることを確認しました。
11
+
12
+ ## テスト
13
+ - `bundle exec rake test`
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.pattern = 'test/**/*.rb'
9
+ t.verbose = true
10
+ end
11
+
12
+ # Default task
13
+ task default: :test
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/images_convert'
5
+
6
+ # 数値短縮フラグ(-1, -5, -0)を正式オプションへ変換し、サブコマンド省略時に convert を補う
7
+ preprocess_argv!(ARGV)
8
+ ImagesConvertCLI.start(ARGV)
data/bin/imgconv ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/images_convert'
5
+
6
+ # 数値短縮フラグ(-1, -5, -0)を正式オプションへ変換し、サブコマンド省略時に convert を補う
7
+ preprocess_argv!(ARGV)
8
+ ImagesConvertCLI.start(ARGV)
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ # バージョンは単一情報源として lib/images_convert/version.rb から取得
5
+ version_file = File.expand_path('lib/images_convert/version.rb', __dir__)
6
+ version_source = File.read(version_file)
7
+ version = version_source[/VERSION\s*=\s*"([^"]+)"/, 1] || version_source[/VERSION\s*=\s*'([^']+)'/, 1]
8
+
9
+ Gem::Specification.new do |s|
10
+ s.name = "images-convert"
11
+ s.version = version
12
+ s.authors = ["Atelier Mirai"]
13
+ s.email = ["contact@atelier-mirai.net"]
14
+ s.homepage = "https://github.com/Atelier-Mirai/images-convert"
15
+ s.summary = "A CLI tool for converting image formats using ImageMagick and waifu2x"
16
+ s.description = "A powerful CLI tool for converting image formats using ImageMagick, with optional waifu2x upscaling when enlarging images. Supports single file conversion, bulk directory conversion, and persistent configuration settings. Convert between various formats (HEIC, JPG, PNG, WebP, etc.)."
17
+ s.license = "MIT"
18
+
19
+ s.metadata = {
20
+ "homepage_uri" => "https://github.com/Atelier-Mirai/images-convert#readme",
21
+ "source_code_uri" => "https://github.com/Atelier-Mirai/images-convert",
22
+ "changelog_uri" => "https://github.com/Atelier-Mirai/images-convert/blob/master/CHANGELOG.md",
23
+ "documentation_uri" => "https://github.com/Atelier-Mirai/images-convert#readme"
24
+ }
25
+
26
+ s.files = `git ls-files`.split("\n")
27
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ # 公開する実行ファイルは新名称のみ(後方互換は無し)
29
+ s.executables = ['images-convert', 'imgconv']
30
+ s.require_paths = ["lib"]
31
+
32
+ s.add_dependency "thor", "~> 1.0"
33
+ s.add_dependency "mini_magick", "~> 4.12"
34
+ s.add_dependency "parallel", "~> 1.22"
35
+ s.add_dependency "rmagick"
36
+ s.add_dependency "combine_pdf", "~> 1.0"
37
+
38
+ s.required_ruby_version = ">= 3.3.0"
39
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
5
+ module ImagesConvert
6
+ class Cleanup
7
+ CONFIG_DIR = File.expand_path('~/.images-convert')
8
+
9
+ def self.run
10
+ if Dir.exist?(CONFIG_DIR)
11
+ puts "設定ファイルとディレクトリを削除しますか? [Y/n]"
12
+ print "> "
13
+ answer = (STDIN.gets || "").strip
14
+ answer = 'y' if answer.empty?
15
+
16
+ if answer.downcase.start_with?('y')
17
+ begin
18
+ FileUtils.rm_rf(CONFIG_DIR)
19
+ puts "設定ファイルとディレクトリを削除しました: #{CONFIG_DIR}"
20
+ rescue => e
21
+ puts "削除中にエラーが発生しました: #{e.message}"
22
+ end
23
+ else
24
+ puts "削除をキャンセルしました。設定ファイルは残ります。"
25
+ end
26
+ else
27
+ puts "設定ディレクトリが見つかりません: #{CONFIG_DIR}"
28
+ end
29
+ end
30
+ end
31
+ end