【问题标题】:Can you remove the alpha channel in a PNG with SIPS?您可以使用 SIPS 删除 PNG 中的 alpha 通道吗?
【发布时间】:2017-01-05 19:42:18
【问题描述】:

在从图像中删除 alpha 通道时尝试在 SIPS 中保持 native 我熟悉 ImageMagick 中的过程:

convert -flatten test.png test-white.png

或:

convert test.png -background white -alpha remove test.png

但是当我在 ss4Library 上引用手册页时,它告诉我 hasAlpa 是一个布尔值,只有在我运行时才读取:

sips -g hasAlpha test.png

在标签 下搜索并使用:

没有提到任何关于删除透明度的内容。您可以使用 SIPS 消除透明度吗?

【问题讨论】:

    标签: sips macos terminal png transparency sips


    【解决方案1】:

    使用 ImageMagick 或 GraphicsMagick 会更好,但如果您真的想使用 SIPS,您可以尝试通过将图像转换为 BMP 来消除透明度,然后再转换回 PNG:

    sips -s format bmp input.png --out tmp.bmp
    sips -s format png tmp.bmp --out output.png
    

    很遗憾您不能选择背景颜色,图像的透明部分将被替换为黑色。

    【讨论】:

    • 如果您有一个需要修复的 alpha 像素错误的像素,这很有用。
    【解决方案2】:

    您可以使用以下小脚本,该脚本使用 OSX 的内置 PHP,默认情况下包含 GD,因此您将保持原生 并且不需要 ImageMagick 或任何额外的安装:

    #!/usr/bin/php -f
    
    <?php
    // Get start image with transparency
    $src = imagecreatefrompng('start.png');
    
    // Get width and height
    $w = imagesx($src);
    $h = imagesy($src);
    
    // Make a blue canvas, same size, to overlay onto
    $result = imagecreatetruecolor($w,$h);
    $blue = imagecolorallocate($result,0,0,255);
    imagefill($result,0,0,$blue);
    
    // Overlay start image ontop of canvas
    imagecopyresampled($result,$src,0,0,0,0,$w,$h,$w,$h);
    
    // Save result
    imagepng($result,'result.png',0);
    ?>
    

    所以,如果我从这个开始,中间是透明的:

    我得到了这个结果:

    我将画布背景设为蓝色,以便您可以在 StackOverflow 的白色背景上看到它,但只需将第 12 行和第 13 行更改为这样的白色背景:

    ...
    ...
    // Make a white canvas, same size, to overlay onto
    $result = imagecreatetruecolor($w,$h);
    $white = imagecolorallocate($result,255,255,255);
    imagefill($result,0,0,$white);
    ...
    ...
    

    我以同样的方式回答了here,以克服sips 中另一个缺失的功能。

    【讨论】:

      【解决方案3】:

      另一个比安装整个 ImageMagick 更轻的选项可能是使用 NetPBM 套件:

      pngtopam -background=rgb:ff/ff/ff -mix start.png | pnmtopng - > result.png 
      

      您可以使用homebrew 轻松安装NetPBM

      brew install netpbm
      

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 2014-02-20
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多