您可以使用 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 下搜索并使用:
没有提到任何删除透明度的内容。你能用 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
在从图像中删除 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 下搜索并使用:
没有提到任何删除透明度的内容。你能用 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