ImageMagick有原生格式吗?

时间:2015-09-23 06:31:57

标签: php imagemagick imagick

我正在几步中使用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完全相同。

1 个答案:

答案 0 :(得分:2)

正如Paul所说,它是MPC,它基本上是文件的内存转储,分为两部分 - 一部分,包括所有元数据的头部和两部分,像素 - 未编码和未压缩,因此可以直接读入内存而无需任何内容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”,这意味着你可以在一个文件中将任意数量的图像附加/连接在一起。

需要注意的一个因素是:不建议将这些格式用于长期存储,因为它们不能保证在ImageMagick版本或平台上兼容。