解决批量图像处理过程中:OSError: image file is truncated

2024-03-04 10:58

本文主要是介绍解决批量图像处理过程中:OSError: image file is truncated,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:问题描述:

在进行图像处理过程中,批量读取图像进行处理的时候,遇到中间某个图像损坏,导致处理无法进行下去。并伴随着OSError: image file is truncated的异常。

字面自已,图像被截断,损坏,无法完成正常的读取。


2:问题分析

错误发生的代码位于python的site-package文件夹内,代码文件为 ImageFile.py 。具体代码:

    
import io
import struct
import sys
import warningsfrom . import Image
from ._util import isPathMAXBLOCK = 65536SAFEBLOCK = 1024 * 1024LOAD_TRUNCATED_IMAGES = False
"""Whether or not to load truncated image files. User code may change this."""ERRORS = {-1: "image buffer overrun error",-2: "decoding error",-3: "unknown error",-8: "bad configuration",-9: "out of memory error",
}
"""Dict of known error codes returned from :meth:`.PyDecoder.decode`."""        try:# FIXME: This is a hack to handle TIFF's JpegTables tag.prefix = self.tile_prefixexcept AttributeError:prefix = b""for decoder_name, extents, offset, args in self.tile:decoder = Image._getdecoder(self.mode, decoder_name, args, self.decoderconfig)try:seek(offset)decoder.setimage(self.im, extents)if decoder.pulls_fd:decoder.setfd(self.fp)status, err_code = decoder.decode(b"")else:b = prefixwhile True:try:s = read(self.decodermaxblock)except (IndexError, struct.error) as e:# truncated png/gifif LOAD_TRUNCATED_IMAGES:breakelse:raise OSError("image file is truncated") from eif not s:  # truncated jpegif LOAD_TRUNCATED_IMAGES:breakelse:raise OSError("image file is truncated "f"({len(b)} bytes not processed)")

从上述代码可以看出,

LOAD_TRUNCATED_IMAGES = False,此时如果读取的图像损坏,则会执行如下代码:
                     while True:try:s = read(self.decodermaxblock)except (IndexError, struct.error) as e:# truncated png/gifif LOAD_TRUNCATED_IMAGES:breakelse:raise OSError("image file is truncated") from eif not s:  # truncated jpegif LOAD_TRUNCATED_IMAGES:breakelse:raise OSError("image file is truncated "f"({len(b)} bytes not processed)")
        从这段代码可以看出,只要LOAD_TRUNCATED_IMAGES为False,则总会抛出OSError: image file is truncated的异常。这就是无法跳过损坏图片进行继续处理的原因。

3:解决办法:   

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

如果想要跳过损坏图像进行接下来的图像操作,则需要将LOAD_TRUNCATED_IMAGES的值置为True。具体操作在代码开头添加如上两行代码。

这篇关于解决批量图像处理过程中:OSError: image file is truncated的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772959

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定