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

为何用PIL生成的横竖尺寸图像字节数存在差异?

问题

我尝试使用PIL生成随机图像:

import numpy
from PIL import Image

a = numpy.random.rand(48,84)
img = Image.fromarray(a.astype('uint8')).convert('1')
print(len(img.tobytes()))

这段代码的输出为528。当我将numpy数组的尺寸互换,改为:

a = numpy.random.rand(84,48)

输出变为504。明明两个numpy数组的总元素数一致,为何图像的字节数会不同?

解答

核心原因是PIL处理1位二进制图像时,会对每行的字节数做8位对齐——每行的像素数会向上取整到8的倍数,不足的部分用0填充,最终按对齐后的字节数计算总大小。

具体计算:

  • 第一种情况:图像尺寸为48行 × 84列
    每行84个像素,转换为字节数:84 ÷ 8 = 10.5,向上取整为11字节(8×10=80,剩余4个像素需额外1字节存储)
    总字节数:48 × 11 = 528,与代码输出一致。
  • 第二种情况:图像尺寸为84行 × 48列
    每行48个像素,48 ÷ 8 = 6,刚好是8的倍数,无需填充
    总字节数:84 × 6 = 504,与代码输出一致。

总像素数相同,但每行像素数不同导致行对齐后的单行列字节数有差异,最终总字节数就不一样了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:12:43