2008-09-21 34 views

Trả lời

3

đây là bài viết đầy đủ của tôi: http://forums.asp.net/p/1323176/2634923.aspx

sử dụng Prompt SDK lệnh và điều hướng các thư mục tích cực đến thư mục chứa mã nguồn dưới đây ... sau đó biên dịch mã sử dụng


vbc.exe watermark.vb /t:exe /out:watermark.exe 

chí này tạo một exe trong thư mục .. exe chấp nhận hai tham số: ví dụ.


watermark.exe "c:\source folder" "c:\destination folder" 

này sẽ lặp qua các thư mục mẹ và tất cả thư mục con. tất cả các jpegs tìm thấy sẽ được watermarked với hình ảnh bạn chỉ định trong mã và sao chép vào thư mục đích. Hình ảnh gốc sẽ không bị ảnh hưởng.

// watermark.vb -


Imports System 
Imports System.Drawing 
Imports System.Drawing.Drawing2D 
Imports System.Drawing.Imaging 
Imports System.IO 

Namespace WatermarkManager 
    Class Watermark 
     Shared sourceDirectory As String = "", destinationDirectory As String = "" 

     Overloads Shared Sub Main(ByVal args() As String) 

      'See if an argument was passed from the command line 
      If args.Length = 2 Then 
       sourceDirectory = args(0) 
       destinationDirectory = args(1) 

       ' make sure sourceFolder is legit 
       If Directory.Exists(sourceDirectory) = False 
        TerminateExe("Invalid source folder. Folder does not exist.") 
        Exit Sub 
       End If 

       ' try and create destination folder 
       Try 
        Directory.CreateDirectory(destinationDirectory) 
       Catch 
        TerminateExe("Error creating destination folder. Invalid path cannot be created.") 
        Exit Sub 
       End Try 

       ' start the magic 
       CreateHierarchy(sourceDirectory,destinationDirectory) 

      ElseIf args.Length = 1 
       If args(0) = "/?" 
        DisplayHelp() 
       Else 
        TerminateExe("expected: watermark.exe [source path] [destination path]") 
       End If 
       Exit Sub 
      Else 
       TerminateExe("expected: watermark.exe [source path] [destination path]") 
       Exit Sub 
      End If 

      TerminateExe() 
     End Sub 

     Shared Sub CreateHierarchy(ByVal sourceDirectory As String, ByVal destinationDirectory As String) 

      Dim tmpSourceDirectory As String = sourceDirectory 

      ' copy directory hierarchy to destination folder 
      For Each Item As String In Directory.GetDirectories(sourceDirectory) 
       Directory.CreateDirectory(destinationDirectory + Item.SubString(Item.LastIndexOf("\"))) 

       If hasSubDirectories(Item) 
        CreateSubDirectories(Item) 
       End If 
      Next 

      ' reset destinationDirectory 
      destinationDirectory = tmpSourceDirectory 

      ' now that folder structure is set up, let's iterate through files 
      For Each Item As String In Directory.GetDirectories(sourceDirectory) 
       SearchDirectory(Item) 
      Next 
     End Sub 

     Shared Function hasSubDirectories(ByVal path As String) As Boolean 
      Dim subdirs() As String = Directory.GetDirectories(path) 
      If subdirs.Length > 0 
       Return True 
      End If 
      Return False 
     End Function 

     Shared Sub CheckFiles(ByVal path As String) 
      For Each f As String In Directory.GetFiles(path) 
       If f.SubString(f.Length-3).ToLower = "jpg" 
        WatermarkImage(f) 
       End If 
      Next 
     End Sub 

     Shared Sub WatermarkImage(ByVal f As String) 

      Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(f) 
      Dim graphic As Graphics 
      Dim indexedImage As New Bitmap(img) 
      graphic = Graphics.FromImage(indexedImage) 
      graphic.DrawImage(img, 0, 0, img.Width, img.Height) 
      img = indexedImage 

      graphic.SmoothingMode = SmoothingMode.AntiAlias 
      graphic.InterpolationMode = InterpolationMode.HighQualityBicubic 

      Dim x As Integer, y As Integer 
      Dim source As New Bitmap("c:\watermark.png") 
      Dim logo As New Bitmap(source, CInt(img.Width/3), CInt(img.Width/3)) 
      source.Dispose() 
      x = img.Width - logo.Width 
      y = img.Height - logo.Height 
      graphic.DrawImage(logo, New Point(x,y)) 
      logo.Dispose() 

      img.Save(destinationDirectory+f.SubString(f.LastIndexOf("\")), ImageFormat.Jpeg) 
      indexedImage.Dispose() 
      img.Dispose() 
      graphic.Dispose() 

      Console.WriteLine("successfully watermarked " + f.SubString(f.LastIndexOf("\")+1)) 
      Console.WriteLine("saved to: " + vbCrLf + destinationDirectory + vbCrLf) 

     End Sub 

     Shared Sub SearchDirectory(ByVal path As String) 
      destinationDirectory = destinationDirectory + path.SubString(path.LastIndexOf("\")) 
      CheckFiles(path) 
      For Each Item As String In Directory.GetDirectories(path) 
       destinationDirectory += Item.SubString(Item.LastIndexOf("\")) 

       CheckFiles(Item) 

       If hasSubDirectories(Item) 
        destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
        SearchDirectory(Item) 
        destinationDirectory += Item.SubString(Item.LastIndexOf("\")) 
       End If 
       destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
      Next 
      destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
     End Sub 

     Shared Sub CreateSubDirectories(ByVal path As String) 
      destinationDirectory = destinationDirectory + path.SubString(path.LastIndexOf("\")) 
      For Each Item As String In Directory.GetDirectories(path) 
       destinationDirectory += Item.SubString(Item.LastIndexOf("\")) 
       Directory.CreateDirectory(destinationDirectory) 
       Console.WriteLine(vbCrlf + "created: " + vbCrlf + destinationDirectory) 

       If hasSubDirectories(Item) 
        destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
        CreateSubDirectories(Item) 
        destinationDirectory += Item.SubString(Item.LastIndexOf("\")) 
       End If 
       destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
      Next 
      destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\")) 
     End Sub 

     Shared Sub TerminateExe(ByVal Optional msg As String = "") 
      If msg "" 
       Console.WriteLine(vbCrLf + "AN ERROR HAS OCCURRED //" + vbCrLf + msg) 
      End If 
      Console.WriteLine(vbCrLf + "Press [enter] to close...") 
      'Console.Read() 
     End Sub 

     Shared Sub DisplayHelp() 
      Console.WriteLine("watermark.exe accepts two parameters:" + vbCrLf + " - [source folder]") 
      Console.WriteLine(" - [destination folder]") 
      Console.WriteLine("ex." + vbCrLf + "watermark.exe ""c:\web_projects\dclr source"" ""d:\new_dclr\copy1 dest""") 
      Console.WriteLine(vbCrLf + "Press [enter] to close...") 
      Console.Read() 
     End Sub 
    End Class 
End Namespace 
Các vấn đề liên quan