duanshan3331 2013-10-25 08:36
浏览 308
已采纳

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

I am Having PNG Image And Trying To Flop (Mirror) by imagick function of php It Gets Flop Exactly But The

Base Image is In Format 24 Bit RGB

and after Convertion It Gets To

8 Bit Pallated

. So the Main Problem is that when I use to place both images in my pdflib pages one of the image(converted) displays curly.... Original Image Original Image ----> Output After Flop(Mirror) by Imagick and Rendered in PDFlib -> Output After Flop(Mirror) by Imagick and Rendered in PDFlib ->

My Code Is Simple ---->

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

Modified Date => 29 Oct 2013 Original Image -> Size 4.68 KB Bit Depth 32 Flopped Image -> Size 7.99 KB Bit Depth 64 Automatically Changes It's Properties ORIGINAL ***ORIGINAL***

Converted ***Converted***

  • 写回答

1条回答 默认 最新

  • duanliang4009 2013-10-29 16:40
    关注

    Imagick is using the smallest format possible to save the image. Saving in these formats all produce the same image but have the sizes:

    • Palette - 3.38kB
    • RGBA 32bit - 6.14kB
    • RGBA 64bit - 8.09kB

    Saving to the smallest possible file is usually what people desire. However you can disable this in a couple of ways.

    You can tell Imagick to use the same PNG format as the source image by setting the png:format option to png00. e.g.

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

    The full options for png:format are png8, png24, png32, png48, png64, and png00.

    Alternatively you can explicitly set the image format to use when saving the PNG file, through the png:bit-depth and png:color-type e.g.

    $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");
    

    The color type values come from the libpng.h and are:

    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
    

    Both those methods produce a flopped image that is RGBA 32bit like the original image.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型