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

如何使用Python PIL库保存16位PGM格式图像?

如何用Python PIL库保存16位PGM图像?

问题分析

你之前的尝试存在几个关键问题:

  1. 直接保存或指定bits=16无效:原图是8位灰度模式(L),PIL不会自动将8位的0-255数值范围扩展到16位的0-65535,只是用16位容器存储8位数据,因此GIMP仍识别为8位图像。
  2. numpy数组处理错误:image.getdata()返回一维像素序列,转成数组后是一维结构,用Image.fromarray生成的图像尺寸异常;同时未正确指定图像模式,导致保存时触发格式识别错误。

正确实现代码

from PIL import Image
import numpy as np

# 读取PNG并转为8位灰度模式(若原图是RGB,先转灰度)
img = Image.open("test.png").convert("L")

# 将8位数据转换为16位,并缩放数值范围至0-65535
# 257 = 65535 / 255,刚好将0-255映射到0-65535
img_16bit_array = np.array(img, dtype=np.uint16) * 257

# 从16位数组创建图像,指定模式为"I;16"(16位无符号灰度)
img_16bit = Image.fromarray(img_16bit_array, mode="I;16")

# 保存为16位PGM
img_16bit.save("test_16bit.pgm")

关键说明

  • 模式指定:I;16是PIL中16位无符号灰度图像的标准模式,确保保存时生成16位PGM格式。
  • 数值范围缩放:必须将8位的0-255映射到16位的0-65535,否则即使是16位格式,实际有效数据仍为8位,工具会识别为8位图像。
  • 数组形状:直接用np.array(img)保留原图像的二维结构(高×宽),避免生成尺寸异常的图像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:26:07