如何将 csv(或类似)转换为 bmp(或类似)

Posted

技术标签:

【中文标题】如何将 csv(或类似)转换为 bmp(或类似)【英文标题】:How to turn a csv(or similar) to bmp(or similar) 【发布时间】:2018-02-17 07:39:39 【问题描述】:

我目前正在 Microsoft Small Basic 中做一个项目来获得一些乐趣,但我遇到了困难。

我有一个可以导出到任何格式的文件的数组,它使用字节作为其最小的东西,例如 csv。 每个像素都是一个十六进制值,FFFFFF 说,它被放入一个文件中,如下所示:

FFFFFF,000000,FFF000,000FFF
000AAA,AAAAAA,AAA000,000000

等等……

有什么办法可以把它变成图像,例如 bmp 文件或其他光栅格式。

【问题讨论】:

不多——我在网上看了看 csv 到 bmp 的转换器,但实际上没有。 所以您有一个特定任务,而您的研究包括在谷歌上搜索该特定任务的解决方案?为什么不将其分解为可管理的部分,例如 (1) 读取 CSV,(2) 创建 BMP? 【参考方案1】:

也许您可以用 NetPBM 的 PPM 格式写出您的图像,这种格式非常简单,并记录在 Wikipedia here 上。

因此,例如以下(放大的)3x2 图像:

看起来像这样(每行 # 后面的部分是我的评论):

P3                               # P3 means ASCII, 3-channel RGB
3 2                              # width=3, height=2
255                              # MAX=255, therefore 8-bit
255 0 0 0 255 0 0 0 255          # top row of pixels in RGB order
0 255 255 255 0 255 255 255 0    # bottom row of pixels in RGB order

然后您可以使用 ImageMagick,它安装在大多数 Linux 发行版上,可用于 macOS 和 Windows,在命令行中将其制作成 BMP,如下所示:

magick input.ppm output.bmp

或者,如果您想要具有对比度拉伸并调整为 800x600 的 JPEG:

magick input.ppm -resize 800x600 -auto-level output.jpg

您同样可以使用 GIMPAdobe Photoshop、可能是 MS Paint、可能是 IrfanView 进行转换,或使用 NetPBM 工具包。例如,使用 NetPBM 工具(比 ImageMagick重量轻得多),转换将是:

ppmtobmp image.ppm > result.bmp

【讨论】:

【参考方案2】:

在 Mark 的优秀答案的基础上,使用 ImageMagick 和 Unix 脚本,可以执行以下操作:

Convert your text file so as to replace commas with new lines, then add leading # to your hex values and store in an array (arr)

Then change each hex value into colors as rgb triplets in the range 0-255 integers with spaces between the 3 values and put into a new array (colors).

Find out how many rows and columns you have in your text file.

Then convert the array of colors into a PPM image and convert that image to bmp while enlarging to 300x200.

下面是对应的代码:

arr=()
colors=()
arr=(`cat test.txt | tr "," "\n" | sed 's/^/#/'`)
num=$#arr[*]
for ((i=0; i<num; i++)); do
colors[i]=`convert xc:"$arr[$i]" -format "%[fx:round(255*u.r)] %[fx:round(255*u.g)] %[fx:round(255*u.b)]" info:`
done
numrows=`cat test.txt | wc -l`
numvalues=`cat test.txt | tr "," " " | wc -w`
numcols=`echo "scale=0; $values/$rows" | bc`
echo "P3 $numcols $numrows 255 $colors[*]" | convert - -scale 400x200 result.bmp

注意:我必须在最后一个颜色字符之后在文本文件中添加一个新行,以便 wc -l 计算正确的行数。即文件必须以换行符结尾。

【讨论】:

以上是关于如何将 csv(或类似)转换为 bmp(或类似)的主要内容,如果未能解决你的问题,请参考以下文章

如何将令人烦恼的“for”循环转换为“Object.keys”例程或类似程序(JSLint)

将字符串(类似json格式)转换为对象或数组

C# 将字典转换为类似字符串的 CSV

将 SQL 插入脚本转换为 CSV 格式

node.js:将 json 数组转换为 csv

将字典转换为 namedtuple 或其他类似哈希的字典的 Pythonic 方法?