はじめに
前回の記事で GIF ファイルの情報を表示するスクリプトを作成した。
その過程でバイナリファイルを取り扱う自作クラスを作成した。丁寧にもリトルエンディアン/ビッグエンディアン両対応で作成したのだが,GIF ファイルはリトルエンディアンなので物足りない。せっかくだからビッグエンディアンの機能も使いたいので他の画像ファイルフォーマットにも手を出してみよう。
ちなみに BMP ファイルはリトルエンディアン,PNG と JPG はビッグエンディアンです。
基本方針
- WSH(Windows Script Host)で作る。言語は VBScript だ。
- まとめて作るので共通部分は CommonLibrary.VBS としてまとめる。
- 対象とする画像ファイルは以下の3種類とする。TIFF は最近ほとんど使わなくなったので対象外とする。WEBP はちょっと悩んだけど WIC(Windows Imaging Component)でエンコードをサポートしていないし, Qiita がサポートしていないので時期尚早と判断した。
- BMP
- PNG
- JPEG
- すべての機能には対応しない。自分の所有する画像ファイルにさえ対応すれば良い。
実装コード
BMPinfo.WSF(詳しくはコチラ)
BMPinfo.WSF
<package>
<job>
<script language="VBScript" src="CommonLibrary.VBS"></script>
<script language="VBScript">
Option Explicit
'-------------------------------------------------------------------------------
' グローバル定数
'-------------------------------------------------------------------------------
Dim oBMP: Set oBMP = New BinaryFile
Dim sFilename: sFilename = ""
Dim sOption: sOption = ""
'-------------------------------------------------------------------------------
' メイン関数の呼び出し
'-------------------------------------------------------------------------------
MainFunction
'-------------------------------------------------------------------------------
' ヘルプメッセージ
'-------------------------------------------------------------------------------
Sub Usage()
WScript.Echo "BMP ファイルの情報を表示します。"
WScript.Echo ""
WScript.Echo "BMPINFO(.WSF) (オプション) [ファイル名(.BMP)]"
WScript.Echo ""
WScript.Echo "<オプション>"
WScript.Echo " /S 画像ファイルの横幅と高さを示します。"
WScript.Echo " /W 画像ファイルの横幅を示します。"
WScript.Echo " /H 画像ファイルの高さを表示します。"
WScript.Echo " /D 画像ファイルの深さを表示します。"
WScript.Echo " /P 画像ファイルのパレットを表示します。"
WScript.Quit
End Sub
'-------------------------------------------------------------------------------
' コマンドライン解析
'-------------------------------------------------------------------------------
Sub GetCommandLine()
'---------------------------------------------------------------------------
' ヘルプメッセージ
'---------------------------------------------------------------------------
Dim oArg: Set oArg = WScript.Arguments.Unnamed
If oArg.Count < 1 Then Usage
'---------------------------------------------------------------------------
' 入力ファイル名の取得
'---------------------------------------------------------------------------
Dim oFS: Set oFS = New FileSystemObject
If oFS.FileExists(oArg(0)) Then
sFilename = oArg(0)
oBMP.Open sFilename
Else
WScript.Echo "ファイル " & oArg(0) & " が存在しません!!"
WScript.Quit
End If
'---------------------------------------------------------------------------
' オプション解析
'---------------------------------------------------------------------------
Dim oOpt: Set oOpt = WScript.Arguments.Named
If oOpt.Exists("S") Then sOption = "SIZE"
If oOpt.Exists("W") Then sOption = "WIDTH"
If oOpt.Exists("H") Then sOption = "HEIGHT"
If oOpt.Exists("D") Then sOption = "DEPTH"
If oOpt.Exists("P") Then sOption = "PALETTE"
End Sub
'-------------------------------------------------------------------------------
' メイン関数
'-------------------------------------------------------------------------------
Sub MainFunction
'---------------------------------------------------------------------------
' コマンドライン解析
'---------------------------------------------------------------------------
GetCommandLine
'---------------------------------------------------------------------------
' BMPファイルのオープン
'---------------------------------------------------------------------------
Dim i, n, a, b, c, s
a = oBMP.ReadPack("slssl")
If a(0) <> &H4D42 Then
WScript.Echo "ファイル " & sFilename & " は BMP 形式ではありません!!"
WScript.Quit
End If
b = oBMP.ReadPack("lllssllllll")
Select Case sOption
Case "SIZE":
WScript.Echo sFilename & vbTab & b(1) & vbTab & b(2)
Case "WIDTH"
WScript.Echo sFilename & vbTab & b(1)
Case "HEIGHT"
WScript.Echo sFilename & vbTab & b(2)
Case "DEPTH"
WScript.Echo sFilename & vbTab & b(4)
Case "PALETTE"
n = b(9)
If n < 1 Then
Select Case b(4)
Case 2: n = 2
Case 4: n = 16
Case 8: n = 256
End Select
End If
WScript.Echo "No. RRGGBB"
WScript.Echo "----------"
For i = 0 To n - 1
c = oBMP.ReadPack("CCCC")
s = DECtoHEX(i, 2) & ": "
s = s & DECtoHEX(c(2), 2)
s = s & DECtoHEX(c(1), 2)
s = s & DECtoHEX(c(0), 2)
WScript.Echo s
Next
Case Else
WScript.Echo " FILENAME: " & sFilename
WScript.Echo " IMAGE WIDTH: " & b(1)
WScript.Echo " IMAGE HEIGHT: " & b(2)
WScript.Echo " COLOR DEPTH: " & b(4)
WScript.Echo " COMPRESS: " & b(5)
WScript.Echo " IMAGE SIZE: " & b(6)
WScript.Echo " X RESOLUTION: " & b(7)
WScript.Echo " Y RESOLUTION: " & b(8)
WScript.Echo " USED COLOR: " & b(9)
WScript.Echo "IMPORTANT COLOR: " & b(10)
End Select
oBMP.Close
End Sub
</script>
</job>
</package>
PNGinfo.WSF(詳しくはコチラ)
PNGinfo.WSF
<package>
<job>
<script language="VBScript" src="CommonLibrary.VBS"></script>
<script language="VBScript">
Option Explicit
'-------------------------------------------------------------------------------
' 定数定義
'-------------------------------------------------------------------------------
Const CHUNK_IHDR = &H49484452
Const CHUNK_PLTE = &H504C5445
Const CHUNK_IDAT = &H49444154
Const CHUNK_IEND = &H49454E44
Const CHUNK_sRGB = &H73524742
Const CHUNK_gAMA = &H67414D41
Const CHUNK_cHRM = &H6348524D
Const CHUNK_pHYs = &H70485973
'-------------------------------------------------------------------------------
' グローバル変数
'-------------------------------------------------------------------------------
Dim oPNG: Set oPNG = New BinaryFile
Dim sFilename: sFilename = ""
Dim sOption: sOption = ""
'-------------------------------------------------------------------------------
' メイン関数の呼び出し
'-------------------------------------------------------------------------------
MainFunction
'-------------------------------------------------------------------------------
' ヘルプメッセージ
'-------------------------------------------------------------------------------
Sub Usage
WScript.Echo "PNG ファイルの情報を表示します。"
WScript.Echo ""
WScript.Echo "PNGINFO(.WSF) (オプション) [ファイル名(.PNG)]"
WScript.Echo ""
WScript.Echo "<オプション>"
WScript.Echo " /S 画像ファイルの横幅と高さを表示します。"
WScript.Echo " /W 画像ファイルの横幅を示します。"
WScript.Echo " /H 画像ファイルの高さを表示します。"
WScript.Echo " /D 画像ファイルの深さを表示します。"
WScript.Echo " /C 画像ファイルのカラータイプを表示します。"
WScript.Echo " /P 画像ファイルのパレットを表示します。"
WScript.Quit
End Sub
'-------------------------------------------------------------------------------
' コマンドライン解析
'-------------------------------------------------------------------------------
Sub GetCommandLine
'---------------------------------------------------------------------------
' ヘルプメッセージ
'---------------------------------------------------------------------------
Dim oArg: Set oArg = WScript.Arguments.Unnamed
If oArg.Count < 1 Then Usage
'---------------------------------------------------------------------------
' 入力ファイル名の取得
'---------------------------------------------------------------------------
Dim oFS: Set oFS = New FileSystemObject
If oFS.FileExists(oArg(0)) Then
sFilename = oArg(0)
oPNG.Open sFilename
Else
WScript.Echo "ファイル " & oArg(0) & " が存在しません!!"
WScript.Quit
End If
'---------------------------------------------------------------------------
' オプション解析
'---------------------------------------------------------------------------
Dim oOpt: Set oOpt = WScript.Arguments.Named
If oOpt.Exists("S") Then sOption = "SIZE"
If oOpt.Exists("W") Then sOption = "WIDTH"
If oOpt.Exists("H") Then sOption = "HEIGHT"
If oOpt.Exists("D") Then sOption = "DEPTH"
If oOpt.Exists("C") Then sOption = "COLOR"
If oOpt.Exists("P") Then sOption = "PALETTE"
End Sub
'-------------------------------------------------------------------------------
' メイン関数
'-------------------------------------------------------------------------------
Sub MainFunction
'---------------------------------------------------------------------------
' コマンドライン解析
'---------------------------------------------------------------------------
GetCommandLine
'---------------------------------------------------------------------------
' PNGファイルのオープン
'---------------------------------------------------------------------------
Dim i, j, a, b, s
a = oPNG.ReadPack("LL")
If a(0) <> &H89504E47 Or a(1) <> &H0D0A1A0A Then
WScript.Echo "ファイル " & sFilename & " は PNG 形式ではありません!!"
WScript.Quit
End If
Do Until oPNG.AtEndOfStream
a = oPNG.ReadPack("LL")
Select Case a(1)
Case CHUNK_IHDR
b = oPNG.ReadPack("LLCCCCC")
Select Case sOption
Case "SIZE"
WScript.Echo sFilename & vbTab & b(0) & vbTab & b(1)
Exit Do
Case "WIDTH"
WScript.Echo sFilename & vbTab & b(0)
Exit Do
Case "HEIGHT"
WScript.Echo sFilename & vbTab & b(1)
Exit Do
Case "DEPTH"
WScript.Echo sFilename & vbTab & b(2)
Exit Do
Case "COLOR"
WScript.Echo sFilename & vbTab & GetColor(b(3))
Exit Do
Case "PALETTE"
' 何もしない
Case Else
WScript.Echo " FILENAME: " & sFilename
WScript.Echo " WIDTH: " & b(0)
WScript.Echo " HEIGHT: " & b(1)
WScript.Echo " DEPTH: " & b(2)
WScript.Echo " COLOR: " & b(3) & ", " & GetColor(b(3))
WScript.Echo " COMPRESS: " & b(4) & ", " & GetCompress(b(4))
WScript.Echo " FILTER: " & b(5) & ", " & GetFilter(b(5))
WScript.Echo "INTERLACE: " & b(6) & ", " & GetInterlace(b(6))
Exit Do
End Select
Case CHUNK_PLTE
If sOption <> "PALETTE" Then
oPNG.Seek(a(0))
Else
WScript.Echo "No. RRGGBB"
WScript.Echo "----------"
j = 0
For i = 0 To a(0) - 1 Step 3
b = oPNG.ReadPack("CCC")
s = DECtoHEX(j, 2) & ": "
s = s & DECtoHEX(b(0), 2)
s = s & DECtoHEX(b(1), 2)
s = s & DECtoHEX(b(2), 2)
WScript.Echo s
j = j + 1
Next
Exit Do
End If
Case CHUNK_IDAT
oPNG.Seek a(0)
Case CHUNK_IEND
oPNG.Seek a(0)
Case CHUNK_sRGB
oPNG.Seek a(0)
Case CHUNK_gAMA
oPNG.Seek a(0)
Case CHUNK_cHRM
oPNG.Seek a(0)
Case CHUNK_pHYs
oPNG.Seek a(0)
Case Else ' その他
WScript.Echo "未定義チャンク:" & Hex(a(1))
Exit Sub
End Select
oPNG.Seek 4
Loop
oPNG.Close
End Sub
'-------------------------------------------------------------------------------
' COLORタイプを返す
'-------------------------------------------------------------------------------
Private Function GetColor(val)
Select Case val
Case 0: GetColor = "Grayscale"
Case 2: GetColor = "True Color"
Case 3: GetColor = "Indexed Color"
Case 4: GetColor = "Grayscale with Alpha"
Case 6: GetColor = "True Color with Alpha"
End Select
End Function
'-------------------------------------------------------------------------------
' COMPRESSタイプを返す
'-------------------------------------------------------------------------------
Private Function GetCompress(val)
Select Case val
Case 0: GetCompress = "Deflate"
Case Else:GetCompress = ""
End Select
End Function
'-------------------------------------------------------------------------------
' FILTERタイプを返す
'-------------------------------------------------------------------------------
Private Function GetFilter(val)
Select Case val
Case 0: GetFilter = "Basic"
Case Else:GetFilter = ""
End Select
End Function
'-------------------------------------------------------------------------------
' INTERLACEタイプを返す
'-------------------------------------------------------------------------------
Private Function GetInterlace(val)
Select Case val
Case 0: GetInterlace = "none"
Case 1: GetInterlace = "Adam7"
Case Else:GetInterlace = ""
End Select
End Function
</script>
</job>
</package>
JPGinfo.WSF(詳しくはコチラ)
JPGinfo.WSF
<package>
<job>
<script language="VBScript" src="CommonLibrary.VBS"></script>
<script language="VBScript">
Option Explicit
'-------------------------------------------------------------------------------
' 定数定義
'-------------------------------------------------------------------------------
Const MARK_SOF0 = &HFFC0&
Const MARK_SOF2 = &HFFC2&
Const MARK_DHT = &HFFC4&
Const MARK_SOI = &HFFD8&
Const MARK_EOI = &HFFD9&
Const MARK_SOS = &HFFDA&
Const MARK_DQT = &HFFDB&
Const MARK_APP0 = &HFFE0&
Const MARK_APP0 = &HFFE1&
Const MARK_APP0 = &HFFE2&
'-------------------------------------------------------------------------------
' グローバル変数
'-------------------------------------------------------------------------------
Dim oJPG: Set oJPG = New BinaryFile
Dim sFilename: sFilename = ""
Dim sOption: sOption = ""
'-------------------------------------------------------------------------------
' メイン関数の呼び出し
'-------------------------------------------------------------------------------
MainFunction
'-------------------------------------------------------------------------------
' ヘルプメッセージ
'-------------------------------------------------------------------------------
Sub Usage()
WScript.Echo "JPG ファイルの情報を表示します。"
WScript.Echo ""
WScript.Echo "JPGINFO(.WSF) (オプション) [ファイル名(.JPG)]"
WScript.Echo ""
WScript.Echo "<オプション>"
WScript.Echo " /S 画像ファイルの横幅と高さを表示します。"
WScript.Echo " /W 画像ファイルの横幅を示します。"
WScript.Echo " /H 画像ファイルの高さを表示します。"
WScript.Echo " /C 画像ファイルのカラータイプを表示します。"
WScript.Quit
End Sub
'-------------------------------------------------------------------------------
' コマンドライン解析
'-------------------------------------------------------------------------------
Sub GetCommandLine()
'---------------------------------------------------------------------------
' ヘルプメッセージ
'---------------------------------------------------------------------------
Dim oArg: Set oArg = WScript.Arguments.Unnamed
If oArg.Count < 1 Then Usage
'---------------------------------------------------------------------------
' 入力ファイル名の取得
'---------------------------------------------------------------------------
Dim oFS: Set oFS = New FileSystemObject
If oFS.FileExists(oArg(0)) Then
sFilename = oArg(0)
oJPG.Open sFilename
Else
WScript.Echo "ファイル " & oArg(0) & " が存在しません!!"
WScript.Quit
End If
'---------------------------------------------------------------------------
' オプション解析
'---------------------------------------------------------------------------
Dim oOpt: Set oOpt = WScript.Arguments.Named
If oOpt.Exists("S") Then sOption = "SIZE"
If oOpt.Exists("W") Then sOption = "WIDTH"
If oOpt.Exists("H") Then sOption = "HEIGHT"
If oOpt.Exists("C") Then sOption = "COLOR"
End Sub
'-------------------------------------------------------------------------------
' メイン関数
'-------------------------------------------------------------------------------
Sub MainFunction
'---------------------------------------------------------------------------
' コマンドライン解析
'---------------------------------------------------------------------------
GetCommandLine
'---------------------------------------------------------------------------
' JPGファイルのオープン
'---------------------------------------------------------------------------
Dim i, j, a, b
Do Until oJPG.AtEndOfStream
a = oJPG.ReadPack("S")
Select Case a(0)
Case MARK_SOF0
b = oJPG.ReadPack("SCSSC")
Select Case sOption
Case "SIZE"
WScript.Echo sFilename & vbTab & b(3) & vbTab & b(2)
Exit Do
Case "WIDTH"
WScript.Echo sFilename & vbTab & b(3)
Exit Do
Case "HEIGHT"
WScript.Echo sFilename & vbTab & b(2)
Exit Do
Case "COLOR"
WScript.Echo sFilename & vbTab & GetColor(b(4))
Exit Do
Case Else
WScript.Echo " IMAGE WIDTH: " & b(3)
WScript.Echo " IMAGE HEIGHT: " & b(2)
WScript.Echo " COLOR TYPE: " & b(4) & ", " & GetColor(b(4))
WScript.Echo " FRAME FORMAT: BASELINE"
End Select
oJPG.Seek b(0) - 8
Case MARK_SOF2
b = oJPG.ReadPack("SCSSC")
Select Case sOption
Case "SIZE":
WScript.Echo sFilename & vbTab & b(3) & vbTab & b(2)
Exit Do
Case "WIDTH"
WScript.Echo sFilename & vbTab & b(3)
Exit Do
Case "HEIGHT"
WScript.Echo sFilename & vbTab & b(2)
Exit Do
Case "COLOR"
WScript.Echo sFilename & vbTab & GetColor(b(4))
Exit Do
Case Else
WScript.Echo " IMAGE WIDTH: " & b(3)
WScript.Echo " IMAGE HEIGHT: " & b(2)
WScript.Echo " COLOR TYPE: " & b(4) & ", " & GetColor(b(4))
WScript.Echo " FRAME FORMAT: PROGRESSIVE"
End Select
oJPG.Seek b(0) - 8
Case MARK_DHT
b = oJPG.ReadPack("S")
oJPG.Seek b(0) - 2
Case MARK_SOI
Case MARK_EOI
Case MARK_SOS
b = oJPG.ReadPack("S")
oJPG.Seek b(0) - 2
Exit Do
Case MARK_DQT
b = oJPG.ReadPack("S")
oJPG.Seek b(0) - 2
Case MARK_APP0
b = oJPG.ReadPack("SLCSCSSCC")
If b(1) <> &H4A464946 Or b(2) <> 0 Then
WScript.Echo "ファイル " & sFilename & " は JPG 形式ではありません!!"
Exit Do
End If
Select Case sOption
Case "SIZE":
Case "WIDTH"
Case "HEIGHT"
Case "COLOR"
Case Else
WScript.Echo " FILENAME: " & sFilename
WScript.Echo " VERSION: " & Hex(b(3))
WScript.Echo " RESOLUTION UNIT: " & b(4) & ", " & GetUnit(b(4))
WScript.Echo " X RESOLUTION: " & b(5)
WScript.Echo " Y RESOLUTION: " & b(6)
WScript.Echo " THUMBNAIL WIDTH: " & b(7)
WScript.Echo "THUMBNAIL HEIGHT: " & b(8)
End Select
If b(0) > 16 Then
oJPG.Seek b(0) - 16
End If
Case MARK_APP1
b = oJPG.ReadPack("S")
oJPG.Seek b(0) - 2
Case MARK_APP2
b = oJPG.ReadPack("S")
oJPG.Seek b(0) - 2
Case Else
WScript.Echo "未定義チャンク:" & Hex(a(0)) & "h"
Exit Do
End Select
Loop
oJPG.Close
End Sub
'-------------------------------------------------------------------------------
' COLORタイプを返す
'-------------------------------------------------------------------------------
Function GetColor(val)
Select Case val
Case 1: GetColor = "Grayscale"
Case 3: GetColor = "Color (YCbCr)"
Case 4: GetColor = "Color (CMYK)"
End Select
End Function
'-------------------------------------------------------------------------------
' UNITタイプを返す
'-------------------------------------------------------------------------------
Function GetUnit(val)
Select Case val
Case 0: GetUnit = "none"
Case 1: GetUnit = "dot/inch"
Case 2: GetUnit = "dot/cm"
End Select
End Function
</script>
</job>
</package>
CommonLibrary.VBS(詳しくはコチラ)
CommonLibrary.VBS
'-------------------------------------------------------------------------------
' 整数を 16 進数文字列に変換する。桁指定付き
'-------------------------------------------------------------------------------
Function DECtoHEX(n, width)
DECtoHEX = Right("00000000" & Hex(n), width)
End Function
'-------------------------------------------------------------------------------
' 三項演算子
'-------------------------------------------------------------------------------
Function Iif(bFlag, x, y)
If bFlag Then
Iif = x
Else
Iif = y
End If
End Function
'-------------------------------------------------------------------------------
' ファイルシステムオブジェクトのラッパークラス
'-------------------------------------------------------------------------------
Class FileSystemObject
'---------------------------------------------------------------------------
' メンバ変数
'---------------------------------------------------------------------------
Private oFS
'---------------------------------------------------------------------------
' コンストラクタ
'---------------------------------------------------------------------------
Private Sub Class_Initialize
Set oFS = CreateObject("Scripting.FileSystemObject")
End Sub
'---------------------------------------------------------------------------
' デストラクタ
'---------------------------------------------------------------------------
Private Sub Class_Terminate
Set oFS = Nothing
End Sub
'---------------------------------------------------------------------------
' ファイルの存在チェック
'---------------------------------------------------------------------------
Public Function FileExists(sPath)
FileExists = oFS.FileExists(sPath)
End Function
'---------------------------------------------------------------------------
' 絶対パスを返す
'---------------------------------------------------------------------------
Public Function GetAbsolutePathName(sPath)
GetAbsolutePathName = oFS.GetAbsolutePathName(sPath)
End Function
'---------------------------------------------------------------------------
' ディレクトリ名を返す
'---------------------------------------------------------------------------
Public Function GetParentFolderName(sPath)
GetParentFolderName = oFS.GetParentFolderName(sPath)
End Function
'---------------------------------------------------------------------------
' ベース名を返す
'---------------------------------------------------------------------------
Public Function GetBaseName(sPath)
GetBaseName = oFS.GetBaseName(sPath)
End Function
'---------------------------------------------------------------------------
' 拡張子を返す
'---------------------------------------------------------------------------
Public Function GetExtensionName(sPath)
GetExtensionName = oFS.GetExtensionName(sPath)
End Function
End Class
'---------------------------------------------------------------------------
' バイナリファイルを取り扱う自作クラス
'---------------------------------------------------------------------------
Class BinaryFile
'---------------------------------------------------------------------------
' メンバ変数
'---------------------------------------------------------------------------
Private oST
'-----------------------------------------------------------------------
' コンストラクタ
'-----------------------------------------------------------------------
Private Sub Class_Initialize
Set oST = CreateObject("ADODB.Stream")
End Sub
'-----------------------------------------------------------------------
' デストラクタ
'-----------------------------------------------------------------------
Private Sub Class_Terminate
Set oST = Nothing
End Sub
'-----------------------------------------------------------------------
' ファイルオープン
'-----------------------------------------------------------------------
Sub Open(sFilename)
oST.Type = adTypeBinary
oST.Open
oST.LoadFromFile(sFilename)
End Sub
'-----------------------------------------------------------------------
' ファイルクローズ
'-----------------------------------------------------------------------
Sub Close
oST.Close
End Sub
'-----------------------------------------------------------------------
' 16進数変換
'-----------------------------------------------------------------------
Private Function Bin2Hex(val)
Bin2Hex = Right("0" & Hex(AscB(val)), 2)
End Function
'-----------------------------------------------------------------------
' ファイルの読み出し
'-----------------------------------------------------------------------
Function ReadPack(sFormat)
Dim i, n, str
Dim a()
n = Len(sFormat)
ReDim a(n - 1)
For i = 1 To n
Select Case Mid(sFormat, i, 1)
Case "c", "C"
str = Bin2Hex(oST.Read(1))
Case "s"
str = Bin2Hex(oST.Read(1))
str = Bin2Hex(oST.Read(1)) & str
Case "S"
str = Bin2Hex(oST.Read(1))
str = str & Bin2Hex(oST.Read(1))
Case "l"
str = Bin2Hex(oST.Read(1))
str = Bin2Hex(oST.Read(1)) & str
str = Bin2Hex(oST.Read(1)) & str
str = Bin2Hex(oST.Read(1)) & str
Case "L"
str = Bin2Hex(oST.Read(1))
str = str & Bin2Hex(oST.Read(1))
str = str & Bin2Hex(oST.Read(1))
str = str & Bin2Hex(oST.Read(1))
End Select
a(i - 1) = CLng("&H" & str)
Next
ReadPack = a
End Function
'-----------------------------------------------------------------------
' シーク
'-----------------------------------------------------------------------
Sub Seek(nSize)
oST.Position = oST.Position + nSize
End Sub
'-----------------------------------------------------------------------
' EOS
'-----------------------------------------------------------------------
Function AtEndOfStream()
AtEndOfStream = oST.EOS
End Function
End Class
実行結果
引数なしで実行するとヘルプメッセージが表示される。
BMPinfo.WSF の実行結果(引数なしで実行した場合)
BMP ファイルの情報を表示します。
BMPINFO(.WSF) (オプション) [ファイル名(.BMP)]
<オプション>
/S 画像ファイルの横幅と高さを示します。
/W 画像ファイルの横幅を示します。
/H 画像ファイルの高さを表示します。
/D 画像ファイルの深さを表示します。
/P 画像ファイルのパレットを表示します。
PNGinfo.WSF の実行結果(引数なしで実行した場合)
PNG ファイルの情報を表示します。
PNGINFO(.WSF) (オプション) [ファイル名(.PNG)]
<オプション>
/S 画像ファイルの横幅と高さを表示します。
/W 画像ファイルの横幅を示します。
/H 画像ファイルの高さを表示します。
/D 画像ファイルの深さを表示します。
/C 画像ファイルのカラータイプを表示します。
/P 画像ファイルのパレットを表示します。
JPGinfo.WSF の実行結果(引数なしで実行した場合)
JPGファイルの情報を表示します。
JPGINFO(.WSF) (オプション) [ファイル名(.JPG)]
<オプション>
/S 画像ファイルの横幅と高さを表示します。
/W 画像ファイルの横幅を示します。
/H 画像ファイルの高さを表示します。
/C 画像ファイルのカラータイプを表示します。
ファイル名のみを指定して実行すると詳細情報が表示される。
JPGinfo.WSF の実行結果(ファイル名のみを指定した場合)
FILENAME: 047_001.JPG
VERSION: 101
RESOLUTION UNIT: 0, none
X RESOLUTION: 1
Y RESOLUTION: 1
THUMBNAIL WIDTH: 0
THUMBNAIL HEIGHT: 0
IMAGE WIDTH: 1125
IMAGE HEIGHT: 1600
COLOR TYPE: 1, Grayscale
FRAME FORMAT: PROGRESSIVE
オプションは複数のファイルの情報を羅列したいときに用いる。以下はコマンドラインから
@for %I in (*.jpg) do @jpginfo %I /S
と入力した場合である。
JPGinfo.WSF の実行結果(オプション /S を指定した場合)
047_001.JPG 1125 1600
047_002-003.JPG 2250 1600
047_004-005.JPG 2250 1600
047_006-007.JPG 2250 1600
047_008-009.JPG 2250 1600
047_010-011.JPG 2250 1600
047_012-013.JPG 2250 1600
047_014.JPG 1125 1600