【问题标题】:ImageMagick Transparent PNG BackgroundImageMagick透明PNG背景
【发布时间】:2011-12-04 20:56:56
【问题描述】:

我正在尝试拍摄这张图片,,我将其转换为 .png 文件,然后想要移除白色背景以使其透明。

我尝试运行以下命令,但没有任何运气。

    $strInputFile = 'car.png';
    $execScript = '/usr/local/bin/convert '.$strInputFile.' ';
    $execScript .= "-transparent white car-new.png"; 
    $output = shell_exec($execScript);

我做错了吗?新文件已创建,但仍具有白色背景。

【问题讨论】:

    标签: php imagemagick


    【解决方案1】:

    php imagick 的类似问题:

    将 SVG 转换为透明 PNG 时,不要忘记将其放在 $imagick->readImageBlob() 之前:

    $imagick->setBackgroundColor(new ImagickPixel('transparent'));
    

    【讨论】:

    • 我遇到了同样的问题,上面的建议帮助我更进一步。但是现在生成的 png 文件有黑色背景。 :(
    • 所以经过大量的试验和错误,我意识到我正在使用 $im->adaptiveSharpenImage(2,1);在 setbackgroundColor 方法之后的我的 php 代码中,这似乎创建了一个非透明背景。删除该方法后,我可以获得 png 透明背景。现在来弄清楚如何从 svg 中获取清晰、清晰和完整的 png 图像。 :) 再次感谢您的回答。
    • dont forget to put this BEFORE 必须以粗体显示。节省了几个小时!
    • 超粗体,甚至是粗体或黑色,带有扩展的显示字体!
    【解决方案2】:

    由于图像是 JPEG,可能会出现损失和轻微的色彩不准确,因此图像中的白色实际上并不是 100% 纯白色。 ImageMagick 有一种通过-fuzz 设置处理此问题的方法,该设置在指定颜色时允许一定程度的模糊性或允许的错误范围。

    这里的正确咒语是:

    convert car.jpg -fuzz 10% -transparent white car.png
    

    【讨论】:

    • 经过几次尝试,我得到了一个完美的结果:convert source.png -fuzz 4% -transparent white result.png10% 吃了太多像素。
    【解决方案3】:

    试试下面的代码:

    $strInputFile = 'car.png';
    $target = 'car_transparent.png';
    $im = new Imagick($strInputFile);
    $im->paintTransparentImage($im->getImageBackgroundColor(), 0, 10000);
    $im->setImageFormat('png');
    $im->writeImage($target);
    $im->destroy();
    

    【讨论】:

      【解决方案4】:

      您的意思是使用-transparency 而不是-transparent

      【讨论】:

      • 我尝试使用 -transparency white 并且现在甚至没有创建新文件。
      • 您是否尝试过在系统上手动运行命令?或者失败了,回显$output 的值,这样您就可以查看是否有错误消息?
      • 回显 $output 给了我这个/usr/local/bin/convert /var/www/html/test/car.png -transparency white /var/www/html/test/car-new.png
      • 这看起来更像是你回应了$execScript,而不是$output
      • 当我尝试时,$output = shell_exec($execScript); echo $output; 什么也没发生。页面是空白的。
      【解决方案5】:

      图片的背景不是white(我的意思是0xFFFFFF),而是0xFEFEFE。试试:

      $execScript .= "-transparent #FEFEFE car-new.png"; 
      

      【讨论】:

        【解决方案6】:

        如果您不制作 Shell 脚本,请尝试以下操作:

        $ convert -transparency white car.png car-new.png
        

        这应该在通用终端中工作。如果没有,请告诉我。希望能帮助到你!

        【讨论】:

          猜你喜欢
          • 2019-01-14
          • 2013-12-10
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          • 2023-03-03
          • 2012-08-24
          • 2019-10-11
          • 2018-03-25
          相关资源
          最近更新 更多