Можете ли вы удалить альфа-канал в 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
Другие вопросы по тегам