【问题标题】:Set ImageMagick PNG image background color设置ImageMagick PNG图像背景颜色
【发布时间】:2011-05-23 14:47:18
【问题描述】:

我有一个 PHP 脚本来创建 PDF 文件的 PNG 缩略图,如下所示:

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("png");
$im->resizeImage(200,200,1,0);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();    
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";    
?>

返回缩略图,但背景是透明的。我想设置白色背景颜色(将 alpha 图层更改为白色)。我该怎么做?

【问题讨论】:

  • 如果你把它变成 jpg 文件而不是 png 文件?
  • 最初我尝试制作 jpg 文件...但我得到了一个黑色背景的 jpg :P :P .. 那就是我转向 png...你知道如何更改 jpg 黑色背景颜色??或者建议我如何在 png 中设置一个...
  • @AllisonC,我想在没有 GD 的情况下这样做。我第一次尝试制作 jpg,但得到了一个黑色背景的。你知道如何修复 dat 吗??
  • 我会尝试绘制一个与图像大小相同的矩形并填充它...?

标签: php imagemagick imagick


【解决方案1】:

解决方案不是在背景色中,而是在 alpha 通道中! 试试这段代码:

$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);

【讨论】:

    【解决方案2】:

    我正在做类似的事情,尽管我实际上是在将图像写入磁盘 - 当我使用您的直接输出时,它起作用了,并且我从 PDF 中获得了实际颜色。

    通过一些调试,我认为问题实际上与

    imagick::resizeImage()
    

    功能。 无论出于何种原因,当您设置所有颜色、压缩等时,resizeImage 会添加黑色背景。 我的解决方案是使用 GD 来调整大小,这样我就可以进行完整的动态调整——因为你对这样的事情不感兴趣,我会简单地使用图像采样功能。你的代码应该是这样的:

    <?php
    $file ="test.pdf";
    $im = new imagick(realpath($file).'[0]');
    $im->setCompression(Imagick::COMPRESSION_JPEG);
    $im->setCompressionQuality(80);
    $im->setImageFormat("jpeg");
    $im->sampleImage(200,200);
    // start buffering
    ob_start();
    $thumbnail = $im->getImageBlob();
    $contents =  ob_get_contents();
    ob_end_clean();    
    echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      相关资源
      最近更新 更多