Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


irvicon, попробуйте так:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim objFile
Dim objRegExp

Dim strFileSource2
Dim strFileDest

Dim objImageFileSource1
Dim objImageFileSource2
Dim objImageFileWork

Dim objImageProcess

Dim lngCount


If WScript.Arguments.Count = 2 Then
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(WScript.Arguments.Item(0)) Then
		If objFSO.FolderExists(WScript.Arguments.Item(1)) Then
			Set objRegExp = WScript.CreateObject("VBScript.RegExp")
			
			With objRegExp
				.IgnoreCase = True
				.Pattern = "2011_\d{3}[13579]{1}\.jpg"
			End With
			
			lngCount = 0
			
			For Each objFile In objFSO.GetFolder(WScript.Arguments.Item(0)).Files
				If objRegExp.Test(objFile.Name) Then
					lngCount = lngCount + 1
					
					WScript.Echo "Iteration #" & CStr(lngCount)
					WScript.Echo "  Source #1:   " & objFile.Path
					
					strFileSource2 = objFSO.BuildPath( _
						objFile.ParentFolder, _
						"2011_" & Right("0000" & CStr(CLng(Right(objFSO.GetBaseName(objFile.Name), 4)) + 1), 4) & "." & _
						objFSO.GetExtensionName(objFile.Name) _
					)
					
					WScript.Echo "  Source #2:   " & strFileSource2
					
					If objFSO.FileExists(strFileSource2) Then
						Set objImageFileSource1 = WScript.CreateObject("WIA.ImageFile")
						Set objImageFileSource2 = WScript.CreateObject("WIA.ImageFile")
						
						Set objImageProcess     = WScript.CreateObject("WIA.ImageProcess")
						
						objImageFileSource1.LoadFile objFile.Path
						objImageFileSource2.LoadFile strFileSource2
						
						With objImageProcess
							' Создаём «болванку» итогового изображения посредством 
							' масштабирования первого изображения до нужного размера
							' Это работает быстрее, нежели формирование его вручную
							
							.Filters.Add .FilterInfos("Scale").FilterID
							
							With .Filters.Item(.Filters.Count).Properties
								' По первому изображению определяем, где у него «узкая» сторона
								' В ту сторону и увеличиваем изображение, влево или вниз
								If objImageFileSource1.Width / objImageFileSource1.Height >= 1 Then
									.Item("MaximumWidth")  = objImageFileSource1.Width + objImageFileSource2.Width
									.Item("MaximumHeight") = objImageFileSource1.Height
								Else
									.Item("MaximumWidth")  = objImageFileSource1.Width
									.Item("MaximumHeight") = objImageFileSource1.Height + objImageFileSource2.Height
								End If
								
								.Item("PreserveAspectRatio") = False
							End With
							
							' Получаем «болванку» изображения
							Set objImageFileWork = .Apply(objImageFileSource1)
							
							.Filters.Remove .Filters.Count
							
							
							' Накладываем на полученное изображение первое изображение
							.Filters.Add .FilterInfos("Stamp").FilterID
							
							With .Filters.Item(.Filters.Count).Properties
								.Item("ImageFile") = objImageFileSource1
								.Item("Left")      = 0
								.Item("Top")       = 0
							End With
							
							' Накладываем на полученное изображение второе изображение
							.Filters.Add .FilterInfos("Stamp").FilterID
							
							With .Filters.Item(.Filters.Count).Properties
								.Item("ImageFile") = objImageFileSource2
								
								' По первому изображению определяем, где у него «узкая» сторона
								' К той стороне и прикладываем второе изображение, слева или снизу
								If objImageFileSource1.Width / objImageFileSource1.Height >= 1 Then
									.Item("Left")      = objImageFileSource1.Width
									.Item("Top")       = 0
								Else
									.Item("Left")      = 0
									.Item("Top")       = objImageFileSource1.Height
								End If
							End With
							
							' Получаем итоговое изображение
							Set objImageFileWork = .Apply(objImageFileWork)
							
							.Filters.Remove .Filters.Count
							.Filters.Remove .Filters.Count
						End With
						
						' Сохраняем полученное итоговое изображение
						strFileDest = WScript.Arguments.Item(1) & "\2011_s" & Right("0000" & CStr(lngCount), 4) & "." & objImageFileWork.FileExtension
						
						If objFSO.FileExists(strFileDest) Then
							objFSO.DeleteFile strFileDest, True
						End If
						
						objImageFileWork.SaveFile strFileDest
						
						WScript.Echo "  Destination: " & strFileDest
						WScript.Echo
					Else
						WScript.Echo "    Can't find odd source file [" & strFileSource2 & "]"
						WScript.Echo
					End If
				Else
					' Nothing to do
				End If
			Next
			
			Set objImageProcess     = Nothing
			
			Set objImageFileSource1 = Nothing
			Set objImageFileSource2 = Nothing
			
			Set objRegExp           = Nothing
		Else
			WScript.Echo "Can't find destination folder [" & WScript.Arguments.Item(1) & "]"
		End If
	Else
		WScript.Echo "Can't find source folder [" & WScript.Arguments.Item(0) & "]"
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder> <Destination folder>"
End If

WScript.Quit
Код сохранить в файл с кодировкой ANSI (win-1251) с расширением «.vbs». Исполнять, указав папку-источник и папку назначения аргументами скрипта. Например:
Код: Выделить весь код
cscript.exe "e:\Песочница\0082\Script.vbs" "e:\Песочница\0082\Source" "e:\Песочница\0082\Destination"
Примерный результат работы
Код: Выделить весь код
Iteration #1
  Source #1:   E:\Песочница\0082\Source\2011_0001.jpg
  Source #2:   E:\Песочница\0082\Source\2011_0002.jpg
  Destination: E:\Песочница\0082\Destination\2011_s0001.jpg

Iteration #2
  Source #1:   E:\Песочница\0082\Source\2011_0003.jpg
  Source #2:   E:\Песочница\0082\Source\2011_0004.jpg
  Destination: E:\Песочница\0082\Destination\2011_s0002.jpg

Iteration #3
  Source #1:   E:\Песочница\0082\Source\2011_0005.jpg
  Source #2:   E:\Песочница\0082\Source\2011_0006.jpg
  Destination: E:\Песочница\0082\Destination\2011_s0003.jpg
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:01, 23-08-2011 | #3