PHP Imagick 一致的 PNG Bit 输出
Consistent PNG Bit output with PHP Imagick
我有以下代码来创建带有投影的 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 获得一致位深度的建议都将不胜感激!
我找到了答案。使用 imagick replace 在 PNG 中提供一致的位深度:
$shadowSwatch->setColorspace(13);
$shadowSwatch->setImageDepth(32);
与:
$shadowSwatch->setOption('png:color-type', 6);
$shadowSwatch->setOption('png:bit-depth', 8);
我有以下代码来创建带有投影的 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 获得一致位深度的建议都将不胜感激!
我找到了答案。使用 imagick replace 在 PNG 中提供一致的位深度:
$shadowSwatch->setColorspace(13);
$shadowSwatch->setImageDepth(32);
与:
$shadowSwatch->setOption('png:color-type', 6);
$shadowSwatch->setOption('png:bit-depth', 8);