English document is here...

Rota Readme

能書き

Rota.exeは、JPEG画像を画像品質の損失なく回転するためのユーティリティです。

JPEG画像は1/5〜1/50という大きな圧縮率を得るために非可逆圧縮という技術が使われており、圧縮された画像を展開しても圧縮前の画像と完全に同じものは得られません。デジカメで人物を縦位置で撮った場合、撮影後に人物画像を正立させたいと思うのは人情です。しかしJPEG画像を90度回転させたい場合、通常は一度画像を展開してから回転させ、その後再度JPEGに圧縮しなければならず、この過程である程度画像品質の劣化が起こります。

下の画像は、一番左のJPEG画像をMicrografx PicturePublisher8で開いては右に90度回転させ、再度JPEGで保存するという事を繰り返したものです。JPEG圧縮パラメーターはYUV=4:2:2、圧縮率'10'(アプリケーションによっては'90'またはHigh Quality相当)というかなり高画質モードで保存してるにもかかわらず、回転するたびに次第に画質が落ちているのが一目ではっきりと分かります。






loss-less JPEG Rotationは、元画像を完全には展開せずに中間データーの縦・横の格納位置だけを変更するという技を使っています。これによって左右90度および上下反転については、JPEGの画像品質を劣化させずに画像を回転できるわけです。次のサンプルは、Rotaを使いloss-less JPEG Rotationをさせたものです。4回適用しても、全く画質が変わっていないのが分かると思います。







Rotaでは、元画像のJPEG Marker情報を全て保存するモードでloss-less回転を行っています。このため画像の回転を行ってもJFIFやExifで格納されている撮影情報(撮影日時、シャッター速度、レンズ絞り値等)はそのまま残ります。

また拡張子'.JPG'、'.JPE'、'.JPEG'に関連付けられたアプリケーションの起動ユーティリティとしても使えます。

動作環境

Windows 32bit環境(Windows95/98/NT等)、Win32Sは不可

動作確認

WindowsNT4.0SP6 PentiumPro 200MHz 無印AT互換機
Windows2000 MMX-Pentium 166MHz B5サブノート(Chandra2)
WindowsMe/Windows2000 Athlon 800MHz 無印AT互換機



使い方

Rota.exeはスタンドアローンのプログラムなので、事前にインストール等を行う必要はありません。どこかお好きなフォルダーにRota.exeをコピーして、ショートカットを作成すればそれだけで動きます。Rota.exeを起動すると、下のような無愛想な画面が出ます。操作はとても簡単です。



この状態では[Open][Exit][?]の3つのボタンだけが生きています。

1: Openボタン



[Open]ボタンを押すと、左上のようなダイアログが開きます。これで回転させたい画像の格納されているフォルダーを指定します。ドライブを選択後、フォルダーをクリックしてください。指定されたフォルダーに拡張子'.JPG'、'.JPE'、'.JPEG'のファイルがある場合は、右側のウィンドウにファイルリストが表示されます。

このドライブ・フォルダーで間違いない場合は、そのまま[OK]を押してください。

注意:

各ドライブのルートフォルダー(C:¥、F:¥等)を選択する場合は、ルートフォルダーのアイコン(左の例だと、のアイコン)をダブルクリックしてください。



このフォルダーなのかどうか確信が持てない場合は、右側のウィンドウに表示されているファイル名をクリックすると、左のようにサムネィル画像とファイルのタイムスタンプが表示されます。

この状態でサムネィル画像をマウスでダブルクリック、コントロールキーを押しながら左クリック、中央ボタン(またはスクロールホイール)でクリックすると、'.JPG'、'.JPE'という拡張子に関連付けられたアプリケーションを起動することができます。

ドライブ・フォルダーの選択が正しければ、[OK]ボタンを押してください。



[Open]で選択したフォルダーにJPEG画像がある場合、下のような画面になります。間違ったフォルダーを選んでしまった場合、処理中に[Open]ボタンを再度押すことによって中断ができます。

PageSizeラジオボダンでSが選ばれている場合、1ページあたり20画像が、Mでは30画像、Lでは48画像がそれぞれ表示されます。1ページに収まらない場合は画面右側のスクロールバーが有効になり、マウスでスクロールバーを操作するか、キーボードのカーソルキー[PageUp][PageDown]キー、およびマウスホイールの回転で表示位置の移動ができます。



注意:

