Извлечение слоев из PSD с помощью ImageMagick с сохранением макета

Я использую ImageMagick для извлечения слоев из PSD, и он отлично справляется с ними:

convert image.psd image-%d.png

Но результирующие изображения PNG имеют разные размеры в зависимости от фактического содержимого слоя. Что бы я хотел, так это извлечь все слои, но сделать их одинаковыми по размеру, чтобы позже я мог легко наложить их друг на друга, и чтобы все выровнялось так же, как в исходном PSD.

Если это поможет визуализировать это, это то, что я сейчас получаю с помощью приведенной выше команды:

+----+
|A   |   +-+   +-+
|    | = |A| + |B|
|   B|   +-+   +-+
+----+

И я хочу:

+----+   +----+   +----+
|A   |   |A   |   |    |
|    | = |    | + |    |
|   B|   |    |   |   B|
+----+   +----+   +----+

С полученными изображениями с прозрачным фоном, чтобы я мог сделать это:

+----+   +----+ 
|A   |   |A   |+
|    | = |    ||
|   B|   |   B||
+----+   +----+|
          +----+

Я никоим образом не привязан к ImageMagick, поэтому, если есть другой инструмент (желательно командной строки), который может достичь этого, это нормально.


person Thom    schedule 06.07.2011    source источник
comment
Мне было интересно, нашли ли вы решение своей проблемы. Какой-либо прогресс?   -  person Amelio Vazquez-Reina    schedule 14.08.2011
comment
К сожалению нет. В итоге я вручную скопировал и вставил слои в новые изображения того же размера, используя Paint.NET и его плагин PSD.   -  person Thom    schedule 14.08.2011


Ответы (3)


В конце концов, это то, что сработало для меня:

convert -dispose Background "input.psd" -layers coalesce "output.png"

Кредит принадлежит снибго с форумов ImageMagick.

person Camilo Martin    schedule 03.04.2021

Я использую эту командную строку, чтобы делать то, что описывают:

convert.exe <filename>.psd -set dispose Background -coalesce <outfilename>.png
person killmenow    schedule 14.09.2011
comment
Это не работает, если слои PSD имеют прозрачность, есть ли альтернатива? - person user780756; 05.07.2014

Введите это, чтобы извлечь слой номер 2 из файла PSD:

convert             \
  <filename>.psd[0] \
  <filename>.psd[2] \
  \(                    \
     -clone 0           \
     -alpha transparent \
  \)                    \
 -swap 0           \
 +delete           \
 -coalesce         \
 -compose src-over \
 -composite        \
 <extracted-filename>.png

Это создает сначала прозрачный холст с тем же размером файла PSD, а затем объединяет его со слоем 2, сохраняя исходный макет (-coalesce)

person biondo    schedule 01.04.2015
comment
Отлично! Есть ли простой способ сделать это для всех слоев сразу? - person Thom; 09.04.2015
comment
Чтобы извлечь все слои в png с сохранением прозрачности, вы можете сделать что-то вроде: for i in $(identify -format "%[scene] " <filename>.psd); do convert <filename>.psd[$i] <extracted-filename>-$i.png; done По крайней мере, в моей версии imagemagick все png сохраняют прозрачность, нет необходимости добавлять все параметры convert (ImageMagick 6.8.9-9 Q16 i686 2015-01-06) - person aesede; 07.05.2015
comment
Я пробовал это, но кроме слоя 0 все, что я получаю, это пустые слои! (правильные размеры, но полностью прозрачные). - person Camilo Martin; 03.04.2021