PHP / Imagick / PDFlib翻牌图像改变其位深度

时间:2013-10-25 08:36:41

标签: php imagick pdflib

我正在使用PNG图像并尝试翻转(镜像) php的想象功能 它正好获得翻牌但是

  

基本图像格式为24位RGB

并在转换后获取

  

8位Pallated

。所以主要的问题是,当我用来将两个图像放在我的 pdflib 页面中时,其中一个图像(已转换)显示为卷曲.... 原始图像 Original Image ----> 通过Imagick在Flip(镜像)之后输出并在PDFlib中渲染 - > Output After Flop(Mirror) by Imagick and Rendered in PDFlib ->

我的代码很简单---->

$im = new Imagick($background_image);
$im->flopImage();
$im->writeimage($background_image."_flop.png");

修改日期=> 2013年10月29日 原始图片 - > 大小 4.68 KB 位深度 32 翻转图像 - > 尺寸 7.99 KB 位深度 64 自动更改它的属性 的 ORIGINAL ***ORIGINAL***

转换 ***Converted***

1 个答案:

答案 0 :(得分:4)

Imagick正在使用可能的最小格式来保存图像。以这些格式保存都会生成相同的图像,但大小如下:

  • 调色板 - 3.38kB
  • RGBA 32bit - 6.14kB
  • RGBA 64bit - 8.09kB

保存到最小的文件通常是人们想要的。但是,您可以通过几种方式禁用此功能。

通过将png:format选项设置为png00,您可以告诉Imagick使用与源图像相同的PNG格式。 e.g。

$imagick = new Imagick(realpath("../images/FlopOriginal.png"));
$imagick->flopImage();
$imagick->setOption('png:format', 'png00');
$imagick->writeImage("../images/Flop.png");

png:format的完整选项是png8,png24,png32,png48,png64和png00。

或者,您可以通过png:bit-depthpng:color-type等明确设置保存PNG文件时使用的图像格式。

$imagick = new Imagick(realpath("../images/FlopOriginal.png"));
$imagick->flopImage();
$imagick->setOption('png:bit-depth', '8');
$imagick->setOption('png:color-type', 6);
$imagick->writeImage("../images/Flop.png");

颜色类型值来自libpng.h,并且是:

PNG_COLOR_TYPE_GRAY         0
PNG_COLOR_TYPE_RGB          2
PNG_COLOR_TYPE_PALETTE      3
PNG_COLOR_TYPE_GRAY_ALPHA   4
PNG_COLOR_TYPE_RGB_ALPHA    6

这两种方法都会像原始图像一样产生RGBA 32bit的失败图像。