邱海棠 2022-08-12 18:48 采纳率: 0%
浏览 38

asp图片压缩处理时,遇到损坏的图片导致程序报错,如何跳过问题图片继续处理其他图片?

问题是这样的:客户要求网页访问速度再快一点,我只能从图片大小入手,于是写了一段代码将目录下的原图全部压缩成小图【我是用的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

文件夹中的图片是这样的:

img

img

本来是想通过拿到图片大小来判断跳过这类无效图片,或者通过宽高,或者通过返回的Err.Number<>0来判断,但是发现不对图片进行Open的时候是无法取得这些相关信息的,而报错恰恰就出现在Open那一行,一下就陷入循环无解了。

我想要实现的就是当遍历文件夹中的图片,进行压缩处理的时候,如果这个图片有问题(图片无法访问,无法打开,或者大小小于70字节的【大多数有问题的图片都是65、62、64字节左右】),那么就直接跳过当前循环,进入下一张图片的压缩处理。

有没有人能帮我解决一下这个问题呢?

  • 写回答

2条回答 默认 最新

  • 烟雨龙升 2022-08-12 18:58
    关注

    捕获异常自己处理continue?

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月12日

悬赏问题

  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥20 白日门传奇少一个启动区服和启动服务器的快捷键,东西都是全的 , 他们说套一个出来就行了 但我就是弄不好,谁看看,
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数