【问题标题】:How to catch libpng error bad adaptive filter in PyQt5如何在 PyQt5 中捕获 libpng 错误错误的自适应滤波器
【发布时间】:2020-03-18 13:53:52
【问题描述】:

我有一个同时显示的图片列表。它们都在 for 循环中被拾取并添加到列表中。

很遗憾,有些 PNG 已损坏。我无法提前知道哪些已损坏,也没有机会转换此类 PNG。

必须有一种方法可以忽略错误的 PNG 并跳过它们。

目前我的代码如下所示:

for file in os.listdir(path):
        # checking if file is png format
        if file.endswith('.png'):
            pic             = os.path.join(self.path_selected, file)
            img_label       = qtw.QWidget()
            pixmap          = qtg.QPixmap(pic).scaledToWidth(img_width)

            img_label.setPixmap(pixmap)
            self.img_mosaique.layout().addWidget(img_label, img_row_count, img_col_count)

            # Adding paths of images to a list
            self.img_mosaique.set_image_path(pic)

正如你所看到的,目前我也在添加错误的图片。

据我所知,libpng 不会抛出任何异常。我找到了使用它的解决方案

try:
    Image.open(path).tobytes()
except IOError:
    print('detect error img %s' % path)
    continue

来源:libpng warning: Ignoring bad adaptive filter type

我无法使用此解决方案。

【问题讨论】:

    标签: python error-handling pyqt pyqt5 png


    【解决方案1】:

    出于效率原因,Qt 不使用异常来指示失败,而是使用其他方式,在 QPixmap 加载损坏的图像的情况下,这将返回一个空 QPixmap,因此您只需验证这一点。

    for file in os.listdir(path):
        if file.endswith(".png"):
            pic = os.path.join(self.path_selected, file)
            img_label = qtw.QWidget()
            pixmap = qtg.QPixmap(pic)
            if pixmap.isNull():
                continue
            img_label.setPixmap(pixmap.scaledToWidth(img_width))
            self.img_mosaique.layout().addWidget(img_label, img_row_count, img_col_count)
            self.img_mosaique.set_image_path(pic)
    

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2014-09-03
      • 1970-01-01
      • 2020-07-15
      • 2014-03-04
      • 2013-03-15
      • 2013-08-17
      • 2018-07-24
      • 2012-02-14
      相关资源
      最近更新 更多