Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Подскажите софтинку
цитата
25/11/11 в 22:05
 Oknem
Посоветуйте чем можно такое сделать?

Имеется папка в которой лежит определенное количество картинок, надо эти картинки объединить по 4 штуки, чтоб на выходе была одна картинка состоящая из 4-х, примерно вот так



Задача именно чтоб можно было это сделать пакетно, т.е. закинул папку с пиксами и на выходе получил нужный результат.

спасибо icon_wink.gif
цитата
25/11/11 в 23:15
 benzole
можно сделать средствами экшенов в фотошопе.
примерно как это можно сделать:
пихаешь четыре картинки в папку /src/. назваешь их 1.jpg, 2.jpg и т.д.
начинаешь запись экшена, делаешь с картинками всё что нужно, сохраняешь готовую общую картинку в папку /final/final.jpg. заканчиваешь запись экшена.

помещаешь в /src/ новые 1.jpg, 2.jpg, 3.jpg и 4.jpg, и жмешь на выполнение экшена. в итоге в папке /final/ появляется искомая картинка уже на автомате.

если нужно обработать не 4 картинки в одну, а 40 в десять - то придётся делать десять папок, в каждой по 4 исходных джпега и при записи экшена, соответственно, тоже делать 10 итераций одних и тех же действий (только папки исходников и папку для итогового файла менять).

только нужно, чтобы все картинки были одинакового размера, либо под маску их ложить, чтоб краёв видно не было.
цитата
26/11/11 в 00:07
 Oknem
benzole: спасибо, про фотошоп и экшен smail54.gif я знаю, но это не то. Один человек мне сказал что делал такое, но вот не помнит каким софтом icon_smile.gif
цитата
26/11/11 в 11:30
 Yacc
param (
   [parameter( Mandatory = $true )][String]$src,
   [parameter( Mandatory = $true )][String]$dst,
   [String]$bg = 'white'
)
if( [IO.Directory]::Exists( $src ) ) {
   [void][Reflection.Assembly]::LoadWithPartialName( 'System.Drawing' )
   if( -not [IO.Directory]::Exists( $dst ) ) {
      [Void][IO.Directory]::CreateDirectory( $dst )
   }
   $f = ls -Path ( [IO.Path]::Combine( $src, '*' ) ) -Include ( '*.jpg', '*.png' )
   $lf = $f.Length
   for( $i = 0; $i -lt $lf; $i += 4 ) {
      $f4 = @(); $w = $h = 0; $lj = 4
      if( $lf - $i -lt 4 ) { $lj = $lf - $i }
      for( $j = 0; $j -lt $lj; $j += 1 ) {
         $f4 += ( , ( New-Object Drawing.Bitmap $f[ $i + $j ].FullName ) )
         if( $f4[ $j ].Width -gt $w ) { $w = $f4[ $j ].Width }
         if( $f4[ $j ].Height -gt $h ) { $h = $f4[ $j ].Height }
      }
      $n = [IO.Path]::Combine( $dst, [string]( $i / 4 + 1 ) + '.jpg' )
      if( -not [IO.File]::Exists( $n ) ){
         $b = New-Object Drawing.Bitmap ( 2 * $w ), ( 2 * $h )
         $g = [Drawing.Graphics]::FromImage( $b )
         $g.Clear( [Drawing.Color]::$bg )
         $k = -1;
         for( $j = 0; $j -lt $lj; $j +=1 ) {
            if( $j % 2 -eq 0 ) { $k += 1 }
            $g.DrawImage( $f4[ $j ], $w * ( ( $j % 2 ) + .5 ) - $f4[ $j ].Width / 2, $h * ( $k + .5 ) - $f4[ $j ].Height / 2, $f4[ $j ].Width, $f4[ $j ].Height )
            $f4[ $j ].Dispose()
         }
         $b.Save( $n, ( [Drawing.Imaging.ImageFormat]::Jpeg ) )
         $b.Dispose()
      }
   }
}
Сохранить в файл softinka.ps1

win+r

powershell -file c:/softinka.ps1 e:/src d:/dst BackgroundColorName

Если в путях есть пробелы, то "в кавычках".
BackgroundColorName можно не указывать, по-умолчанию белый.

Если папки d:/dst нет, то она будет создана.
Создаваемые файлы именуются по порядку номеров: 1, 2, ...
Формат .jpg

Размеры ячейки определяются максимальными размерами в каждой четвёрке.
Размер итоговой картинки равен 2 * размер ячейки.
Картинки в ячейках центрируются по горизонтали и вертикали.

Кроп/ресайз, сортировка/группировка, накладывание текста и прочее можно легко прикрутить, но уже на коммерческой основе. icon_smile.gif


Эта страница в полной версии