Можете ли вы удалить альфа-канал в PNG с помощью SIPS?
Пытаясь остаться родным в SIPS при удалении альфа-канала из изображений, я знаком с процессом в ImageMagick:
convert -flatten test.png test-white.png
или же:
convert test.png -background white -alpha remove test.png
но когда я ссылаюсь на справочную страницу на SS4 и библиотеки, он говорит мне, что hasAlpa
это логическое чтение только при запуске:
sips -g hasAlpha test.png
По поиску под тегом sips и с:
не было ничего упомянутого для удаления прозрачности. Можете ли вы удалить прозрачность с помощью SIPS?
3 ответа
Было бы лучше использовать 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, так что вы останетесь родным и не будете нуждаться в 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);
?>
Итак, если я начну с этого, который прозрачен в середине:
Я получаю это в результате:
Я сделал фон холста синим, чтобы вы могли видеть его на белом фоне Stackru, но просто измените строки 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
Вы можете легко установить NetPBM, используя homebrew
с:
brew install netpbm