fenhanxue 发表于 2017-5-2 23:54:29

如何判断图片文件是否损坏?【已解决】

本帖最后由 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()

haijie1223 发表于 2017-5-3 07:51:40

把损坏的jpg打包上来几个

fenhanxue 发表于 2017-5-3 09:35:00

回复 2# haijie1223

haijie1223 发表于 2017-5-3 10:52:27

回复 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

cfanpc 发表于 2017-5-3 14:38:07

回复 4# haijie1223


    读取文件格式读取错误就是损坏那文件多怎么测试

haijie1223 发表于 2017-5-3 18:04:13

回复 5# cfanpc


    文件再多也是这么测试。。。和文件多少有什么关系

fenhanxue 发表于 2017-5-3 22:08:48

回复 6# haijie1223


    发哥有没其他办法啊,感觉这种效率不高啊

haijie1223 发表于 2017-5-3 22:46:48

回复 7# fenhanxue


    想要效率多高啊,你把循环放到gdi里面啊。除了gdi,暂时没想到其他办法。

kk_lee69 发表于 2017-5-4 02:19:54

本帖最后由 kk_lee69 于 2017-5-4 02:30 编辑

回复 1# fenhanxue

我覺得這個問題有幾個地方 要先釐清楚

壞掉的定義是??

我只知道 每種圖片 其實都有其 開頭..... PNG 與 JPG 就不同.....
如果用二禁制開頭判斷呢??

圖片 出現一半 被切掉了那算壞掉嗎??
圖片有出現但是檔案大小是 500MB那算壞掉嗎??

如果你經常救援 硬碟上的檔案 你就會發現很多這種圖片 呵呵

haijie1223 发表于 2017-5-4 07:30:54

回复 9# kk_lee69


    文件头这个方法我看到过,不过不知道靠谱不。

fenhanxue 发表于 2017-5-4 12:27:04

感觉文件头的效率更高

参考连接:
http://autoitx.com/forum.php?mod=viewthread&tid=31442&highlight=%CE%C4%BC%FE%CD%B7

fenhanxue 发表于 2017-5-4 12:27:40

回复 9# kk_lee69


    的确,万分感谢啦

1361739590 发表于 2017-5-4 12:39:15

下面连接是登入状态。
参考连接:
http://www.autoitx.com/forum.php?mod=viewthread&tid=31442&highlight=%CE%C4%BC%FE%CD%B7%D5%EC%B2%E2

haijie1223 发表于 2017-5-9 13:36:58

回复 12# fenhanxue
20000个文件,不到10s,不知道你想要多么快的效率。另外抛开效率不说,你用文件头判断一下,我上传附件中的文件,是好的还是坏的。


fenhanxue 发表于 2017-5-9 20:08:04

回复 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
查看完整版本: 如何判断图片文件是否损坏?【已解决】