使用Python创建的pbmfile仅在复制并粘贴到新textfi中时有效

2024-03-29 05:13:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当我创建一个.pbm格式的随机图像(下面的代码)并将结果输出到一个.pbm文件中时,该文件似乎已损坏(例如无法使用GIMP打开)。但是,如果我用文本编辑器(例如记事本)打开文件,并将内容复制到手动创建的新文本文件中,就可以了。你知道吗

我还尝试将图像输出为.txt并手动将其更改为.pbm,如果不手动创建新文本文件并复制和粘贴内容,也无法工作。我还注意到,与手动创建的具有相同内容的文本文件相比,Python创建的文本文件的大小更大(大约是两倍)。你知道吗

你们知道吗?为什么用python创建的.txt文件和手工创建的具有相同内容的文件有何不同?你知道吗

非常感谢!你知道吗

.pbm文件在windows命令行中使用以下命令创建:

python random_image 20 10 > image.pbm

使用的代码:

import random
import sys

width = int(sys.argv[1]) #in pixel
height = int(sys.argv[2]) #in pixel

def print_image(width, height):

    image=[[" " for r in range(height)] for c in range(width)]

    print("P1 {} {}".format(width, height))

    for r in range(height):
        for c in range(width):
            image[c][r]=random.getrandbits(1)
            print (image [c][r], end='')
        print()

print_image(width, height) 

Tags: 文件in图像image内容forsysrange
1条回答
网友
1楼 · 发布于 2024-03-29 05:13:40

我自己测试过代码。我不确定复制和粘贴是如何为您工作的(它对我不起作用),但您的代码似乎产生了类似的结果

P1 5 5
01101
01100
11010
01110
11000

但是pbm格式要求位之间有空格,因此要正确显示图片,必须生成如下内容

P1 5 5
0 0 1 1 1 
1 0 0 1 0 
1 1 0 1 0 
1 1 0 0 1 
1 1 1 1 1 

要得到这个结果,只需将位的print语句更改为在末尾包含空格

print (image [c][r], end=' ') # notice the space

相关问题 更多 >