【问题标题】:Imagick - Make black background whiteimagick - 使黑色背景变白
【发布时间】:2013-07-31 23:32:35
【问题描述】:

我正在使用以下代码在另一张图片上屏蔽一张图片。在输出时,它给了我一张黑色背景的图像。

但我需要白色背景或透明背景。

以下是我用来遮盖另一张图像的代码。

<?PHP
$destination_path = getcwd().DIRECTORY_SEPARATOR;
$im1="image1.png";
$im2="image2.png";

$i1="$destination_path$im1";
$i2="$destination_path$im2";

$base = new Imagick($i1);
$mask = new Imagick($i2);

// Setting same size for all images
$base->resizeImage(274, 275, Imagick::FILTER_LANCZOS, 1);

// Copy opacity mask
$base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);

$base->writeImage('output.png');
header("Content-Type: image/png");

echo $base;
?>

【问题讨论】:

    标签: php transparent imagick


    【解决方案1】:

    新方法:

    flattenImages() 现在似乎已被弃用。

    如果你的 PHP imagick 模块是 3.2.0b2 或更高版本,那么目前的解决方案如下:

    $im->setImageBackgroundColor('#ffffff');
    $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
    $im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
    

    如果您的 PHP imagick 模块小于该值,则无法识别 ALPHACHANNEL_REMOVE 常量,您可以改用以下代码:

    $im->setImageBackgroundColor('#ffffff');
    $im->setImageAlphaChannel(11);
    $im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
    

    检查您的 imagick 版本

    要检查您的 imagick 模块版本,请运行以下命令:

    php --ri imagick
    

    注意:上面的命令将给出 imagick 版本和 ImageMagick 版本。您正在寻找 imagick 版本。

    【讨论】:

      【解决方案2】:

      诀窍是使用:$im = $im-&gt;flattenImages();:

      <?php
      $im = new Imagick($filename);
      
      $im->setImageBackgroundColor('#ffffff');
      $im = $im->flattenImages();
      
      $im->setImageFormat("jpeg");
      $im->setImageCompressionQuality(95);
      $im->writeImage($filename);
      

      【讨论】:

      • 它不适用于 pdf 文件。如果你使用 pdf,它会将所有页面合并为一个。
      • 非常适合我。但我一页一页打开: $im->readImage( $file . "[$page]" );
      【解决方案3】:

      试试这个:Background Color 白:

      <?php 
      $image = new imagick( "opossum.jpg" ); 
      $image->setimagebackgroundcolor("#fad888"); //Here you can mention the color
      $image->waveImage( 20, 176); 
      header( "Content-Type: image/jpeg" ); 
      echo $image;
      ?>
      

      透明背景:

      <?php 
      $im = new Imagick(); 
      $im->setBackgroundColor(new ImagickPixel('transparent')); 
      
      $im->readImage('carte_Alain2.svg'); 
      
      $im->setImageFormat("png32"); 
      
      header('Content-type: image/png'); 
      echo $im; 
      ?>
      

      还可以查看以下链接:

      http://php.net/manual/en/imagick.setbackgroundcolor.php

      【讨论】:

      • 他们没有给我白色背景,也没有创建具有透明背景的图像
      • 但它对我来说很好......如果我在我的系统中运行上面的代码! :(
      • stackoverflow.com/questions/13149812/…检查这个解决方案!
      • carte_Alain2.svg 是什么样的图像?
      • 这是一个示例,如果您愿意,可以将其更改为 PNG。
      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2018-05-14
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多