标题: [文件操作] [已解决]批处理或VBS如何识别图片文件的格式? [打印本页]
作者: Batcher 时间: 2009-5-17 15:05 标题: [已解决]批处理或VBS如何识别图片文件的格式?
我想在批处理中判断文件a.jpg是不是真正的图片文件,因为它有可能是其它格式的文件(甚至病毒、木马)修改了一下后缀名而已。
我知道用ImageMagick的identify命令可以实现,但是为了一个小小功能就去安装这个将近12MB的软件,实在是太不方便了。
如果一定要使用第三方命令行工具才能实现的话,有什么其它小巧的单行版工具吗?
论坛搜索、google搜索,均无果。望各位朋友指点迷津,多谢!
[ 本帖最后由 Batcher 于 2009-5-27 12:46 编辑 ]
作者: tireless 时间: 2009-5-17 17:30
用记事本打开图片文件,能看到图片格式:- @echo off
- if "%~1"=="" exit /b
- findstr /p . "%~1" >nul && goto n
- set /p v=<"%~1"
- (if "%v%"=="塒NG" (echo png) else (
- if "%v:~,5%"=="GIF89" (echo gif) else (
- if "%v:~,2%"=="BM" (echo bmp) else (
- findstr /n "xif JFIF" "%~1"|findstr "^1:.*JFIF ^1:.*xif">nul 2>nul&&echo jpg
- )))) && pause && exit /b
-
- :n
- echo 非 png/gif/bmp/jpg
- pause
复制代码
nconvert.exe -info 可以得到图片格式
[ 本帖最后由 tireless 于 2009-6-8 16:07 编辑 ]
作者: namejm 时间: 2009-5-17 17:51
如果仅仅是需要判断文件是不是jpg格式的文件,可以使用jhead.exe,100余K,具体介绍请看这个帖子:http://bbs.bathome.net/viewthread.php?tid=4566
作者: Batcher 时间: 2009-5-17 18:21 标题: 回复 3楼 的帖子
感谢指点。- @echo off
- jhead.exe b.jpg >nul 2>nul
- if errorlevel 1 (
- echo Not JPEG file.
- ) else (
- echo JPEG file.
- )
复制代码
作者: Batcher 时间: 2009-5-17 19:14 标题: 回复 2楼 的帖子
多谢指点。
比起ImageMagick来,nconvert确实苗条多了,不过仍然有将近1.5MB呢。所以还是采用你提供的这个批处理吧。
关于你提供的这个批处理,我有两个疑问:
1、我打开几个jpg图片,首行能看到JFIF,什么情况下能看到xif呢?
2、png图片在没有安装中文语言包的英文系统下打开会是什么样子呢,明天到公司再试试。
作者: tireless 时间: 2009-5-17 19:51 标题: 回复 5楼 的帖子
我这有些图片只有 xif(或Exif),没有 JFIF。比如这张。
nconvert 5.31 我用 upx.exe 压缩后大小是 635 KB。如果是旧版本的话体积应该会小得多,首次加入 -info 参数的版本是 2.96。
[ 本帖最后由 tireless 于 2009-5-17 19:58 编辑 ]
作者: everest79 时间: 2009-5-17 20:13
vbs 跟js都自带有这样的功能
vbs是loadpicture函数- PicData = GetPicType("f.bmp")
- If PicData(0) = 0 then
- WScript.Echo PicData(1) & " : " & PicData(2) & " " & PicData(3) & "x" & PicData(4)
- Else
- WScript.Echo PicData(1) & "不是图片"
- End If
-
-
-
- Function GetPicType(PicPath)
- Pix = 26.4583
- Type0 = "None" '未知格式
- Type1 = "Bitmap" '位图文件 jpg gif bmp
- Type2 = "MetaFile" '图元文件
- Type3 = "IconFile" '图标文件
- Type4 = "Win32-enhanced metafile" 'Win32增强型图元文件
- On Error Resume Next
- Dim Tmp(4),Pic
- Set Pic = LoadPicture(PicPath)
- Tmp(0) = Err.Number
- Tmp(1) = PicPath
- Tmp(2) = Eval("Type" & Pic.Type)
- Tmp(3) = Int(Pic.Width/Pix)
- Tmp(4) = Int(Pic.Height/Pix)
- GetPicType = Tmp
- End Function
复制代码
作者: everest79 时间: 2009-5-17 20:48
要查看exif信息,修改图片,比较详细的分类图片,可以使用wia对象
你可以在网上搜下wiaautsdk.zip
里边有详细说明与示例
这个对象需要WIA服务支持
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |