/*
 * govern IrfanView thru i_view32.ini
 *   by uratan! 2019.5.22
 *     revised: 2023.12.07
 */

目次
    はじめに
    i_view32.exe の憂鬱
    i_view32.ini の基礎知識
    i_view32.ini の管理の実際
    i_view32.ini のキーから設定画面をたどりたい
    最後に
おまけ
    おまけ: 輝度・コントラスト調整について
    おまけ2: Effect: Blur / Sharpen について
    おまけ3: ガンマ補正とカラーバランス調整について
    おまけ4: Saturation 補正について
    おまけ の おまけ: 画像のパラパラ比較について
    おまけ の おまけ2: JPEG quality の確認について
    おまけ5: Edge Detection について


はじめに

IrfanView というとても良く出来た画像ビューアーソフトがあります。

画像ファイルを扱うのに「もうこれ以外いらないのでは?」 と思わせる多機能なビューアーで、 昔 X Window System 上で さんざんお世話になった xv をホウフツとさせ、 私のお気に入りツールの一つとして あちこちの環境で使っています。

あちこちで使っていると 「あれっ? これって あっちの IrfanView と動きが違う??」 てなことも時折あったのですが、 (私の中での扱いがビューアー = Read Only だったこともあり) 長らく見て見ぬ振りをしてきました。
しかしながら、IrfanView は画像加工ツールとしてもすごいのです。 親しんでいくうちに加工ツールとして使う場面も増え、 この環境(設定)の差でドツボにはまるケースも出てくるようになりまして、 今回ようやっと IrfanView / i_view32.ini と真剣に向き合ってみました。

以下 設定ファイル: i_view32.ini に関する 私的 TIPS をまとめてみましたが、 すべて IrfanView (32bit) Version 4.38 (以下 i_view32.exe) によるものです。
 (過去のバージョンも 入手できる ところも良いツールの証)


i_view32.exe の憂鬱

i_view32.exe には大量の設定・オプションがあります。
そして画像を扱う場合には アプリ表示の見た目で満足してしまうため、 試行錯誤しまくって何をどう変えたか失念したり、 実際の動作詳細や状態を見逃したりして 後から失敗に気付くことがしばしばあります。

例えば "Use Resample for zooming" がかかっているのに 拡大して「よし!」って判断しちゃったり、 Resize での "Apply sharpen after Resample" が作業毎に違ってたとか、 もっと単純には JPEG 保存の "Save quality" がまちまちになっちゃったとか…。

i_view32.exe のあちこちのメニューに散らばった設定状態を まとめて把握するにはどうしたら?

実は答えは簡単で、「i_view32.ini にすべて集約されるので これを管理すればいい」なのですが、言うは易しなんたらかんたら… だったので ここにその糸口をまとめてみたというわけです。


i_view32.ini の基礎知識

i_view32.ini の置き場所はインストール時に選択しますが、そのカラクリは 以下の通りです。


i_view32.exe は 通常 exe と同じフォルダーにある i_view32.ini を参照します。

インストール時に「IrfanView folder」を選んだ場合には Program Files 下の この i_view32.ini が直接使用されますが、win7/win10 等では直接の書込みが 禁止されているので VirtualStore に飛ばされ、 C:/Users/%USERNAME%/AppData/Local/VirtualStore/Program Files (x86)/IrfanView/i_view32.ini が使用されます。

またインストール時に「User's Application Data folder」を選んだ場合、 Program Files 下の i_view32.ini での以下のエントリーによりリダイレクトされ、
+--------------------------------------------
|[Others]
|INI_Folder=%APPDATA%\IrfanView
+--------------------------------------------
C:/Users/%USERNAME%/AppData/Roaming/IrfanView/i_view32.ini が使用されます。

