2015-07-22 2 views
5

Предположим, я хочу преобразовать прозрачный фон изображения в белый (flatten a png): Простой поиск в Google указывает мне на: convert -flatten image.png noTransparency.png. Это работает отлично, если я вызываю imageMagick из командной строки. Но скажем, я хочу использовать обертку .NET magick.net, чтобы сделать то же самое. Ни Google, ни документация magick.net не очень полезны для этого случая.Как скопировать команды ImageMagick в .net-код с помощью Magick.net

То же самое происходит и с convert original.png +transparent "#E6B15A" singleColor.png (способ создать новое изображение, содержащее только конкретный цвет от оригинала) я не могу найти способ сделать это с помощью magick.NET обертку

Почему так сложно отображать команды imageMagick в .net код с помощью magick.net ??

Есть ли способ использовать magick.net для выполнения сценариев imageMagick? Я мог бы легко создать cmd Процесс из .net и вызвать imageMagick команды оттуда, но если есть оболочка, это должно быть по какой-то причине ... Есть ли хорошая и обширная документация magick.net, что я отсутствует?

ответ

6

Прошу прощения, но в настоящее время нет обширной версии документации. Я только создал несколько примеров и задокументировал их на веб-сайте. У меня нет времени/команды для создания более подробной документации. Но я могу помочь вам ответить на оба вопроса.

convert -flatten image.png noTransparency.png

Это должно действительно быть написано так:

convert image.png -flatten noTransparency.png

image.png Сначала читается, а затем он сплющивается и записывается в noTransparency.png. Но в ImageMagick он «тайно» добавляет другое изображение с таким же размером, как image.png, и использует его для выравнивания image.png. Вы можете написать это в Magick.NET:

using (MagickImageCollection images = new MagickImageCollection()) 
{ 
    MagickImage imagePng = new MagickImage("image.png"); 

    // 'add background' 
    MagickImage background = new MagickImage(imagePng.BackgroundColor, imagePng.Width, imagePng.Height); 
    images.Add(background); 

    // image.png 
    images.Add(imagePng); 

    // +flatten 
    using (MagickImage result = images.Flatten()) 
    { 
    // noTransparency.png 
    result.Write("noTransparency.png"); 
    } 
} 

Но вы также можете написать это так:

using (MagickImage imagePng = new MagickImage("image.png")) 
{ 
    imagePng.ColorAlpha(imagePngg.BackgroundColor); 
    result.Write("noTransparency.png"); 
} 

И ваш другой пример не может быть переведено с текущей версии (7.0.0.0016) потому что + прозрачность еще не поддерживается.

convert original.png +transparent "#E6B15A" singleColor.png1

В следующей версии вы сможете сделать это:

using (MagickImage original = new MagickImage("original.png")) 
{ 
    original.InverseTransparent(new MagickColor("#E6B15A")); 
    original.Write("singleColor.png"); 
} 

Но вы могли бы сделать это, как это сейчас:

using (MagickImage original = new MagickImage("original.png")) 
{ 
    original.InverseOpaque(new MagickColor("#E6B15A"), MagickColor.Transparent); 
    original.Write("singleColor.png"); 
} 

И вы всегда можете спросить для получения дополнительной помощи здесь: https://magick.codeplex.com/discussions.

+0

Для меня пример 'MagickImageCollection' +' Flatten' отлично работает. Пример «InverseTransparent» пока недоступен, а пример «InverseOpaque» создает абсолютно белое изображение. – bzlm

+1

Кажется, я полностью забыл добавить метод InverseTransparent. Я создал проблему для этого: https://magick.codeplex.com/workitem/1365. Вы можете обратиться за помощью к InverseOpaque здесь: https://magick.codeplex.com/discussions – dlemstra

+0

Просто, чтобы уточнить, пример, который создает холст и сглаживает изображения, делает именно то, что я хочу, и я не OP. :) @dlemstra – bzlm

Смежные вопросы