问题是这样的:客户要求网页访问速度再快一点,我只能从图片大小入手,于是写了一段代码将目录下的原图全部压缩成小图【我是用的asp去做的,有用到aspjpeg组件】,并保存新文件夹中,展示时就可以调用缩略图,而问题就发生在将以前的大量图片进行代码压缩的时候。因为元图片文件本身有所损坏,就导致我的程序跑不下去了。
bigFolder是我元始图片的路径
smallFolder是我压缩图片的路径
代码如下(再此代码外部还有一层用来遍历文件夹以及图片文件的for each file in files的代码,这里就不贴了):
Set Jpeg = Server.CreateObject("Persits.Jpeg")
With Jpeg
Jpeg.Open Server.MapPath(bigFolder) →报错就在这里
if Jpeg.OriginalWidth/Jpeg.OriginalHeight>1 then
Jpeg.Width=100
Jpeg.Height=int((100/Jpeg.OriginalWidth)*Jpeg.OriginalHeight)
elseif Jpeg.OriginalWidth/Jpeg.OriginalHeight<1 then
Jpeg.Width=100
Jpeg.Height=int((100/Jpeg.OriginalWidth)*Jpeg.Height)
end if
Jpeg.Sharpen 1, 130 '//设定锐化效果
Jpeg.Quality= 100'图片压缩质量最佳为100,想压的小点就设80或是70或再小
Jpeg.Save Server.MapPath(smallFolder)'保存路径
End With
Set Jpeg = Nothing
前端报错的内容如下:
Persits.Jpeg.1 错误 '80040035'
Not a JPEG file: starts with 0x7b 0x22
/wab/1.asp
文件夹中的图片是这样的:
本来是想通过拿到图片大小来判断跳过这类无效图片,或者通过宽高,或者通过返回的Err.Number<>0来判断,但是发现不对图片进行Open的时候是无法取得这些相关信息的,而报错恰恰就出现在Open那一行,一下就陷入循环无解了。
我想要实现的就是当遍历文件夹中的图片,进行压缩处理的时候,如果这个图片有问题(图片无法访问,无法打开,或者大小小于70字节的【大多数有问题的图片都是65、62、64字节左右】),那么就直接跳过当前循环,进入下一张图片的压缩处理。
有没有人能帮我解决一下这个问题呢?