当前位置: 首页 > news >正文

也遇到过 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 tracebackfrom 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()

相关文档

  • Python程序中PIL Image "image file is truncated"问题分析与解决

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 锤炼核心技能以应对编程革命
  • AndroidLogger插件使用技巧
  • JW01二氧化碳传感器(串行通信 STM32)
  • Linux:八种重定向详解(万字长文警告)
  • 低代码中实现数据映射的必要性与方案
  • 【计网】从零开始掌握序列化 --- 实现网络计算器项目
  • 细说硫酸钙防静电地板的材质结构和优势特点
  • 产品经理面试整理-常见面试问题
  • 开放原子开源基金会OPENATOM
  • 京准电钟:NTP网络校时服务器助力校园体育场馆
  • 论文 | Reframing Instructional Prompts to GPTk’s Language
  • 等保测评与企业内部安全管理体系的融合
  • 虚幻引擎游戏保存/加载存档功能
  • 23个Python在自然语言处理中的应用实例
  • TS系列(1):TS是什么?如何使用?
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Bytom交易说明(账户管理模式)
  • CODING 缺陷管理功能正式开始公测
  • cookie和session
  • crontab执行失败的多种原因
  • github从入门到放弃(1)
  • Invalidate和postInvalidate的区别
  • jquery ajax学习笔记
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • nodejs:开发并发布一个nodejs包
  • React中的“虫洞”——Context
  • yii2权限控制rbac之rule详细讲解
  • 多线程 start 和 run 方法到底有什么区别?
  • 多线程事务回滚
  • 将 Measurements 和 Units 应用到物理学
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何利用MongoDB打造TOP榜小程序
  • 使用API自动生成工具优化前端工作流
  • 微信开源mars源码分析1—上层samples分析
  • 自动记录MySQL慢查询快照脚本
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)虚拟机的安装与使用,linux系统安装
  • (12)目标检测_SSD基于pytorch搭建代码
  • (20050108)又读《平凡的世界》
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (js)循环条件满足时终止循环
  • (void) (_x == _y)的作用
  • (第二周)效能测试
  • (二十四)Flask之flask-session组件
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)基于IDEA的JAVA基础12
  • (转)Windows2003安全设置/维护
  • (转载)虚函数剖析
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .CSS-hover 的解释
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选