実際に使用される方の i_view32.ini のインストール直後の初期状態は おおむね以下の通りで大変コンパクトですが、i_view32.exe を使って 各種設定・操作を行うたびに関連する設定が追加され成長していきます。   (エントリーがない設定には exe が内包している初期値が適用される)
+--------------------------------------------
|[Language]
|DLL=ENGLISH
|Lang=English
|[Toolbar]
|Skin=Grosberg_24.png
|Size=24
|[Others]
|Unicode=1
+--------------------------------------------

i_view32.ini の管理の実際

まずは 実効の i_view32.ini を自分に近いところへ持ってきます。上記の通り i_view32.ini 参照にはリダイレクト機能がありますので、こんな感じで。

+--------------------------------------------
|[Others]
|INI_Folder=c:\ura\etc
+--------------------------------------------
これで i_view32.ini は 私の設定ファイル置き場 c:/ura/etc/ に来ました。
さらにここに『私の基準設定』の i_view32.ini-myDef を用意(*1)しておきます。
+--------------------------------------------
|c:\ura\etc> ls -l i_view32.ini-myDef i_view32.ini
|-rw-rw-rw-   1 user     group        5201 May 17 16:57 i_view32.ini
|-rw-rw-rw-   1 user     group        5198 Jan 22 10:45 i_view32.ini-myDef
+--------------------------------------------
作業前には設定を基準点にもどします。 これは i_view32.ini を基準ファイルで上書きするだけですね。
+--------------------------------------------
|c:\ura\etc> xcopy i_view32.ini-myDef i_view32.ini
|C:\ura\etc\i_view32.ini を上書きしますか (Yes/No/All)? y
|C:i_view32.ini-myDef
|1 個のファイルをコピーしました
+--------------------------------------------
i_view32.exe で試行錯誤したあと、「今なにをいじったんだっけ?」は i_view32.ini の差分をとって確認します。
+--------------------------------------------
|c:\ura\etc> diff i_view32.ini-myDef i_view32.ini
|91c91
|< FitWindowOption=1
|---
|> FitWindowOption=2
|163c163
|< OpenDir=C:\Users\uratan\Desktop\_w\
|---
|> OpenDir=C:\Users\uratan\Desktop\_w\iv\
|302,303c302,303
|< Width=495
|< Height=147
|---
|> Width=771
|> Height=673
+--------------------------------------------
ここから、差分(設定の変更点)を『私の基準設定』i_view32.ini-myDef に フィードバックするもよし(*1)、 破棄するもよし(*2)なのですが、その際に困ったのが 「この設定って いったい どういう意味?」であり、 「この設定って いったい どこのメニューにあるの?」でした。
(*1) 『私の基準設定』i_view32.ini-myDef は こうやってインストール直後の コンパクトな i_view32.ini から (設定と動作を確認しながら)成長させて作ったのです。 (現時点で 283エントリー)
安直にはある時点の i_view32.ini をバックアップすればいいだけですが、 とにもかくにも「基準位置」が定まって「そこからの変化」が 把握できることが重要です。
(*2) エントリーがなければ exe が内包している初期値が適用されますので、 こだわらないもの・お任せでいいものは記述しない選択ができます。

なお .ini ファイルは [SECTION] と KEY という行をまたいだ構造を持ち、 同じ KEY 名でも [SECTION] が異なれば別の設定になります。 script ツールでも使って簡単に構造をなくし行単位にまとめると sort や diff で便利だったりします。
    参考: z-ini2flat.awk


i_view32.ini のキーから設定画面をたどりたい

というわけで、とりあえず「この設定って いったい どこのメニューにあるの?」 を探りまとめてみました。 (さすがに全部は網羅できなかったので、私が気になった部分に限ります)

      キーから設定画面をたどる

「この設定って いったい どういう意味?」の方は、設定画面の文言を見ても わからないものがあったりして また別の話ということで…。


最後に

INI_Folder エントリーにて i_view32.ini 自身をリダイレクトできるって 素晴らしい発想ですね!

