2

从图像中删除 alpha 通道时尝试在 SIPS 中保持原生状态我熟悉 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 消除透明度吗?

4

3 回答 3

3

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

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

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

于 2016-09-01T12:52:10.903 回答
3

您可以使用以下小脚本,该脚本使用 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);
...
...

我在这里以同样的方式做了另一个答案,以克服sips.

于 2016-09-01T13:11:26.387 回答
2

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

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

您可以使用以下命令轻松安装NetPBMhomebrew

brew install netpbm
于 2016-09-01T13:33:12.303 回答