如何使用 ImageMagick 创建与 PocketBook 兼容的 BMP 文件?

and*_*bak 8 ebook bmp imagemagick

PocketBook 611是一款黑白电子书阅读器。PocketBook 611(以及推出触摸显示器之前的类似型号)使用非常特殊的 BMP 格式作为其所谓的“断电徽标”(电子墨水显示屏关闭时的壁纸)。

我可以使用 Paint.NET 创建兼容的 BMP 文件,但我想自动化我的工作流程并使用 ImageMagick。正确的 BMP 格式通过以下方式检测file

$ file good.bmp 
good.bmp: PC bitmap, Windows 3.x format, 600 x 800 x 8, resolution 3779 x 3779 px/m, 256 important colors, cbSize 481078, bits offset 1078
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 ImageMagick 创建 BMP 文件(例如convert input.jpg output.bmp)时,我在 PocketBook 上收到有关位图图像格式不兼容的错误。

and*_*bak 18

使用以下convert命令:

convert input.jpg -type Grayscale -colorspace Gray -colors 255 -compress None BMP3:output.bmp
Run Code Online (Sandbox Code Playgroud)

如果您的 ImageMagick 安装convert不包含.magickconvert

以自动化脚本形式:

convert input.jpg -type Grayscale -colorspace Gray -colors 255 -compress None BMP3:output.bmp
Run Code Online (Sandbox Code Playgroud)

该脚本可以在输入文件的目录中使用,如下所示:./pocketbook-convert.sh *.jpg *.png

如果图像已经被裁剪和旋转,ImageMagick 还可以将它们调整为正确的尺寸:

#!/usr/bin/env bash

if [[ $# -lt 1 ]]
then
    echo "Specify filename"
    exit 1
fi

while [[ $# -gt 0 ]]
do
    from="$1"
    to="${1%.*}.bmp"
    shift
    echo "'$from' -> '$to'"
    convert "$from" -type Grayscale -colorspace Gray \
        -colors 255 -compress None BMP3:"$to"
done
Run Code Online (Sandbox Code Playgroud)

解释

BMP3:需要前缀来指定BMP 格式的版本,因为默认情况下BMP使用常规,即 BMP 版本 4。另请参阅格式列表identify -list format

$ identify -list format | grep BMP
      BMP* BMP       rw-   Microsoft Windows bitmap image
     BMP2* BMP       rw-   Microsoft Windows bitmap image (V2)
     BMP3* BMP       rw-   Microsoft Windows bitmap image (V3)
     WBMP* WBMP      rw-   Wireless Bitmap (level 0) image
Run Code Online (Sandbox Code Playgroud)

identify -verbose我通过比较好文件和坏文件之间的输出找出了其他选项的确切参数。另外,这个关于 DirectClass 和 PseudoClass 的答案有助于理解颜色映射和颜色空间的情况。输出的相关部分identify -verbose

$ identify -verbose good.bmp | less
  Format: BMP3 (Microsoft Windows bitmap image (V3))
  Class: PseudoClass
  Colorspace: sRGB
  Type: Grayscale
  Colors: 250
  Compression: None
  Filesize: 481078B
Run Code Online (Sandbox Code Playgroud)

Filesize是相关的,因为使用“正确”选项,所有文件的大小几乎完全相同,约为 470 KB。

灰度 BMP 转换选项的文档:-type Grayscale-colorspace Gray-colors 255-compress None

调整大小选项的文档:(-gravity必须放在前面-extent!)-resize、、-extent