python - 如何将文件夹下的所有bytes文件转换为图片

标签 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")

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

最佳答案

如果您使用的是不错的(即 Unix/Linux/macOS)平台,并且使用 GNU Parallel 和 < 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 结尾的文件并行运行“一些东西”,所以再看一下,它是:

parallel 'some stuff' ::: *.bin

什么是“一些东西”?好吧,请注意 {} 是我们当前正在处理的文件的简写,因此它正在执行以下操作:

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

关于python - 如何将文件夹下的所有bytes文件转换为图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47457862/

相关文章:

python - Django 模型 - 在类中混合模型字段和实例属性

python - 如何用括号外的逗号分割字符串?

python - Python 中字符更改时拆分

php - 在 Laravel 注册中上传图片

python - 将方法 python 替换为多个值

python - 如何在 tox 中创建特定于架构的环境

java - 处理大量大型 jpg

Java ImageIO.write 正在对灰度图像进行着色

python-2.7 - 读取、处理和显示 .EXR 格式图像中的像素

python - Collectstatic 命令在 Django 1.4 中不可用