利用PHOTOSHOP CS 和 脚本实现批量自动处理图片

现在数码相片多了,处理起来也很费劲的。

通过实践,发现 Photoshop 的脚本功能非常强大。就想利用其功能,实现自动化处理。Photoshop 的脚本开发,可以参考 C:/Program Files/Adobe/Adobe Photoshop CS2/Scripting Guide 下面相应的 .pdf,有 javascript、vbscript 等的语言可选。

下面是一个范例:


Option   Explicit

' 'Batch converter  for Photoshop CS2(Not tested for CS1)
'
author: cangwu.lee # gmail.com

' saving parameter
Const  psSaveChanges           =   1
Const  psDoNotSaveChanges      =   2
Const  psPromptToSaveChanges   =   3

' Jpeg Option
Const  psStandardBaseline      =   1
Const  psOptimizedBaseline     =   2
Const  psProgressive           =   3

' saveAs PsExtensionType
Const  PsExtensionType_psLowercase   =   2
Const  PsExtensionType_psUppercase   =   3

' PsDialogModes
Const  psDisplayAllDialogs     =   1
Const  psDisplayErrorDialogs   =   2
Const  psDisplayNoDialogs      =   3

const  imageFilter  =   " ;PSD;BMP;JPG;JPEG;GIF;PNG; "   ' image file type to process

dim  directory, jsxFile, jpeg_quality
directory    
=   " c: emp "    ' change  to point to your photos folder
jsxFile       =   " C:/Program Files/Adobe/Adobe Photoshop CS2/Presets/Scripts/exif_info.jsx "
jpeg_quality 
=   8    ' between 1~12
'
将这3个变量改成你的实际需要。

call  convert2jpegByFolder()




'
Function  convert2jpegByFolder()
    
Dim  i
    
Dim  fs, objFiles, objFile, ext, idone, ierror
    
Set  fs  =   CreateObject ( " Scripting.FileSystemObject " )
    
If   Not  fs.fileExists(jsxFile)  Then
        
MsgBox   " The .jsx file NOT exists. "
        
Exit   Function
    
End   If
    
If   Not  fs.folderexists(directory)  Then
        
MsgBox   " Photo directory NOT exists. "
        
Exit   Function
    
End   If

    
Dim  appRef  '   As Photoshop.Application
     Dim  docRef  '  As Photoshop.Document
    
    
Set  appRef  =   GetObject ( "" " Photoshop.Application " )
    
If  Err.Number  <>   0   Then
        
Set  appRef  =   CreateObject ( " Photoshop.Application " )
    
End   If
    
If  appRef  Is   Nothing   Then
        
MsgBox   " Photoshop Appliaction object exception. "
        
Exit   Function
    
End   If

    
Dim  jpgOpt ' Photoshop.JPEGSaveOptions
     Set  jpgOpt  =   CreateObject ( " Photoshop.JPEGSaveOptions " )
    
With  jpgOpt
        .FormatOptions 
=  psStandardBaseline
        .Quality 
=  jpeg_quality  ' 0~12
     End   With

    appRef.Preferences.TypeUnits 
=   1   ' for PsTypeUnits --> 1 (psPixels)
    appRef.DisplayDialogs  =  psDisplayNoDialogs

    
Set  objFiles  =  fs.GetFolder(directory).Files
    
If  Err.Number  <>   0   Then   MsgBox  Err.Description:  Exit   Function
    
On   Error   GoTo   0
    
    
MsgBox   " All file in the directory conuters: "   &  objFiles.Count  &   chr ( 13 &   chr ( 10 &   " Click 'OK' to continue. "
    idone 
=   0
    
For   Each  objFile In objFiles
        ext 
= " ; "   &   UCase (fs.GetExtensionName(objFile.Path))  &   " ; "
        
If   instr ( 1 , imageFilter, ext,  1 ) > 0   Then
        
            
' set docRef = appRef.Documents.Add(1024, 768)
             Set  docRef  =  appRef.Open(objFile.Path)
            
If  docRef  Is   Nothing   Then
                
MsgBox   " Create/open image document failed. "
            
Else
                
' setting current picture document
                 Set  appRef.ActiveDocument  =  docRef
                
                
' begin to process
                 On   Error   Resume   Next
                
Call  appRef.DoJavaScriptFile(jsxFile)
                
If  Err.Number  =   0   Then
                    
For  i  =   0   To   30000
                        
' waiting for some times
                     Next
                    
Call  docRef.SaveAs(objFile.Path  &   " .jpg " , jpgOpt,  True , PsExtensionType_psLowercase)
                
Else
                    ierror 
=  ierror  +   1
                
End   If
                
On   Error   GoTo   0
                
' close document
                 Call  docRef.Close(psDoNotSaveChanges)
                idone 
=  idone  +   1   ' 'counter
                 Set  docRef  =   Nothing   '  free document object
             End   If
        
End   If
        
    
Next
    
MsgBox   " Image files: "   &  idone  &   chr ( 13 &   chr ( 10 &   " File error: "   &  ierror


    
Set  appRef  =   Nothing

End Function






将文字保存成一个 .vbs 文件,双击  执行,立等可取!

本脚本仅仅作为示范,未能保证在其它电脑也能执行顺利。但,不对原文件进行修改(因为修改之后不保存、或者另存为了),不会造成文件丢失。


 

你可能感兴趣的:(基于Windows开发)