Board logo

标题: [文件操作] [已解决]批处理或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

用记事本打开图片文件,能看到图片格式:
  1. @echo off
  2. if "%~1"=="" exit /b
  3. findstr /p . "%~1" >nul && goto n
  4. set /p v=<"%~1"
  5. (if "%v%"=="塒NG" (echo png) else (
  6.   if "%v:~,5%"=="GIF89" (echo gif) else (
  7.     if "%v:~,2%"=="BM" (echo bmp) else (
  8.       findstr /n "xif JFIF" "%~1"|findstr "^1:.*JFIF ^1:.*xif">nul 2>nul&&echo jpg
  9. )))) && pause && exit /b
  10. :n
  11. echo 非 png/gif/bmp/jpg
  12. 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楼 的帖子

感谢指点。
  1. @echo off
  2. jhead.exe b.jpg >nul 2>nul
  3. if errorlevel 1 (
  4.   echo Not JPEG file.
  5. ) else (
  6.   echo JPEG file.
  7. )
复制代码

作者: 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函数
  1. PicData = GetPicType("f.bmp")
  2. If PicData(0) = 0 then
  3. WScript.Echo PicData(1) & " : " & PicData(2) & " " & PicData(3) & "x" & PicData(4)
  4. Else
  5. WScript.Echo PicData(1) & "不是图片"
  6. End If
  7. Function GetPicType(PicPath)
  8. Pix = 26.4583
  9. Type0 = "None" '未知格式
  10. Type1 = "Bitmap" '位图文件 jpg gif bmp
  11. Type2 = "MetaFile" '图元文件
  12. Type3 = "IconFile" '图标文件
  13. Type4 = "Win32-enhanced metafile" 'Win32增强型图元文件
  14. On Error Resume Next
  15. Dim Tmp(4),Pic
  16. Set Pic = LoadPicture(PicPath)
  17. Tmp(0) = Err.Number
  18. Tmp(1) = PicPath
  19. Tmp(2) = Eval("Type" & Pic.Type)
  20. Tmp(3) = Int(Pic.Width/Pix)
  21. Tmp(4) = Int(Pic.Height/Pix)
  22. GetPicType = Tmp
  23. End Function
复制代码

作者: everest79    时间: 2009-5-17 20:48

要查看exif信息,修改图片,比较详细的分类图片,可以使用wia对象
你可以在网上搜下wiaautsdk.zip
里边有详细说明与示例
这个对象需要WIA服务支持




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2