2009-01-31 2 views
7

Есть ли библиотека в C#, которая позволит мне читать слои в файле photoshop (PSD) и извлекать их как прозрачные изображения (PNG)?Как извлечь слои из файла Photoshop? C#

В Photoshop есть пакетная команда, которая будет извлекать все слои в отдельных файлах, но нет выбора прозрачных PNG. Моя цель - создать небольшую служебную программу, которая будет создавать комбинации слоев по вашему желанию (например, подумайте о создании колоды карт).

ответ

3

Есть хороший article на CodeProject, который может быть полезен. И вот thread о том, как обсуждать синтаксический формат файла PSD с C#.

+0

В SO обсуждается только чтение файла фотошопа (так же как и ссылки). К сожалению, демонстрационное приложение в статье CodeProject не работает с новыми форматами CS3. :( – pek

3

Вы можете сделать это с помощью Photoshop COM.

+2

См. В частности эту статью (http: //www.pcpix.com/Photoshop /) при доступе к COM-интерфейсу из .NET. –

0

Если у вас нет установленного Photoshop, вы можете посмотреть код на http://frankblumenberg.de/doku/doku.php?id=paintnet:psdplugin для получения более простого кода, который загружает файлы PSD.

К сожалению, я не знаю ранее существовавшей библиотеки PNG, которая делает то, что вы хотите, но код канонической библиотеки для обработки файлов PNG находится по адресу http://www.libpng.org/pub/png/.

1

Я нашел code sample, который делает это на Java.

"Supports uncompressed or RLE-compressed RGB files only" 

поддерживает также только старые PSD версии:

"Does not support additional features in PS versions higher than 3.0" 

Также ImageMagick обрабатывает PSD и имеет интерфейсы для многих языков:

"Choose from these interfaces: G2F (Ada), MagickCore (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/haXe), MagickNet (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK)" 
1

ImagicMagick (который был упомянутых в другой SO статья) позволяет отдельно извлекать слои. См: http://www.rubblewebs.co.uk/imagemagick/psd.php

Вы можете попробовать это для себя, используя инструмент командной строки:

convert boots.psd[0] -thumbnail 340x340 boots_png.png 
3

Я не смог найти много на этом в любом месте, но это, как я в конечном итоге делает это.

using Photoshop; 

Photoshop.PsdFile psd = new Photoshop.PsdFile(); 
psd.Load(pingTextsPsd); 

for (int j = 0; j < psd.Layers.Count; j++) 
      { 
       System.Drawing.Image myPsdImage = ImageDecoder.DecodeImage(psd.Layers[j]); 

       myPsdImage.Save(pingsOutputPath + psd.Layers[j].Name + ".png"); 

      } 

я должен был загружал файлы КС, которые г-н Франк Blumenberg сделал (на основе движка Endogine Йонас Beckeman), как получение paintdotnet DLL сам не был достаточно.

Я считаю, что именно здесь я получил файлы cs.

http://code.google.com/p/skimpt/source/browse/trunk/Skimpt3/Skimpt3/classes/photoshop/?r=72

Это позволит вам получить слои ..

:-)

Это, кажется, работает хорошо с CS6 файлы тоже.

обновление: веб-сайт vs2013 находится здесь: http://goo.gl/H6nWSN.