如何将文件夹下的所有字节文件转换为图像

时间:2017-11-23 14:33:22

标签: python image python-2.7 numpy image-processing

import numpy
from PIL import Image
import binascii

def getMatrixfrom_bin(filename,width):
    with open(filename, 'rb') as f:
        content = f.read()
    ...
    return fh

filename = "path\bin_filename(1)"
im = Image.fromarray(getMatrixfrom_bin(filename,512))
//getMatrixfrom_bin () is a function that generates a matrix from the binary bytes
im.save("path\bin_filename(1).png")

上面的代码一次只能生成一张图片,现在我需要将路径下的所有二进制文件转换为图片,我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您使用的是 GNU Parallel ,那么您可以将所有二进制文件并行转换为PNG图像,而无需编写任何Python。 strong> ImageMagick ,安装在大多数Linux发行版上,可通过 homebrew 获得macOS。

因此,将所有以.bin结尾的文件并行转换为PNG图像的命令将是:

parallel 's=$(wc -c < {}); w=512; ((h=s/w)); convert -depth 8 -size ${w}x${h} gray:{} {.}.png' ::: *bin

如果你不熟悉它,那有点可怕,所以我会把它分解。对于以.bin结尾的所有文件,基本上它正在运行&#34;某些东西&#34; ,所以再看看它是:

parallel 'some stuff' ::: *.bin

什么是&#34;一些东西&#34; ?好吧,请注意{}是我们当前正在处理的文件的简写,所以它是这样做的:

s=$(wc -c < {})         # s=total bytes in current file, i.e. s=filesize
w=512                   # w=image width
((h=s/w))               # h=s/w, i.e. h=height in pixels of current file
convert ...

最后一行,即convert开始调用 ImageMagick 告诉它你的图像深度是8位,像素的尺寸是WxH,然后将当前文件读入将图像保存为以PNG结尾的新图像,而不是原始扩展名。简单!

当然,如果您知道宽度为500像素,高度为400像素,那么生活会更加轻松:

parallel 'convert -depth 8 -size 500x400 gray:{} {.}.png' ::: *bin