在ASP.NET中用另一个图像标记图像的最佳方法是在水印中创建水印?
时间:2020-03-06 14:29:54 来源:igfitidea点击:
有人知道吗希望能够即时将一个图像与另一个图像作为水印一起邮票,也可以做大批量。我们知道的任何类型的现有库或者技术都很棒。
解决方案
这将回答问题:
http://www.codeproject.com/KB/GDI-plus/watermark.aspx
祝你好运!
我曾经和ImageMagick在一起过好运。它也有一个用于.NET的API。
这是我的完整文章:http://forums.asp.net/p/1323176/2634923.aspx
使用SDK命令提示符并将活动文件夹导航到包含以下源代码的文件夹...然后使用编译代码
vbc.exe watermark.vb /t:exe /out:watermark.exe
这将在文件夹中创建一个exe。.exe接受两个参数:
前任。
watermark.exe "c:\source folder" "c:\destination folder"
这将遍历父文件夹和所有子文件夹。找到的所有jpeg都将使用我们在代码中指定的图像加水印,然后复制到目标文件夹。原始图像将保持不变。
// 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