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
版本或平台之间兼容。
我正在使用 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
版本或平台之间兼容。