找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4631

积分

0

好友

666

主题
发表于 4 小时前 | 查看: 3| 回复: 0

从人民广场到市政府站,有一条路非常适合骑行,笔直通畅。这让我想起在技术世界里,有些古老格式的转换过程也同样直接,比如今天要讲的 macptopbm 命令。

一、什么是 macptopbm

macptopbm - 将 MacPaint 文件转换为可移植位图(Portable Bitmap)。它是 Netpbm 工具集中的一个经典命令,主要作用是将早期的 MacPaint 格式图片转换为标准的 PBM(Portable Bitmap)位图格式。

其官方手册可参考: https://man.he.net/man1/macptopbm

安装方法很简单,你可以通过系统自带的镜像源进行 yum 安装:

# 先查看属于具体什么包,这里看到属于 netpbm-progs
[root@bogon yum.repos.d]# yum provides */macptopbm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
netpbm-progs-10.79.00-7.el7.x86_64 : Tools for manipulating graphics files in netpbm supported formats
Repo        : centos
Matched from:
Filename    : /usr/bin/macptopbm

netpbm-progs-10.79.00-7.el7.x86_64 : Tools for manipulating graphics files in netpbm supported formats
Repo        : @centos
Matched from:
Filename    : /usr/bin/macptopbm
# 安装
yum install -y netpbm-progs

二、命令选项

[root@bogon yum.repos.d]# macptopbm --h
macptopbm: usage:  macptopbm [-extraskip N] [macpfile]

-extraskip  此标志用于解决从 Mac 环境传输文件到 Unix 环境时的一些问题。
            大多数传输方法会保持 Mac 文件原样,但少数方法会在 Unix 文件的开头添加 "finderinfo"(查找器信息)数据。
            这意味着在读取文件时需要额外跳过 128 个字节。需要留意的症状是:生成的 PBM 文件看起来会向一侧偏移。

如果出现这种情况,请尝试使用   -extraskip 128,如果效果仍不理想,可以尝试其他数值。
  所有标志(选项)都可以缩写为其最短的唯一前缀。

三、实战示例

1、环境准备

为了进行完整测试,我们还需安装 ImageMagick 来生成 MacPaint 格式的源文件。

sudo yum install -y ImageMagick
[root@bogon test]# ls
1604808587070.jpg
[root@bogon test]# convert 1604808587070.jpg -monochrome pbm:temp.pbm
[root@bogon test]# ls -lth
total 300K
-rw-r--r-- 1 root root 175K May 30 14:47 temp.pbm
-rw-r--r-- 1 root root 124K May 30 14:39 1604808587070.jpg
[root@bogon test]# pbmtomacp temp.pbm > output.macp
pbmtomacp: 576 of 918 input columns will be output
pbmtomacp: 720 out of 1550 input rows will be output
[root@bogon test]# ls -lth
total 348K
-rw-r--r-- 1 root root  47K May 30 14:47 output.macp
-rw-r--r-- 1 root root 175K May 30 14:47 temp.pbm
-rw-r--r-- 1 root root 124K May 30 14:39 1604808587070.jpg
  1. 转换成功标志pbmtomacp 顺利执行并生成了 output.macp 文件(大小为 47K)。
  2. 关于警告信息576 of 918 input columns... 这类提示并不是报错。这是因为原始的 MacPaint 格式对图片尺寸有严格限制(最大只支持 576x720 像素)。原图分辨率比较大,所以工具自动把图片裁剪到了 MacPaint 能容纳的最大尺寸,这是该工具的正常行为。

2、转回 PBM 格式与偏移修复

现在我们再把生成的 .macp 文件转换为 PBM:

# 再转换 pbm 格式
[root@bogon test]# macptopbm output.macp > pbmoutput.pbm
macptopbm: Input file does not start with a MacBinary header.
macptopbm: MacPaint version (at offset 0): 00 00 00 00 (valid)
macptopbm: Input file starts with valid MacPaint header.
[root@bogon test]# ls
1604808587070.jpg  output.macp  pbmoutput.pbm  temp.pbm

修复偏移问题(-extraskip 选项)

正如手册中提到的,从 Mac 系统传输某些文件到 Linux/Unix 时,可能会在文件开头多出 128 字节的 "finderinfo" 数据。这会导致图片“向一侧偏移”。此时可以使用 -extraskip 参数跳过这些多余字节。如果 128 依然不对,可以根据实际情况调整后面的数字。

