如何判断图片文件是否损坏?【已解决】
本帖最后由 fenhanxue 于 2017-5-4 12:27 编辑有大量的 .jpg 图片,其中,部分的图片是损坏掉的,即无法正常打开,请教如何借助au3判断一个图片文件是否已经损坏?
损坏的图片,双击打开是这样的:
我能想到的有这样两种判断方法,但是肯定有更高效的判断方法吧?Local $pic = '我是一张不能正常打开的图片.jpg'
;我自己能想到的办法1:
$Form1 = GUICreate("Form1", 346, 244, 192, 114)
$Pic1 = GUICtrlCreatePic($pic, 48, 40, 129, 145)
If $Pic1 = 0 Then
MsgBox(0,'','图片损坏')
Else
MsgBox(0,'','图片未损坏')
EndIf
;办法2
#Include <GDIPlus.au3>
_GDIPlus_Startup()
$test = _GDIPlus_ImageLoadFromFile($sFileName)
If $test = -1 Then
MsgBox(0,'','图片损坏')
Else
MsgBox(0,'','图片未损坏')
EndIf
_GDIPlus_Shutdown() 把损坏的jpg打包上来几个 回复 2# haijie1223
回复 3# fenhanxue #include <GDIPlus.au3>
Local $ImageFile = @ScriptDir & '\2.jpg'
_GDIPlus_Startup()
Local $hImage = _GDIPlus_ImageLoadFromFile($ImageFile)
Local $ImageType = _GDIPlus_ImageGetRawFormat($hImage)
_GDIPlus_Shutdown()
If Not $ImageType Then
ConsoleWrite('文件损坏' & @CRLF)
Else
ConsoleWrite($ImageType & @CRLF)
EndIf 回复 4# haijie1223
读取文件格式读取错误就是损坏那文件多怎么测试 回复 5# cfanpc
文件再多也是这么测试。。。和文件多少有什么关系 回复 6# haijie1223
发哥有没其他办法啊,感觉这种效率不高啊 回复 7# fenhanxue
想要效率多高啊,你把循环放到gdi里面啊。除了gdi,暂时没想到其他办法。 本帖最后由 kk_lee69 于 2017-5-4 02:30 编辑
回复 1# fenhanxue
我覺得這個問題有幾個地方 要先釐清楚
壞掉的定義是??
我只知道 每種圖片 其實都有其 開頭..... PNG 與 JPG 就不同.....
如果用二禁制開頭判斷呢??
圖片 出現一半 被切掉了那算壞掉嗎??
圖片有出現但是檔案大小是 500MB那算壞掉嗎??
如果你經常救援 硬碟上的檔案 你就會發現很多這種圖片 呵呵
回复 9# kk_lee69
文件头这个方法我看到过,不过不知道靠谱不。 感觉文件头的效率更高
参考连接:
http://autoitx.com/forum.php?mod=viewthread&tid=31442&highlight=%CE%C4%BC%FE%CD%B7 回复 9# kk_lee69
的确,万分感谢啦 下面连接是登入状态。
参考连接:
http://www.autoitx.com/forum.php?mod=viewthread&tid=31442&highlight=%CE%C4%BC%FE%CD%B7%D5%EC%B2%E2 回复 12# fenhanxue
20000个文件,不到10s,不知道你想要多么快的效率。另外抛开效率不说,你用文件头判断一下,我上传附件中的文件,是好的还是坏的。
回复 14# haijie1223
发哥我错了。。。。不要生气。。。
实际情况是这样的:Global $pic = @ScriptDir & '\1.jpg'
For $i = 1 To 100
;1 下载图片
InetGet('某一图片网址',$pic)
;2 判断图片是否格式正确
_GDIPlus_Startup()
$test = _GDIPlus_ImageLoadFromFile($sFileName)
If $test = -1 Then
MsgBox(0,'','图片损坏')
Else
MsgBox(0,'','图片未损坏')
EndIf
_GDIPlus_Shutdown()
;3 其他相关代码
;4 删除图片,继续同一个循环
FileDelete($pic);实战过程中,会卡在这一步没有反应,即 $pic 无法被删除,所以我放弃了用 _GDIPlus_ImageLoadFromFile 来判断
Next
页:
[1]
2