実はコマンドラインからも i_view32.exe を 起動できるように 私の実行ファイル置き場に i_view32.exe をコピーして置いていたりして、一つの PC に二つの i_view32.ini がある状態だったりもしてたのですが、 リダイレクト機能にて設定が一本化されて すっきり!
さらに i_view32.ini が手元に来たおかげで、比較・バックアップや 複数の PC での設定の共有が(私的に)素直になって これもすっきり!

昨今 設定が大量にあるアプリは多いですが、その管理対策(?)として 以下のようなアプローチを目にしてきました。

個人的にはこの .ini ファイル+リダイレクト方式も なかなかいい線をいっているように思います。

しかしながら一番の収穫は IrfanView / i_view32.ini と真面目に向き合ったことです。 やはり「なんとなく動いているからいいや」は いかんですね。



- * - * -


おまけ: 輝度・コントラスト調整について

IrfanView と真剣に向き合う第二段!     [2020.4.4 追記]   (他に置く所がないので ここに)
これまたこれまで“なんとなく”使ってた画像のトーン調整: Color corrections なんですが、よくよく調べてみたら…。

Brightness correction by IrfanView Contract correction by IrfanView Brightness+Contract correction by IrfanView
自分のイメージとは大分違ってたけど むやみに飽和させないのは賢いなぁ。 画像関係の世界は とっつき易さに比べて ホントに奥が深いなぁ。

おまけ2: Effect: Blur / Sharpen について

IrfanView と真剣に向き合う第三段!     [2021.5.15 追記]   (他に…… やはりここに)
画質調整は効果を目視確認しながら対話的に使うのが通常で(罠もあるけど)、 また設定値が決まった後は Batch conversion にて 複数画像に一括適用するのも簡単にできて不満はないのですが、 例によって Netpbm でも同等な処理ができたらいいかな と思い (パラメータスイープした画像を自動生成したりさ)、 Blur / Sharpen について調査してみました。
与える空間フィルタの設定のみで pnmconvol 単体で 概ね互換を達成できたように思いますが、 演算結果の丸め方式の違いか微少な誤差を消しきれなかったので こっそりと…。     参考までに: v-emu-ivbs.awk

    +----------------------------------------------------  [2023.12.07 追記]
    |% cat matrix.PGM         : netpbm-10.73.28以降の pnmconvol は maxval を
    |P2                       : 越える値を受け付けなくなっているようですが
    |3 3                      : これは BUG だそうです。 いずれ直るようですが
    |400                      : それまでは -matrixfile オプションで回避して
    |187 187 187              : ください。(空白は 1文字に限るらしい)
    |187 504 187               - - - - - - - - - - - - - - - - - - - - - - -
    |187 187 187
    |% djpeg test.jpg | pnmconvol matrix.PGM | cjpeg > sharpen.jpg
    |pnmconvol: Plane 0 sample value 504 exceeds the image maxval of 400
    |
    |% cat matrix.txt
    |-0.065 -0.065 -0.065
    |-0.065 1.520 -0.065
    |-0.065 -0.065 -0.065
    |% djpeg test.jpg | pnmconvol -matrixfile=matrix.txt | cjpeg > sharpen.jpg
    +----------------------------------------------------

おまけ3: ガンマ補正とカラーバランス調整について

IrfanView と真剣に向き合う第四段!     [2021.12.9 追記]   (他に…… やはりここに)
Gamma correction は IrfanView と pnmgamma の補正結果が完全に一致しました。 ラッキー!
調整範囲が IrfanView では 0.01〜6.99 まで 0.01刻みなので これは pnmgamma の優勢勝ちかな…!?

Gamma correction by IrfanView & pnmgamma     Color balance correction by IrfanView
Color balance は これぞ単純な加減算でしたね。
等価な処理は pnmarith や pamfunc で 一応 実現できます。 (少々手間ですが)

おまけ4: Saturation 補正について

