【问题标题】:Consistent PNG Bit output with PHP Imagick使用 PHP Imagick 实现一致的 PNG 位输出
【发布时间】:2015-08-15 12:00:49
【问题描述】:

我有以下代码来创建一个带有阴影的 png 样本(使用 FPDF 动态插入到 PDF 文件中。)

$shadowSwatch = $pm->clone() ;
$shadowSwatch->setImageBackgroundColor('#000000') ;

//Angle & Offset of Drop Shadow based on photoshop settings
$angle = deg2rad(45) ;
$xOffset = round(sin($angle) * 18, 0) ;
$yOffset = round(cos($angle) * 18, 0) ;

//Shadow Image seems to take extra time
ini_set('max_execution_time', 300) ;
$shadowSwatch->shadowImage(8, 8, $xOffset, $yOffset) ;

//Overlay original image on its shadow
$shadowSwatch->compositeImage($pm, Imagick::COMPOSITE_OVER, 0, 0) ;

//Attempts at forcing consistent output
$shadowSwatch->flattenImages();
$shadowSwatch->setImageColorspace(13);
$shadowSwatch->setImageDepth(32);
$shadowSwatch->setImageFormat('PNG32');

//Save Swatch
$shadowSwatch->writeImage($swatchDestination) ;

我的问题是我需要让它在 writeImage 上始终输出相同的位深度……但事实并非如此。当 FPDF 只能处理 32 位(每个 RGBA 8 个)时,它偶尔会输出 64 位 PNG。

任何关于从 Imagick PNG 获得一致位深度的建议将不胜感激!

【问题讨论】:

  • 可能作者对 setImageDepth(32) 感到困惑,这意味着 128 位 RGBA。尝试使用 (8) 或省略该行。
  • @GlennRanders-Pehrson 感谢您的回复。不幸的是,如果我听从你的建议,它仍然会给出不一致的位深度。通过将 setImageDepth 设置为 8 或将其删除,一些图像输出为 8 位深度,一些图像输出为 32 位深度。我通过查看 Windows 中的图像属性来检查位深度。我的问题是不一致。 8 位文件以纯黑色阴影(非常难看)而不是 fpdf 中的半反式阴影呈现。
  • 答案,但不是问题与stackoverflow.com/a/19664192/778719相同

标签: php png fpdf imagick


【解决方案1】:

我找到了答案。使用 imagick replace 在 PNG 中提供一致的位深度:

$shadowSwatch->setColorspace(13);
$shadowSwatch->setImageDepth(32);

与:

$shadowSwatch->setOption('png:color-type', 6);
$shadowSwatch->setOption('png:bit-depth', 8);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2012-01-17
    • 2021-08-11
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多