您可以使用 SIPS 删除 PNG 中的 alpha 通道吗?

Can you remove the alpha channel in a PNG with SIPS?

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

convert -flatten test.png test-white.png

或:

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

但是当我参考 ss4 and Library 上的手册页时,它告诉我 hasAlpa 是一个布尔值只读,当我 运行:

sips -g hasAlpha test.png

在标签 下搜索并使用:

没有提到任何删除透明度的内容。你能用 SIPS 去除透明度吗?

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

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

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

您可以使用以下小脚本,它使用 OSX 的内置 PHP,其中包括 GD 默认情况下,所以你会保持 native 而不需要 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);
?>

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

我得到的结果是:

我将 canvas 背景设为蓝色,以便您可以在 Whosebug 的白色背景上看到它,但只需将第 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 中另一个缺失的功能。

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

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

您可以使用 homebrew 轻松安装 NetPBM

brew install netpbm