我目前正在尝试使用给定的确切大小在Python中创建BMP文件。我需要这个大小,精度低至一个字节,我在生成图像时遇到问题。要做到这一点,我使用Pillow库如下:
img = Image.new('RGB', (1, size//4), "black")
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
pixels[i,j] = (i, j, 1)
img.save("image.bmp")
size
等于1*1024*1024 = 1048576
(1MB大小计算为字节)。但是,创建的文件有点大 - 它有1048630字节。我想这是因为位图头文件,但是当我尝试从一般大小中减去标题大小时:
img = Image.new('RGB', (1, (size-54)//4), "black")
生成的文件大小为1048576 - 无处不在2个字节。
如何正确计算创建BMP文件时要提供的大小?这样的文件内容可以是随机的,对我来说无关紧要。
答案 0 :(得分:0)
假设您希望将文件大小调整为1048574字节(如果超过此值):
from PIL import Image
import os
from stat import ST_SIZE
############## Your code below ##################
size = 1*1024*1024
img = Image.new('RGB', (1, (size)//4), "black")
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
pixels[i,j] = (i, j, 1)
img.save("image.bmp")
############# Your code above ##################
image_statistics = os.stat("image.bmp")
print("Initial image size: ", image_statistics[ST_SIZE])
difference = image_statistics[ST_SIZE] - size
if difference > 0:
os.remove("image.bmp") #Delete first attempt.
img = Image.new('RGB', (1, (size - difference)//4), "black") #Regenerate
pixels = img.load() # Note: this segment is the same as the initial code.
for i in range(img.size[0]):
for j in range(img.size[1]):
pixels[i,j] = (i, j, 1)
img.save("image.bmp") #File saved with new size.
image_statistics = os.stat("image.bmp")
print("New image size: ", image_statistics[ST_SIZE])
输出:
初始图片尺寸:1048630
新图片尺寸:1048574