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

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

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

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

答案1

使用以下convert命令:

convert input.jpg -type Grayscale -colorspace Gray -colors 255 -compress None BMP3:output.bmp

convert用。。。来代替magick如果您的 ImageMagick 安装不包含convert

以脚本形式实现自动化:

#!/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

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

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

convert "$from" \
  -gravity center -resize 600x800^ -extent 600x800 \
  -type Grayscale -colorspace Gray -colors 255 -compress None BMP3:"$to"

解释

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

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

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

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

调整大小选项的文档:-gravity(必须先去-extent!)-resize-extent

相关内容