Rota自体はとりあえず2,000ファイルまでは開けるようにコーディングしてありますが、一度に開くことができる最大のファイル数はWindowsシステムのComCtl32.dllというモジュールに依存しています。Windows98/Meでは648ファイル、WindowsNT/2000では1633ファイルが限界のようです。[Error: Can't add thumbnail: image XXX]というメッセージが出た場合は、フォルダーにある画像数を減らして再度試してください。

2: 画像を操作するには?

2-1: 画像の回転

とっても安直です。回転させたい画像の上で、マウスの右ボタンをクリックすると右に、左ボタンをクリックすると左に回転します。
画像の回転は[Apply]ボタンを押すまでは元画像に反映されませんのでご注意ください。

2-2: 画像のコピー、削除

サムネィル画像の上にマウスカーソルを持っていった状態でInsertキーを押すと、その画像を指定したフォルダーにコピーできます。またDeleteキーを押すと、その画像を削除できます。

2-3: アプリケーションの起動

もし使われているマウスに中央ボタン(またはスクロールホイール)が付いているならば、画像の上で中央ボタンを押すことにより.JPGという拡張子に関連付けられているアプリケーションが起動します。WindowsのデフォルトではInternet Explorer等です。フリーウェアのImageFilter等の画像レタッチソフトを.JPGに関連付けしておくと便利です。

またマウスに中央ボタンが無い場合は、キーボードのControlキーを押しながらマウスの左ボタンを押しても'.JPG'に関連付けられたアプリケーションを開くことができます。

3: やや大きめ画像

サムネィル上にマウスカーソルを持っていった画像は左側にやや大きめに表示されます。
image information
画像の上にはファイル名が、下にはファイルのタイムスタンプと撮影情報(存在すれば)が表示されています。最初は下左のようにファイル名のバックは水色ですが、回転させると下中央のように緑色になります。回転させた画像が読取専用(read only属性)に設定されている場合、下右のようにファイル名の左に赤のRO表示が出ます。

回転前

回転後

読取専用

読取専用に設定されている画像を回転させ、Applyボタンを押した場合は下のようなダイアログが開きます。読取専用属性を無視して回転させる場合はYesを、回転させる全ての画像について読取専用属性を無視する場合はYes to Allを、やめる時はCancelをクリックしてください。


4: マウスボタンの反転

コントロールパネルの設定でマウスボタンの左右を入れ替えて使っている方は、[Mouse Button Exc.]のチェックボックスをチェックするとマウスボタンによる動作が反転します。

5: 設定の保存

画像を開いたフォルダー名、表示サイズ、マウスボタンの左右反転の3つの設定については、Rotaを終了するときにRota.exeがあるフォルダーにRota.iniというファイルで保存されます。あまり必要ないでしょうがプレーンテキストですので、Notepad等のテキストエディターで変更も可能です。
[Control]セクション
Folder= 最後に開いたフォルダーのパス名です。
PageSize= 表示サイズです。0がSサイズ、1がMサイズ、2がLサイズです。
MouseEx= マウスボタンの反転状態です。0が非反転、1が反転です。



FAQ集

JPEG画像をいじくるプログラムを自分で書きたいのですが、どうすれば良いですか?
Borland C++BuilderやDelphiのライブラリーは、JPEG形式を標準でサポートしています。普通にJPEG画像を表示させたり、画像をJPEG形式で保存したりするアプリケーションを書くにはこの上なく便利です。Rotaにはソースコードが添付されていますので、興味がある方はどんなもんか覗いてみてください。Delphiからインポートされたライブラリーを多用していますので、Delphiへの移植は難しくないのではないかと思います。
もっと細かいJPEG画像の操作には、Independent JPEG Group (IJG)によるJPEGライブラリーを使えます。今回使ったLoss-less JPEG rotationのモジュールは、IJGのコードを使っています。このライブラリーは商用・非商用を問わず無料で使う事が許されており、BorlandのJPEGライブラリーやInternet Explorerにも使われているようです。IJGライセンスの詳細については、添付の'README'ファイルを参照ください。

非常にたくさんの画像を読み込もうとしたら、途中で[Error: Can't add thumbnail: image XXX]という表示が出ました。
一度に読み込める画像の数はシステムのComCtl32.dllに依存しています。Windows98/Meの場合は648、WindowsNT/2000の場合は1633が上限のようです。フォルダーにある画像数を減らしてトライしてください。

プログラムを走らせている時はちゃんと画像が回転しているのですが、プログラムを終了させると元画像が回転していません。
画面上で回転させた後に、[Apply]ボタンを押さないと元画像に反映されません。

メイン画像は回転したのですが、サムネィル画像は元のままです。
実はloss-less回転やると微妙に格納サイズが変わるので、サムネイル画像も回すのは結構面倒なのです。ごめんなさい。

ドライブのルートフォルダー(D:¥、F:¥等)が選択できません。
ルートフォルダーを選択する場合は、ルートフォルダーのアイコン ( 等)をダブルクリックしてください。

ドライブのルートフォルダー(D:¥、F:¥等)しか画面に出て来ません/一部のフォルダーしかツリー表示されていません。
フォルダーをツリー展開表示するにはフォルダーのアイコン ( 等)をダブルクリックしてください。

NNNN製デジカメを持っているのですが、メーカーノート情報が表示されません。是非表示できるようにしてください。
NNNN製デジカメのメーカーノートについての情報を私は持っていません。その機種のMakerNoteフォーマット情報についてお教え下されば追加は可能です。また機種によっては(SONY、古いCASIO/Fujifilm等)元々MakerNote情報が無いものもあります。


.

付録1: Independent JPEG Group によるJPEGライブラリーについて


Independent JPEG GroupによるJPEGライブラリーは、商用・非商用問わず使えるフリーのJPEGライブラリーとして、広く使われています。このライブラリーはhttp://www.ijg.org/からダウンロード可能です。現在の最新版はversion 6bで、このバージョンからloss-less rotationがサポートされました。

使い方の詳細は添付されているドキュメントを読めば分かりますが、ここではBorland C++5.5でのコンパイル法とjpegtranのパッチについてだけ説明しておきます。

IJGのライブラリーには、各種のCコンパイラー用のmakefileと機種依存ヘッダーファイルが収められています。Borland C++用もあるのですが、残念ながらBorland C++ V3.0用で、これはまだWin32環境になる前の時代です。しかしとりあえずコンパイルは可能です。変更点は以下のとおり。 とりあえずこれでBorland C++ 5.5のmakeが通ってコンパイル可能になります。Rotaのソースで使われているlibjpeg.libは、こうしてコンパイルされたものです。なお現在Borland C++ 5.5はフリーウェアになっており、http://www.inprise.co.jpから無料でダウンロード可能です。


IJGライブラリーをコンパイルするとできるユーティリティの中で、一番使えるのがjpegtran.exeです。これはRotaで使っているloss-less回転や、プログレッシブJPEGへの変換等いくつかのコンバージョンができるユーティリティです。Rotaのソースにあるtransupp.cは、jpegtranのモジュールの一つです。例えばJPEG画像をloss-less回転させるには以下のようにします。

jpegtran -rotate 90 -copy all infile.jpg outfile.jpg

この-copy allというオプションを付けると、JPEGのアプリケーションマーカーの内容が全てコピーされるので、Exif等の撮影情報もそのまま残ります。ただし提供されたままのjpegtran.exeではExifで使われているAPP1マーカーの前に強制的にJFIFのAPP0マーカーを付けてしまうため、一部のユーティリティではExifとして認識できなくなってしまいます。これを防ぐにはjpegtran.cの453行目にある

jpeg_copy_critical_parameters(&srcinfo, &dstinfo);

の後に、

dstinfo.write_JFIF_header = FALSE;

という行を追加して、APP0マーカーの出力を無理やり禁止してしまえばいいです。


.

付録2: 撮影情報表示について


Rotaでは、Exif形式およびJFIF形式の画像に格納されている撮影情報のうち、いくつかを表示しています。現在表示している情報は以下のとおりです。下表の中でも、機種によって格納されている情報と格納されていない情報があります。

Exif format
TagExamples of displayDesc.
ExposureTime1/10s, 0.9sExposure time. [s]
FNumberF3.2, F5.6F-stop of lens [no unit]
FocalLengthf5.0mm, f150.0mmFocal length of lens [mm]
SubjectDistancedist0.63m, dist136.0mDistance to focus point [m]
MeteringModeCenter-w., Multi-seg.Exposure meterig mode
ExposureBiasValueExp.bias-0.7Exposure bias value of taking picture [EV]
ISOSpeedRating /
ExposureIndex
ISO100, ISO160CCD sensitivity
FlashFlashOnFlash was used or not
ModelC2100UZ, SX112Model number of digicam
DateTimeOriginal2000:07:13 22:25:00Date/Time of original image taken

Exif MakerNote
FujifilmExamples of displayDesc.
0x1000:QualityQuality NormalJPEG compression quality
0x1001:SharpnessSharpness SoftImage sharpness
0x1002:White BalanceWhiteBl. DaylightWhite balance setting
0x1010:Flash ModeFlashMode RedEyeFlash mode
0x1011:Flash StrengthFlashPow. 6/10Flash strength, unit is [EV]
0x1020:Macro ModeMacroMode OffMacro mode or not
0x1021:Focus ModeFocusMode ManualAF or Manual
0x1030:SlowSync ModeSlowSync OffSlow shutter synchro mode
0x1031:Picture ModePictMode Aperture PrPicture taking mode
0x1100:Continuous TakeContTake OnContinuous Picture taking mode
0x1300:Blur WarningBlueWarn YesBlur warning (shutter speed is too slow) indicator
0x1301:Focus WarningFocusWarn YesAuto Focus warning (focus error) indicator
0x1302:AE WarningAE Warn YesAE warning (over exposure) indicator
Nikon type1 (E900/950/700/800)Examples of displayDesc.
0x0003:QualityQuality 6Picture quality mode
0x0005:Image AdjustmentImageAdj. Contrast+Image setting
0x0006:ISO SpeedISO Speed 80ISO speed rating
0x0007:White BalanceWhiteBl. DaylightWhite balance setting
0x0008:Focus modeFocus InfinityFocus mode, normal or infinity
0x000a:Digital ZoomDigiZoom 160/100Digital zoom ratio
0x000b:ConverterConverter FishEyeLens converter mode
Nikon type2 (E990/E880/D1)Examples of displayDesc.
0x0002:ISO SpeedISO Speed 200ISO speed rating
0x0004:QualityQuality FINEJPEG compression quality
0x0005:White BalanceWhiteBl. AUTOWhite balance setting
0x0006:SharpnessSharpness NORMALImage sharpness setting
0x0007:Focus ModeFocus AF-SFocus mode
0x0008:Flash ModeFlash ONFlash mode
0x000f:ISO SelectISO Sel. ManualManual ISO select or Auto gain-up
0x0080:Image AdjustImageAdj. CONTRAST(+)Image setting
0x0082:AdapterAdapter FishEye 2Lens converter mode
0x0085:MF distanceMF Dist. 3mManual focus distance
0x0086:Digital ZoomDigiZoom 160/100Digital zoom ratio
0x0088:Focus PositionFocusPos. UpperAF focus position
CasioExamples of displayDesc.
0x0001:Recording ModeMode Night ScenePicture recording mode
0x0002:QualityQuality FineJPEG compression quality
0x0003:Focus ModeFocusMode Manual FocusFocusing mode
0x0004:Flash ModeFlashMode Red EyeFlash firing mode
0x0005:Flash StrengthFlashStr. StrongFlash firing strength
0x0006:Object distanceDistance 4.5[m]Object distance
0x0007:White balanceWhiteBl. DaylightWhite balance setting
0x000a:Digital ZoomDigiZoom 2XDigital Zoom ratio
0x000b:SharpnessSharpness HardImage sharpness setting
0x000c:ContrastContrast HighImage contrast setting
0x000d:ChromaChroma HighImage chroma(saturation) setting
0x0014:ISO SpeedISO Speed 64ISO speed rating
Olympus/Sanyo/EpsonExamples of displayDesc.
0x0200:ModeMode Fast/Seq.2Taking mode/Sequence no.
0x0201:JPEG qualityJpegQual. SQImage quality setting
0x0202:Macro ModeMacroMode OffMacro mode setting
0x0204:Digital ZoomDigiZoom 2/1Digital zoom ratio
0x0207/0x020d:Model CodeModel code SR951Model code

JFIF(JFXX) format
Info nameExamples of displayDesc.
Shutter1/10s, 0.9sExposure time. [s]
FNumberF3.2, F5.6F-stop of lens [no unit]
MTR1f9.2mm, f28.0mmFocal length of lens [mm]
ExpBiasExp.bias-2Exposure bias value of taking picture [no unit]
LightSWbAuto, WbDaylight, Wb5500KLight source: white balance setting
FlashFlashOnFlash was used or not
TypeSR83, DCPTModel number of digicam
QualitySHQ, HQImage quality mode
TimeDate2000/07/13 22:25:00Date/Time of original image taken


改版履歴

V0.7 2001/01/13

V0.6 2000/10/15

V0.5 2000/09/18

V0.4 2000/08/03

V0.3 2000/07/13

V0.2 2000/07/05

V0.1 2000/06/30


注意事項:




橘家 鶴蔵 TsuruZoh Tachibanaya
t s u r u z o h @ b a . w a k w a k . c o m
http://park2.wakwak.com/‾tsuruzoh/


Rota.exe README Copyright(c) TsuruZoh Tachibanaya