使用ImageMagick或GraphicsMagick可能是更好的选择,但如果你真的想使用SIPS,你可以尝试通过将图像转换为BMP格式,然后再转回PNG格式来去除透明度:
sips -s format bmp input.png --out tmp.bmp
sips -s format png tmp.bmp --out output.png
很遗憾,您不能选择背景颜色,图像中透明的部分将被替换为黑色。
#!/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);
...
...
我在同样的方向上又回答了另一个问题(这里),以克服sips
中另一个缺失的功能。
另一种选择,比安装整个ImageMagick更轻量级的可能是使用NetPBM套件:
pngtopam -background=rgb:ff/ff/ff -mix start.png | pnmtopng - > result.png
homebrew
轻松安装 NetPBM,命令如下:brew install netpbm