You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PIL读取自制TIFF图片时触发UnicodeDecodeError问题

解决自制TIFF文件读取的UnicodeDecodeError及保存逻辑问题

一、修复TIFF保存逻辑

你的保存代码存在三个核心问题,导致生成的TIFF文件格式不规范:

  1. 未以二进制模式打开.dat文件,文本模式读取二进制数据会破坏内容
  2. numpy.fromfile读取的是一维数组,需恢复为模拟器生成的二维形状
  3. PIL对浮点型TIFF的支持不完善,建议用专业库或转换为标准图像类型

修复后的保存代码

import numpy as np
import tifffile  # 需先安装:pip install tifffile

# 1. 二进制模式读取.dat文件
with open("image.dat", "rb") as f:
    # 替换dtype和宽高为模拟器实际参数(比如float32,宽W高H)
    raw_data = np.fromfile(f, dtype=np.float32)
    # 恢复为二维数组,注意形状顺序为(高度, 宽度)
    image_array = raw_data.reshape((H, W))

# 2. 用tifffile保存标准浮点TIFF(推荐,支持浮点数组原生存储)
tifffile.imwrite("output.tiff", image_array)

# 若需兼容普通图片查看器,可转换为uint8类型(需先归一化数值到0-255范围)
# image_normalized = (image_array - image_array.min()) / (image_array.max() - image_array.min()) * 255
# image_uint8 = image_normalized.astype(np.uint8)
# from PIL import Image
# Image.fromarray(image_uint8).save("output_uint8.tiff")

二、解决读取时的UnicodeDecodeError

从报错回溯可以看出,问题出在sif_parser插件——它错误地将你的TIFF文件识别为SIF格式,尝试用UTF-8解码文件头部,导致解码失败。

解决方案1:强制PIL使用TIFF解码器

打开文件时指定格式参数,绕过错误的插件:

import numpy as np
from PIL import Image

filename = r"C:\Users\cloud-user\Desktop\NonPretentious\test.tiff"
# 指定仅用TIFF格式解码器
with Image.open(filename, formats=('TIFF',)) as img:
    array = np.array(img)

解决方案2:卸载无用的sif_parser插件

如果不需要处理SIF格式文件,直接卸载该插件即可避免冲突:

pip uninstall sif_parser

内容的提问来源于stack exchange,提问作者esquisilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:17:31