【问题标题】:How to make space between every two pixels in a pbm file(ASCII mode)如何在 pbm 文件中的每两个像素之间留出空间(ASCII 模式)
【发布时间】:2016-11-30 17:14:05
【问题描述】:

我有一个 ASCII 模式的 test.pbm 文件,其中包含如下代码:

P1
# Comment
9 9
000000000
011000000
011000000
011000000
011000000
011000010
011111110
011111110
000000000   

我想创建一个新文件“newFile.pbm”,它将在每两个像素之间包含一个空格。如下:

P1
# Comment
9 9
0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 1 0
0 1 1 1 1 1 1 1 0
0 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 

我尝试使用以下代码打开文件“test.pbm”来完成这项工作,但我遇到了很多问题,首先,它在打开.pbm时显示'IOError:无法识别图像文件',其次,不能在每两个像素之间留出空间。实际上我是 Python 的新手。我的操作系统 Linux Mint 17.3 cinamon 32 位和 Python2.7.6。请帮忙。我尝试过的代码如下:

fo=open("test.pbm",'r')  
columnSize, rowSize=fo.size
x=fo.readlines()
fn = open("newfile.pbm","w") 
for i in range(columnSize):
     for j in range(rowSize):
      fn.write(x[i][j])
fn.close()

【问题讨论】:

  • 您的文件将始终包含前 3 行?
  • @CarlesMitjans 是的

标签: python file readfile writefile pbm


【解决方案1】:

你可以这样做:

with open("test.pbm", 'r') as f:
    image = f.readlines()

with open("newfile.pbm", "w") as f:
    f.writelines(image[:3])   # rewrite the header with no change
    for line in image[3:]:    # expand the remaining lines
        f.write(' '.join(line))

【讨论】:

  • 感谢您的回答。它工作正常。如果我想更改新文件中的每个像素作为我的选择,我该怎么做?
  • 我不明白这个问题。
  • 如何读取新 pbm 文件“newfile.pbm”的每个像素?
  • 在你用f.readlines()读入文件后,你会得到一个行列表,这将是一个类似'0 1 1 0 0 0 0 1 0'的字符串。然后,您可以只拆分行 (pixels = line.split()),这将返回一个列表 (['0', '1', '1', '0', '0', '0', '0', '1', '0']),其中每个元素都可以通过索引来寻址,例如 pixels[0]pixels[2] 等等。请注意,这些仍然是str,因此您可能必须将它们转换为int
  • 你能告诉我如何查看这个 pbm 文件的图像大小吗?我使用了“image.size”,但它显示错误:打印 image.size AttributeError:'list' 对象没有属性'size'。 @萨尔
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
相关资源
最近更新 更多