# 尝试跳过前 128 个字节进行转换
[root@bogon test]# macptopbm output.macp > pbmoutput.pbm
macptopbm: Input file does not start with a MacBinary header.
macptopbm: MacPaint version (at offset 0): 00 00 00 00 (valid)
macptopbm: Input file starts with valid MacPaint header.
[root@bogon test]# ls
1604808587070.jpg  output.macp  pbmoutput.pbm  temp.pbm
[root@bogon test]# vim pbmoutput.pbm 
[root@bogon test]# macptopbm -extraskip 128 output.macp > fixed_output.pbm
macptopbm: MacPaint version (at offset 0): 00 00 00 00 (valid)
macptopbm: Input file starts with valid MacPaint header.
macptopbm: Warning: Corrupt image data.  677 rows misaligned.
[root@bogon test]# ls -lth
total 452K
-rw-r--r-- 1 root root  51K May 30 14:56 fixed_output.pbm
-rw-r--r-- 1 root root  51K May 30 14:52 pbmoutput.pbm
-rw-r--r-- 1 root root  47K May 30 14:47 output.macp
-rw-r--r-- 1 root root 175K May 30 14:47 temp.pbm
-rw-r--r-- 1 root root 124K May 30 14:39 1604808587070.jpg
[root@bogon test]#
  • macptopbm output.macp > pbmoutput.pbm 这是最基础的转换方式。它会从文件的第 0 个字节开始,按标准的 MacPaint 格式去读取数据。
  • macptopbm -extraskip 128 output.macp > fixed_output.pbm 加了 -extraskip 128 参数后,程序会先跳过文件开头的 128 个字节,然后再开始读取真正的图片信息。这个功能原本是为了解决早期从 Mac 向 Unix/Linux 传输文件时,多出来的元数据导致图片错位的问题。

你看到的警告 Warning: Corrupt image data. 677 rows misaligned.,是因为 output.macp 是由 ImageMagick 刚刚在 Linux 环境下生成的纯净标准的 MacPaint 文件,开头并没有那多余的 128 字节的冗余数据。强行加上 -extraskip 128,相当于把正常图片数据的“前半截”硬生生切掉,导致剩下的数据发生位移,macptopbm 无法正确识别每一行,所以报出“行未对齐”。

四、格式补充

生成的 .macp 是一种极其复古的位图格式(诞生于上世纪80年代)。它的核心特点就是只能保存纯黑和纯白两种颜色(即 1-bit 黑白位图),不支持任何彩色或灰度信息。因此,如果现在打开 output.macp 查看,会发现它变成了一张高对比度的黑白像素画,这正是该格式的预期效果(我在 Windows 或者 Linux 上并不能直接查看)。

参见 (SEE ALSO)
picttoppm(1), pbmtomacp(1), pbm(5)

作者 (AUTHOR)
版权所有 (C) 1988 by Jef Poskanzer。MacPaint 读取代码版权所有 (c) embed by Patrick J. Naughton ( naughton@wind.sun.com )。

五、总结

本次对 macptopbm 的测试讲解主要涉及两个软件包:一个提供 macptopbm 命令本身,另一个用于将 jpg 转换为 .macp 格式。

sudo yum install -y netpbm-progs
sudo yum install -y ImageMagick

总结来说,macptopbm 是 Linux/Unix 系统下 Netpbm 图像处理工具集 中的一个经典格式转换命令。它的核心作用和特点可以归纳为以下三点:

  1. 专属的格式转换器:主要功能是将上世纪80年代 MacPaint 软件专用的古老位图格式(.macp),转换为通用的标准 PBM(Portable Bitmap)黑白位图格式。
  2. 复古的黑白位图处理:由于 .macp 是一种极早期的图像格式,它只支持纯黑和纯白的像素点(1-bit)。因此,转换出来的图片必然是高对比度的黑白像素画。
  3. 具备数据修复能力:通过特殊的 -extraskip 参数,可以有效修复因传输过程中混入冗余元数据而导致的图片“花屏”或错位问题。

它就像是架在现代 Linux 系统与几十年前 Mac 经典绘图格式之间的一座“桥梁”。




上一篇:深入业务又会写代码:这才是 AI 时代程序员的发展方向
下一篇:锤子便签还活着?用这款油猴脚本一键导出云端笔记为Markdown
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-6-1 08:14 , Processed in 0.625168 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表