Страница 1 из 1
Пакетная обработка картинок
Добавлено: Пт июн 10, 2011 23:02
sergiokapone
Есть батник
Код: Выделить всё
tifftopnm foreground.tif | pnmtodjvurle > foreground.rle
tifftopnm background.tif > background.ppm
copy /b foreground.rle+background.ppm output.sep
csepdjvu output.sep demo.djvu
pause
который обрабатывает утилитами
tifftopnm,
pnmtodjvurle и
csepdjvu исходные файлы
foreground.tif и
background.tif в один файл
demo.djvu. Как написать скрипт для пакетной обработки файлов в TC, которые находятся в определенной папке? Т.е., например, имеется папка с файлами
foreground0001.tif ...
foreground1000.tif ,
background0001.tif ...
background1000.tif нужно перегнать по вышеприведенной схеме файлы в
demo0001.djvu ...
demo1000.djvu
Добавлено: Сб июн 11, 2011 10:39
Batya
sergiokapone писал(а):Т.е., например, имеется папка с файлами foreground0001.tif ... foreground1000.tif , нужно перегнать по вышеприведенной схеме файлы в demo0001.djvu ... demo1000.djvu
Я абсолютно не в курсе, как работают описанные утилиты (мне это не требуется), но где в приведённом примере файлы background*.tif? Они не будут использоваться?
Добавлено: Сб июн 11, 2011 12:14
sergiokapone
Batya писал(а):но где в приведённом примере файлы background*.tif? Они не будут использоваться?
Извините, просто забыл написать, они тоже должны лежать в той же папке, что и foreground*.tif
Добавлено: Сб июн 11, 2011 12:27
Batya
sergiokapone
Соответственно, все описанные файлы группируются по номерам после базовых имён "foreground", "background" и "demo"?
Добавлено: Сб июн 11, 2011 12:45
sergiokapone
Да, верно.
Добавлено: Сб июн 11, 2011 14:21
Batya
sergiokapone
Т.к., ещё раз повторю, указанных выше утилит у меня нет, приводимый vbs-скрипт мной не тетировался. Пиши об ошибках.
Скрипт работает по выделенным файлам или папкам или по текущим под курсором. Имена можно задать через параметры или будут использоваться значения по-умолчанию.
Код: Выделить всё
'=====================================================================
' Пакетное формирование djvu-файлов
'
' Параметры:
' {файл-список} [{целевое имя файла} [{имя файла 1} [{имя файла 2}]]]
'
' Примеры параметров при вызове из TC:
' %L
' %L "demo"
' %L "demo" "foreground" "background"
'=====================================================================
Option Explicit
'======== Изменяемые параметры =======================================
Const Util1 = "tifftopnm"
Const Util2 = "pnmtodjvurle"
Const Util3 = "csepdjvu"
Const DefBaseName1 = "foreground"
Const DefBaseName2 = "background"
Const DefTargetName = "demo"
Const BaseExt1 = "tif"
Const BaseExt2 = "tif"
Const TargetExt = "djvu"
Const TransitFile1 = "foreground.rle"
Const TransitFile2 = "background.ppm"
Const TransitFile3 = "output.sep"
'=====================================================================
Dim FSO, WSH, FF, F, BaseName1, BaseName2, TargetName
With WScript
If .Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Пакетное формирование djvu-файлов"
.Quit
End If
FF = .Arguments(0)
If .Arguments.Count > 1 Then
TargetName = .Arguments(1)
If TargetName = "" Then TargetName = DefTargetName
Else
TargetName = DefTargetName
End If
If .Arguments.Count > 2 Then
BaseName1 = .Arguments(2)
If BaseName1 = "" Then BaseName1 = DefBaseName1
Else
BaseName1 = DefBaseName1
End If
If .Arguments.Count > 3 Then
BaseName2 = .Arguments(3)
If BaseName2 = "" Then BaseName2 = DefBaseName2
Else
BaseName2 = DefBaseName2
End If
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
F = Trim(.ReadLine)
If F <> "" Then
If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F)
If FSO.FileExists(F) Then ForFile FSO.GetFile(F)
End If
Loop
.Close
End With
Set FSO = Nothing
Set WSH = Nothing
WScript.Quit
Sub ForFile(pFile)
Dim lAdd, lFile1, lFile2
If InStr(1, pFile.Name, BaseName1, 1) = 1 And LCase(FSO.GetExtensionName(pFile.Name)) = BaseExt1 Then
lAdd = Mid(FSO.GetBaseName(pFile.Name), Len(BaseName1) + 1)
lFile1 = BaseName2 & lAdd & "." & BaseExt2
lFile2 = TargetName & lAdd & "." & TargetExt
If FSO.FileExists(pFile.ParentFolder.Path & "\" & lFile1) Then
WSH.Run "cmd /c " & Util1 & " " & pFile.Name & " | " & Util2 & " > " & TransitFile1, 7, True
WSH.Run "cmd /c " & Util1 & " " & lFile1 & " > " & TransitFile2, 7, True
WSH.Run "cmd /c copy /b " & TransitFile1 & "+" & TransitFile2 & " " & TransitFile3, 7, True
WSH.Run "cmd /c " & Util3 & " " & TransitFile3 & " " & lFile2 , 7, True
End If
End If
End Sub
Sub ForFolder(pFolder)
Dim lF
For Each lF In pFolder.Files
ForFile lF
Next
For Each lF In pFolder.SubFolders
ForFolder lF
Next
End Sub
Добавлено: Сб июн 11, 2011 14:39
sergiokapone
Спасибо, за помощь. У меня пока не получилось, т.е. на выходе djvu не создался, но сообщений об ошибках тоже не выдает. Сам пакет утилит можно взять
с этой страницы (Пакет утилит для работы метода разделённых сканов (474 КБ) (На базе csepdjvu и NetPBM-утилит)), там же я и увидел этот батник.
Добавлено: Вс июн 12, 2011 01:15
Batya
sergiokapone писал(а):У меня пока не получилось, т.е. на выходе djvu не создался, но сообщений об ошибках тоже не выдает.
Нашёл ошибку в скрипте - в 76-ой строке должно быть
Исправил.
Добавлено: Чт июн 16, 2011 23:23
sergiokapone
Спасибо, работает