VS.net图片加水印的代码
前文:实在是好久没有更新这个博客了。主要是本人现在不走技术路线,过了那个研究技术的年代了。现在做一些零散的很多事情。
今天突然收到猎头的邮件,看着心里激动啊。呵呵。当然,目前的状况也就看看,毕竟人生的目标和要求已经变了。此一时彼一时
但还是TMD激动啊。。。
翻了翻自己的文件夹,最近实在是没有什么原创的东西,把这个很久以前做的图片加水印的程序share出来,我做了些小封装。不算完全原创。
Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.IO
'code ex:
'Dim wm As New ImageDrawing.ImageModify
' thefile.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath("1.jpg")) //thisfile is a file upload html control
'Dim imgoutput As Image = System.Drawing.Bitmap.FromFile(System.Web.HttpContext.Current.Server.MapPath("1.jpg"))
' With wm
' .WaterMarkImagePath = System.Web.HttpContext.Current.Server.MapPath("a.gif")
' .LucencyPercent = 10
' .ModifyImagePath = System.Web.HttpContext.Current.Server.MapPath("1.jpg")
' .WaterImagePosition = ImageDrawing.ImageModify.WaterImagePositionType.RightBottom
' .OutPath = System.Web.HttpContext.Current.Server.MapPath("2.jpg")
' .DrawImage()
' End With
Namespace ImageDrawing
'/// <summary>
'/// 图片修改类,主要是用来保护图片版权的
'/// </summary>
Public Class ImageModify
#Region "member fields"
Private mModifyImagePath As String = ""
Private mWaterMarkImagePath As String = ""
Private mWaterImagePosition As WaterImagePositionType
Private mRightSpace As Int32
Private mBottoamSpace As Int32
Private mLucencyPercent As Int32 = 50
Private mOutPath As String = ""
#End Region
'///设置水印在原图像中的位置
Public Enum WaterImagePositionType
LeftTop
RightTop
Center
LeftBottom
RightBottom
Value
End Enum
#Region "propertys"
'/// <summary>
'/// 获取或设置要修改的图像路径
'/// </summary>
Public Property ModifyImagePath() As String
Get
Return mModifyImagePath
End Get
Set(ByVal Value As String)
mModifyImagePath = Value
End Set
End Property
'/// <summary>
'/// 获取或设置在画的图片路径(水印图片)
'/// </summary>
Public Property WaterMarkImagePath() As String
Get
Return mWaterMarkImagePath
End Get
Set(ByVal Value As String)
mWaterMarkImagePath = Value
End Set
End Property
'///设置水印在原图像中的位置
Public Property WaterImagePosition() As WaterImagePositionType
Get
Return mWaterImagePosition
End Get
Set(ByVal Value As WaterImagePositionType)
mWaterImagePosition = Value
End Set
End Property
'/// <summary>
'/// 获取或设置水印在修改图片中的右边距
'/// </summary>
Public Property RightSpace() As Int32
Get
Return mRightSpace
End Get
Set(ByVal Value As Int32)
mRightSpace = Value
End Set
End Property
'//获取或设置水印在修改图片中距底部的高度
Public Property BottoamSpace() As Int32
Get
Return mBottoamSpace
End Get
Set(ByVal Value As Int32)
mBottoamSpace = Value
End Set
End Property
'/// <summary>
'/// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比
'/// </summary>
Public Property LucencyPercent() As Int32
Get
Return mLucencyPercent
End Get
Set(ByVal Value As Int32)
If Value >= 0 And Value <= 100 Then
mLucencyPercent = Value
Else
mLucencyPercent = 50
End If
End Set
End Property
'/// <summary>
'/// 获取或设置要输出图像的路径
'/// </summary>
Public Property OutPath() As String
Get
Return mOutPath
End Get
Set(ByVal Value As String)
mOutPath = Value
End Set
End Property
#End Region
#Region "methods"
'/// <summary>
'/// 开始绘制水印/图片水印,可设置透明度等
'/// </summary>
Public Function DrawImage() As Boolean
Dim bolReturn As Boolean = True
Dim modifyImage As Image = Nothing
Dim drawedImage As Image = Nothing
Dim g As Graphics = Nothing
Try
'//建立图形对象
modifyImage = Image.FromFile(Me.ModifyImagePath)
drawedImage = Image.FromFile(Me.WaterMarkImagePath)
g = Graphics.FromImage(modifyImage)
'//获取要绘制图形坐标
Dim x As Int32
Dim y As Int32
Select Case Me.WaterImagePosition
Case WaterImagePositionType.Center
x = (modifyImage.Width - drawedImage.Width) / 2
y = (modifyImage.Height - drawedImage.Height) / 2
Case WaterImagePositionType.LeftBottom
x = 0
y = modifyImage.Height - drawedImage.Height
Case WaterImagePositionType.LeftTop
x = 0
y = 0
Case WaterImagePositionType.RightBottom
x = modifyImage.Width - drawedImage.Width
y = modifyImage.Height - drawedImage.Height
Case WaterImagePositionType.RightTop
x = modifyImage.Width - drawedImage.Width
y = 0
Case WaterImagePositionType.Value
x = modifyImage.Width - Me.RightSpace
y = modifyImage.Height - Me.BottoamSpace
Case Else
x = 0
y = 0
End Select
If x < 0 Then
x = 0
End If
If y < 0 Then
y = 0
End If
'//设置颜色矩阵
Dim colorMatrix As ColorMatrix = New ColorMatrix(New Single()() _
{New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, Convert.ToSingle(Me.LucencyPercent / 100.0F), 0}, _
New Single() {0, 0, 0, 0, 1}})
Dim imgAttr As ImageAttributes = New ImageAttributes
imgAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
'//绘制阴影图像
g.DrawImage(drawedImage, New Rectangle(x, y, drawedImage.Width, drawedImage.Height), 0, 0, drawedImage.Width, drawedImage.Height, GraphicsUnit.Pixel, imgAttr)
'//保存文件
Dim allowImageType As String() = {".jpg", ".gif", ".png", ".bmp", ".tiff", ".wmf", ".ico"}
Dim file As FileInfo = New FileInfo(Me.ModifyImagePath)
Dim imageType As ImageFormat = ImageFormat.Gif
Select Case file.Extension.ToLower()
Case ".jpg"
imageType = ImageFormat.Jpeg
Case ".gif"
imageType = ImageFormat.Gif
Case ".png"
imageType = ImageFormat.Png
Case ".bmp"
imageType = ImageFormat.Bmp
Case ".tif"
imageType = ImageFormat.Tiff
Case ".wmf"
imageType = ImageFormat.Wmf
Case ".ico"
imageType = ImageFormat.Icon
Case Else
imageType = ImageFormat.Jpeg
End Select
Dim ms As MemoryStream = New MemoryStream()
modifyImage.Save(ms, imageType)
Dim imgData As Byte() = ms.ToArray()
Dim fs As FileStream = Nothing
If Not Me.OutPath.Equals(String.Empty) Then
fs = New FileStream(Me.OutPath, FileMode.Create, FileAccess.Write)
Else
fs = New FileStream(Me.ModifyImagePath, FileMode.Create, FileAccess.Write)
End If
If Not fs Is Nothing Then
fs.Write(imgData, 0, imgData.Length)
fs.Close()
End If
Catch ex As Exception
bolReturn = False
Finally
End Try
Return bolReturn
End Function
'修改图片大小
Public Function SizeChange(ByVal intWidth As Int32, ByVal intHeight As Int32) As Boolean
Dim bolReturn As Boolean = True
Try
Dim modifyImage As Image = Image.FromFile(Me.ModifyImagePath)
'//
Dim imageOut As Image = modifyImage.GetThumbnailImage(intWidth, intHeight, Nothing, System.IntPtr.Zero)
'//保存文件
Dim allowImageType As String() = {".jpg", ".gif", ".png", ".bmp", ".tiff", ".wmf", ".ico"}
Dim file As FileInfo = New FileInfo(Me.ModifyImagePath)
Dim imageType As ImageFormat
Select Case file.Extension.ToLower()
Case ".jpg"
imageType = ImageFormat.Jpeg
Case ".gif"
imageType = ImageFormat.Gif
Case ".png"
imageType = ImageFormat.Png
Case ".bmp"
imageType = ImageFormat.Bmp
Case ".tif"
imageType = ImageFormat.Tiff
Case ".wmf"
imageType = ImageFormat.Wmf
Case ".ico"
imageType = ImageFormat.Icon
Case Else
imageType = ImageFormat.Jpeg
End Select
imageOut.Save(OutPath, imageType)
Catch ex As Exception
bolReturn = False
Finally
End Try
Return bolReturn
End Function
#End Region
#Region "new"
Public Sub New()
ModifyImagePath = ""
WaterMarkImagePath = ""
RightSpace = 0
BottoamSpace = 0
LucencyPercent = 50
OutPath = ""
mWaterImagePosition = WaterImagePositionType.LeftTop
End Sub
#End Region
End Class
End Namespace
调用部分:
Imports System.IO
Imports System.Drawing
Partial Class PicTest2
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
'//thefile是个file field html 控件
thefile.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath("BBS\SnkProductImages\1.jpg"))
Dim memstream As System.IO.MemoryStream = New System.IO.MemoryStream()
Dim imgoutput As System.Drawing.Image = System.Drawing.Bitmap.FromFile(System.Web.HttpContext.Current.Server.MapPath("BBS\SnkProductImages\1.jpg"))
'//修改成80×80大小
Dim imgoutput2 As System.Drawing.Image = imgoutput.GetThumbnailImage(80, 80, Nothing, System.IntPtr.Zero)
imgoutput2.Save(System.Web.HttpContext.Current.Server.MapPath("BBS\SnkProductImages\2.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)
Response.Write(thefile.PostedFile.FileName)
Response.Write("len:" + memstream.length.tostring())
imgoutput.Dispose()
imgoutput2.Dispose()
Response.Write("上传成功!")
Response.Write(System.Web.HttpContext.Current.Server.MapPath("BBS\SnkProductImages\2.jpg"))
'//加文字水印,注意,这里的代码和以下加图片水印的代码不能共存
Dim g As Graphics = Graphics.FromImage(imgoutput)
g.DrawImage(imgoutput, 0, 0, imgoutput.Width, imgoutput.Height)
Dim f As Font = New Font("Verdana", 32)
Dim b As Brush = New SolidBrush(Color.Red)
Dim addText As String = "SNK Star"
g.DrawString(addText, f, b, 10, 10)
g.Dispose()
imgoutput.Save(System.Web.HttpContext.Current.Server.MapPath("BBS\SnkProductImages\3.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub
End Class