也遇到过 PIL Image “image file is truncated“的问题

背景前言

属于活久见系列,最近工作上遇了该问题!

背景:前端 APP使用 Android CameraX 的接口,拍摄并上传图片,然后 Python后端服务对图片裁剪与压缩处理。后端服务处理图片时有遇到image file is truncated的情况。还好我们前端 APP有做相关的数据埋点,以及日志收集到功能,利用这些基础设施,我们定位到了出问题的设备是一台红米,设备信息如下

我们还拿到了出异常时, APP拍摄的照片,图片确实是被损坏了。如下是图片部分的截图,跟网络上遇到该问题时是一样的,图片底部渲染不出来。

网上其它人遇到问题时,损坏的图片如下

解决问题

这里我们是尝试规避该问题的思路(这类问题想要定位到具体的原因成本会很高,大概率是手机 ROM的原因,手机硬件的原因?!)

所以我们让用户升级手机系统看是否能解决,用户升级手机系统后,持续两周观察用户的使用情况,用户手机再没有出现该类问题

PS:之前用户手机出现问题时,平均两天会出现几例

相关代码

下面的代码可用来演于 Python 用PIL,处理损坏图片是,抛出的 image file is truncated 异常(PS:使用安装 PIL库!)

复制代码
import traceback



from PIL import Image, ImageFile
import os
# 设置LOAD_TRUNCATED_IMAGES为 True 可忽略 image file is truncated 的问题
# ImageFile.LOAD_TRUNCATED_IMAGES = True

# 定义图像文件路径,视具体文件路径修改该值
filePath = "/Users/lgw/Downloads/问题图片.jpg"

# filePath = "/Users/lgw/Downloads/ok.jpg"

def check_image(filename):
    try:
        with Image.open(filename) as img:
            img.verify()  # 这将验证文件的合法性
        print(f"{filename} is a valid image.")
    except (IOError, SyntaxError) as e:
        print(f"{filename} is not a valid image or is corrupted: {e}")


check_image(filePath)

# 检查文件是否存在
if not os.path.exists(filePath):
    print(f"文件不存在: {filePath}")
else:
    print(f"文件存在: {filePath}")

    # 打开图像文件
    try:
        img = Image.open(filePath)
        print("图像成功打开")

        # 尝试显示图像(可选,用于调试)
        img.show()
        print("图像成功显示")

        # 保存图片
        img.save("save.jpg")
        print("图像成功保存为 save.jpg")
    except Exception as e:
        print(f"处理图像时发生错误: {e}")
        print("打印完整的错误堆栈:")
        traceback.print_exc()

相关文档

相关推荐
Start_Present11 分钟前
Pytorch 第十三回:神经网络编码器——自动编解码器
pytorch·python·深度学习·神经网络
互联网杂货铺12 分钟前
黑盒测试、白盒测试、集成测试和系统测试的区别与联系
自动化测试·软件测试·python·功能测试·测试工具·单元测试·集成测试
databook13 分钟前
线性模型与多分类问题:简单高效的力量
python·机器学习·scikit-learn
阿巴阿巴拉35 分钟前
Scala相关知识总结3
开发语言·python
Sapphire~1 小时前
odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘
python·ubuntu·odoo
维度攻城狮5 小时前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
简简单单做算法5 小时前
基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码
人工智能·python·深度学习·算法·分类·mediapipe·限定半径最近邻分类树
hvinsion6 小时前
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理
开发语言·python·自动化·自动化任务管理
飞飞翼7 小时前
python-flask
后端·python·flask
林九生8 小时前
【Python】Browser-Use:让 AI 替你掌控浏览器,开启智能自动化新时代!
人工智能·python·自动化