ImageMagick 有原生格式吗?

Does ImageMagick have a native format?

我正在使用 PHP Imagick 扩展程序分几个步骤创建图像。

我想将中间结果缓存到磁盘。

有没有我可以使用的格式来保留所有频道,最好还保留设置?

$i = new Imagick();
$i->setImagecolorspace();
$i->compositeImage(...);
$i->setImageBackgroundColor(...);

$i->setImageFormat(???);
$i->writeImage('cache.im');

$i2 = new Imagick();
$i2->readImage('cache.im');

现在 $i2 应该是与 $i 完全相同的图像。

正如 Paul 所说,MPC 基本上是文件的内存转储,分为两部分 - 第一,header 包括所有元数据,第二,像素 - 未编码和未压缩,因此可以无需任何 CPU 努力直接读入内存。

因此,例如:

convert -size 4x4 xc:white a.mpc

产量

-rw-------  1 mark  staff  128 23 Sep 09:29 a.cache     <--- the pixel array
-rw-r--r--  1 mark  staff  357 23 Sep 09:35 a.mpc       <--- the header and metadata

其中 a.mpc 包含

id=MagickCache
magick-signature=4026865107
class=DirectClass  colors=0  matte=False
columns=4  rows=4 depth=16
colorspace=sRGB
page=4x4+0+0
rendering-intent=Perceptual
gamma=0.454545
red-primary=0.64,0.33  green-primary=0.3,0.6  blue-primary=0.15,0.06
white-point=0.3127,0.329
date:create=2015-09-23T09:35:05+01:00
date:modify=2015-09-23T09:35:05+01:00

a.cache包含

xxd -g4 a.cache
0000000: ffffffff ffff0000 ffffffff ffff0000  ................
0000010: ffffffff ffff0000 ffffffff ffff0000  ................
0000020: ffffffff ffff0000 ffffffff ffff0000  ................
0000030: ffffffff ffff0000 ffffffff ffff0000  ................
0000040: ffffffff ffff0000 ffffffff ffff0000  ................
0000050: ffffffff ffff0000 ffffffff ffff0000  ................
0000060: ffffffff ffff0000 ffffffff ffff0000  ................
0000070: ffffffff ffff0000 ffffffff ffff0000  ................

另一种保留所有元数据的格式是 MIFF 格式。你会像这样使用它:

convert -size 4x4 xc:white MIFF:a

产生这个:

-rw-r--r--   1 mark  staff     439 23 Sep 09:37 a

看起来像这样:

more a
id=ImageMagick  version=1.0
class=DirectClass  colors=0  matte=False
columns=4  rows=4  depth=16
colorspace=sRGB
page=4x4+0+0
rendering-intent=Perceptual
gamma=0.454545
red-primary=0.64,0.33  green-primary=0.3,0.6  blue-primary=0.15,0.06
white-point=0.3127,0.329
date:create=2015-09-23T09:37:04+01:00
date:modify=2015-09-23T09:37:04+01:00
^L
:^Z<FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF>
<FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF>
<FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF>
<FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF><FF>

MIFF 格式的一个很好的特点是它是 "streaming" 这意味着您可以 append/concatenate 任意数量的图像放在一个文件中。

需要注意的一个因素...不建议将这些格式用于 long-term 存储,因为它们不能保证在 ImageMagick 版本或平台之间兼容。