2008-09-21 9 views

Répondre

3

voici mon article complet: http://forums.asp.net/p/1323176/2634923.aspx

utiliser l'invite SDK commandes et accédez au dossier actif dans le dossier contenant le code source ci-dessous ... puis compiler le code en utilisant


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

cette volonté créer un exe dans le dossier .. l'exe accepte deux paramètres: ex.


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

cela itérer le dossier parent et tous les sous-dossiers. tous les jpegs trouvés seront tatoués avec l'image que vous spécifiez dans le code et copiés dans le dossier de destination. L'image originale restera intacte.

// 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