zoukankan      html  css  js  c++  java
  • diy toy: image auto-handler

    备忘之:)

    config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <config>
        <zoom width="1296" height="100">
        </zoom>
        <rotation angle="270">
        </rotation>
        <save>
            <path>D:122</path>
        </save>
        <author prefix="xxoo">
        </author>
        <monitor total="10">
        </monitor>
    </config>

    image-auto-handler.vbs

      1 'Whatfor:  rename pictures with Exif property [artist]
      2 'Author:   lichmama nextgodhand@163.com
      3 'Runtime:  win-NT series(x86/x64), which installed WIA component.
      4 'LICENSE:  
      5 '    Copyright ;copy; 2014-2015 lichmama nextgodhand@163.com 
      6 '    All rights reserved.
      7 '    FOR NON-COMMERCIAL USE: you can use, copy, modify and distribute this code,
      8 '    but please keep the information of LICENSE & Author.
      9 
     10 '*ChangeLog:
     11 '    1.add zoom and rotation
     12 '    2.backup the folder [*.NEW] to config path
     13 '    reedited: 2015/04/16
     14 '    3.change the naming style, which supports the [alpha] property
     15 '    3.*not keeping the folder [*.NEW]
     16 '    reedited: 2015/10/27
     17 '    4.add monitor function, which supports the [total] property
     18 '    reedited: 2015/10/31, happy halloween:)
     19 '    5.change the config file to config.xml [original, config.ini]
     20 '    5.*add verifying for configurations
     21 '    reedited: 2015/11/1
     22 
     23 Set fso = CreateObject("scripting.filesystemobject")
     24 Set imgfile = CreateObject("wia.imagefile")
     25 Set sdp = CreateObject("scripting.dictionary")
     26 Set regex = CreateObject("vbscript.regexp")
     27 Set monitor = CreateObject("scripting.dictionary")
     28 set config = new Config_Class
     29 
     30 '================script starts!================
     31 Call sdp.Add("PNG", "PNG FILE")
     32 Call sdp.Add("GIF", "GIF FILE")
     33 Call sdp.Add("BMP", "BMP FILE")
     34 Call sdp.Add("JPG", "JPG FILE")
     35 
     36 If WScript.Arguments.Count = 0 Then
     37     Call Quit_Job(True)
     38 Else
     39     path = WScript.Arguments(0)
     40     If Not fso.FolderExists(path) Then
     41         Call Quit_Job(True)
     42     End If
     43 End If
     44 
     45 If Not ReadConfig() Then
     46     Call Wscript.Echo("[配置文件错误]:运行前请保证配置文件config.ini存在,并且正确!")
     47     Call Quit_Job(False)
     48 End If
     49 
     50 If Not fso.FolderExists(path & ".NEW") Then
     51     Call fso.CreateFolder(path & ".NEW")
     52 End If
     53 
     54 For Each picture In fso.GetFolder(path).Files
     55     extension = UCase(fso.GetExtensionName(picture))
     56     If sdp.Exists(extension) Then
     57         Call imgfile.LoadFile(picture)
     58         For index = 1 To imgfile.Properties.Count
     59             name = imgfile.Properties(index).Name
     60             If name = "Artist" Then
     61                 regex.Pattern ="d*"
     62                 value = imgfile.Properties(index).Value
     63                 value = regex.Execute(value)(0)
     64                 index = CInt(value)
     65                 regex.Pattern = "^(0*)"
     66                 value = regex.Replace(value, config.author_prefix)
     67                 Call Zoom_Rotate()
     68                 Call imgfile.SaveFile(path & ".NEW" & value & "." & extension)
     69                 monitor.Item(index) = path & ".NEW" & value & "." & extension
     70                 Exit For
     71             End If
     72         Next
     73     End If
     74 Next
     75 Call Monitor_Total()
     76 
     77 'move the folder [*.NEW] to config path
     78 regex.Pattern = "([^\]+)$"
     79 dest = fso.GetAbsolutePathName(path)
     80 dest = regex.Execute(dest)(0).SubMatches(0)
     81 For i=0 To config.save_path.Count-1
     82     Call fso.CopyFolder(path & ".NEW", config.save_path.Item(i) & "" & dest)
     83 Next
     84 Call fso.DeleteFolder(path & ".NEW")
     85 
     86 MsgBox "批处理执行完毕!",vbInformation,"Image Auto-Handler v0.1"
     87 Call Quit_Job(False)
     88 '================script ends here==============
     89 Function ReadConfig()
     90 On Error Resume Next
     91     xmlsource = Replace(WScript.ScriptFullName, WScript.ScriptName, "config.xml")
     92     If fso.FileExists(xmlsource) Then 
     93         Call config.init_config(xmlsource)
     94         For i = 1 To config.monitor_total
     95             Call monitor.Add(i, "")
     96         Next
     97         For i = 0 To config.save_path.Count-1
     98             If Not fso.FolderExists(config.save_path.Item(i)) Then
     99                 WScript.Echo "[配置文件错误]:保存路径不存在!"
    100                 Call Quit_Job(False)
    101             End If
    102         Next
    103         ReadConfig = True
    104     Else
    105         ReadConfig = False
    106     End If
    107 If Err.Number <> 0 Then
    108     ReadConfig = False
    109 End If
    110 End Function
    111 
    112 Sub Monitor_Total()
    113     regex.Pattern = "(" & config.author_prefix & ")d+"
    114     If monitor.Item(1) = "" Then
    115         For i = 2 To monitor.Count
    116             If monitor.Item(i) <> "" Then
    117                 clone = regex.Replace(monitor.Item(i), "$1" & 1)
    118                 monitor.Item(1) = clone
    119                 Call fso.CopyFile(monitor.Item(i), monitor.Item(1))
    120                 Exit For
    121             End If
    122         Next
    123     End If
    124     
    125     For i = 2 To monitor.Count
    126         If monitor.Item(i) = "" Then
    127             clone = regex.Replace(monitor.Item(i-1), "$1" & i)
    128             monitor.Item(i) = clone
    129             Call fso.CopyFile(monitor.Item(i-1), monitor.Item(i))
    130         End If
    131     Next
    132 End Sub
    133 
    134 Sub Zoom_Rotate()
    135     Set imgproc = CreateObject("wia.imageprocess")
    136     'zoom
    137     Call imgproc.Filters.Add(imgproc.FilterInfos("Scale").FilterID)
    138     imgproc.Filters(1).Properties("MaximumWidth") = config.zoom_width
    139     imgproc.Filters(1).Properties("MaximumHeight") = config.zoom_width
    140     'rotate
    141     Call imgproc.Filters.Add(imgproc.FilterInfos("RotateFlip").FilterID)
    142     imgproc.Filters(2).Properties("RotationAngle") = 0
    143     'apply
    144     Set imgfile = imgproc.Apply(imgfile)
    145 End Sub
    146 
    147 Sub Quit_Job(force)
    148     If force = True Then
    149         MsgBox "[使用方法]: 将文件夹拖放到脚本上,开始重命名图片。", vbInformation, "Image Auto-Handler v0.1"
    150     End If
    151     Set fso = Nothing
    152     Set imgfile = Nothing
    153     Set sdp = Nothing
    154     Set regex = Nothing
    155     Set monitor = Nothing
    156     Call WScript.Quit()
    157 End Sub
    158 
    159 Class Config_Class
    160     Private my_zoom_width
    161     Private my_zoom_height
    162     Private my_rotation_angle
    163     Private my_save_path
    164     Private my_author_prefix
    165     Private my_monitor_total
    166     
    167     Public Sub init_config(xmlsource)
    168         Set xml = CreateObject("msxml2.domdocument")
    169         Call xml.load(xmlsource)
    170         
    171         Set zoom = xml.getElementsByTagName("zoom").item(0)
    172         my_zoom_width = zoom.attributes.getNamedItem("width").text
    173         my_zoom_height = CInt(zoom.attributes.getNamedItem("height").text)
    174         
    175         Set rotation = xml.getElementsByTagName("rotation").item(0)
    176         my_rotation_angle = rotation.attributes.getNamedItem("angle").text
    177         
    178         Set save = xml.getElementsByTagName("save").item(0)
    179         Set my_save_path = CreateObject("scripting.dictionary")
    180         For i = 0 To save.childNodes.length - 1
    181             Call my_save_path.Add(i, save.childNodes.item(i).text)
    182         Next
    183         
    184         Set author = xml.getElementsByTagName("author").item(0)
    185         my_author_prefix = author.attributes.getNamedItem("prefix").text
    186         
    187         Set xml_monitor = xml.getElementsByTagName("monitor").item(0)
    188         my_monitor_total = xml_monitor.attributes.getNamedItem("total").text
    189     End Sub
    190     
    191     Public Property Get zoom_width
    192         zoom_width = my_zoom_width
    193     End Property
    194     
    195     Public Property Get zoom_height
    196         zoom_height = my_zoom_height
    197     End Property
    198     
    199     Public Property Get rotation_angle
    200         rotation_angle = my_rotation_angle
    201     End Property
    202     
    203     Public Property Get save_path
    204         Set save_path = my_save_path
    205     End Property
    206     
    207     Public Property Get author_prefix
    208         author_prefix = my_author_prefix
    209     End Property
    210     
    211     Public Property Get monitor_total
    212         monitor_total = my_monitor_total
    213     End Property
    214 End Class
  • 相关阅读:
    [HNOI2015]亚瑟王(概率dp)
    [IOI1998]Polygon(区间dp)
    [SCOI2003]字符串折叠(区间dp)
    [BJOI2006]狼抓兔子(网络流)
    [NOIP2017普及组]跳房子(二分,单调队列优化dp)
    洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom(Tarjan)
    [SCOI2010]股票交易(单调队列优化dp)
    [POJ1821]Fence(单调队列优化dp)
    [Luogu2365]任务安排(斜率优化)
    股神小L
  • 原文地址:https://www.cnblogs.com/lichmama/p/4928612.html
Copyright © 2011-2022 走看看