解决批量图像处理过程中: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

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of