IrfanView と真剣に向き合う第五段!     [2021.12.17 追記]   (他に…… やはりここに)
「ここまで来たら Saturation もで Color corrections 一式 コンプリートだ!」 と勢い込んで始めてみたのですが、調べても調べても全然見えてこない…。
とりあえずトーンカーブを描いてみたところ (下 3図、実は 6色分 全部描いたんですけど)、 何かでゲインが可変されてるだけっぽい(これが単純な掛け算ですね!)のは わかるんだけど、その理屈が見えなくて、 また、例えば Magenta では常時ゼロの G 成分 (Yellow では B 成分、Blue では R/G 成分)が、 補正値マイナスで むくむく現れてくるあたりが まったくチンプンカンプンだったわけです。
    (おまけに白・黒・グレーは補正の影響を受けないし……)

HSV 色空間で…とか、傾きからあれを…とか、一週間ほど試行錯誤しましたが、 なんとかたどり着いた その仕組みが これ ↓ です。   (参考: v-emu-ivsat.awk …なんとclamp以外 条件分岐がない!
            Saturation correction HOW-TO                 order of Color correctins 完遂
実は 補正値 最小 -255 指定でも完全なモノクロ画像にはならず 微妙に色が残ってましてですね、最終局面では これを丸め誤差と勘違いして なんとか一致させようとして嵌りました。 (補正比率を -255/255 と思い込んでいたけど 実は -255/256 だったので、 色残りは正しい計算結果だった)
しかし RGB 値を モノクロ輝度値に変換する比率が "Convert to Grayscale" とも 違うし 画像やる人らは ±1〜2 ぐらいの誤差は まったく気にしないものなのかな?
    (ppmtopgm の比率もまた違うし、 その ppmtopgm でも MAXVAL 違いで簡単に別比率使うし…)

おまけ の おまけ: 画像のパラパラ比較について

IrfanView の ちょっとうまい使い方     [2022.03.14 追記]   (他に…… やはりここに)
例えば「間違い探し」のように よく似た 2枚の画像を比較したい場合、 パラパラ漫画の要領で 2枚の画像をパタパタ切り替えて表示すると 相違部分を とても目立たせることができます。(いわゆる " 残像デバッグ " ですね)

間違い探せ
 
IrfanView では scroll wheel で表示ファイルを切り替えることができます(*3)ので、 この操作はマウスホイールをグリグリするだけで 非常にスムーズに実現できます。 ただし その 2枚の画像が「前後に並んでいる」必要があります。
IrfanView では表示画像のあるフォルダ内のすべての画像ファイルを 「Options → Sort directory files → by …」 にて指定した順で扱います(*3)が、 通常 これは「ファイル名順」で、かつ こういったものは ファイル名が machi1.png / machi2.png などと近いものが多いので 自然と前後に並び、パラパラ比較に問題ない場合も多いです。

ではファイル名が離れていたり バラバラだったり、比較したい画像・組み合わせが 複数ある場合はどうするか?

これ私 比較したいペアがすべて前後になるように いちいちファイル名を付け替え(てコピーし)たりしていたのですが、 『画像・アイコンとして把握している状態での「これとこれを比較したいなぁ」』 から 『ファイル名空間で あれとそれが前後に並ぶように…』 への落差が非常に大きく、 おまけにファイルを新設すると フォルダの再読み込みが必要になったりして、 "シームレス"とは まったく真逆な状態に ずーっと歯がゆい思いをしていました。

でも最近ようやっと気付いたのです!

IrfanView には File → Thumbnail で起動する IrfanView Thumbnails という Explorer のような画像ファイル管理ツールが内蔵されていまして、 現在の対象フォルダの画像ファイルが縮小表示にて一覧表示され ここから各種操作をすることができまして、 お便利に使わせてもらっているのですが、
実はこの一覧の並び順が、そのまま IrfanView の扱う並び順であり、 なおかつ、この縮小表示アイコンは drag & drop で位置を移動できて それがそのまま扱い順に反映されるのです。
おー これはすごい!     (drag & drop で移動できることには大分前に気付いてたんだけど、 その意味するところまでは…)

というわけで複数組み合わせを比較したい場合、 とにかく一つのフォルダーに比較したい画像をすべて詰め込んでおき (*4)、 Thumbnails で 比較したいものを隣り合わせに置いてはグリグリ、 隣り合わせに置いてはグリグリ… で非常に対話的に任意のパラパラ比較を実現できるのでした。

なお、以下のオプション設定に注意すると より快適にパラパラ比較を堪能できます。
とは言え やはり前後 2枚の目視比較には限界もありますので、 Netpbm にも必要に応じて活躍してもらいましょうね。
+--------------------------------------------
|% pngtopnm machi1.png > 1.ppm
|% pngtopnm machi2.png > 2.ppm
|% pnmarith -diff 1.ppm 2.ppm | ppmchange black gray | pnmtopng > diff12.png
+--------------------------------------------
[2023.11.18 追記]     (*4) Thumbnails には "Load thumbs from all subfolders" というメニューが (なぜか)Options 下にありまして、これを選択するとフォルダ階層を潜って すべての画像ファイルが一覧にあがります。うまく活用しましょう。

おまけ の おまけ2: JPEG quality の確認について

IrfanView に最後の抵抗     [2022.07.07 追記]   (他に…… やはりここに)
その JPEG ファイルが どれぐらいの quality/品質/画質 で保存されたかは、 IrfanView では Image → Information (もしくは ○に i のボタン) で開く Image properties の Compression の表示で確認できます。
この数値は JPEG ファイル内のデータより逆算するしかないようなので、 実際に使われた設定値ズバリかどうかはアレですが、 ほぼ正しいように思われます。
ただこのオペレーションだと 一度に 1ファイルしか確認できないので ちょっと不便に思うことがあり、簡単に JPEG ファイル群の概要を把握できるツールを作って使ってまして、 こんな感じです…。

+--------------------------------------------
|C:\xxx> jpgQ.exe *.jpg
|0012.jpg 511 547 -q 80   225.50 ss420
|abc99.jpg 905 750 -q 85   164.65 grayscale
|def 77.jpg 503 313 -q 91   482.75 ss444 progressive
+--------------------------------------------
あくまで「自分用」だったのでコードは やっつけであり、 quality 算出もイイカゲンではありますが、 興味のある方いらっしゃいましたら どうぞ 眉につばを付けながら お使いください。
    jpgQ-07.zip (43kB)     (怪しい時は IrfanView で確認!)

おまけ5: Edge Detection について

IrfanView と真剣に…(もう嫌がらせだな)第六段!     [2023.11.18 追記]   (他に…… やはりここに)
Effects → Effects browser... → Edge Detection にて パラメータを振った結果を並べて パラパラよく見て選択したいなぁ…、 な欲求が出まして、……ええ、またやっちまいました。
評価サンプル画像をでっち上げては もろもろ考察、を繰り返しつつ よく観察したところ、どうも畳み込み演算などという高尚な手法は使わずに 泥臭い^H^H^H 直截的・シンプルに処理している感触が…。
    (それならむしろオレのテリトリーだぜ)

evaluation sample
(30x30)

 
 
=============>>

edge detection

=============>>
by IrfanView
by some convolution

というところで、今回は 2段構えになりました。
    pnmIVed.sh.txt --- 縦方向・横方向の 2回に分けて隣接pixelとの差分を取り、
    v-ppmRMS.awk --- 両結果を 二乗平均平方根 (root mean square, RMS) で合成する。
        (後者は pamarith.c に ちょいと手を入れて pamRMS を作れば かなり高速化します)

実は RMS って大好きなんですよ、電力計算で実効値求めるのに使われたり。
こんなところでまた出会えるとは!         (GNU は関係ありません)



    uratan@miomio.jp
upward