Hallo,
wie erstelle ich ein Wasserzeichen ?
Dieser Frage habe ich mich heute gewidmet.
Ein Wasserzeichen ist ein Text oder ein Bild, welches das eigentliche Bild durchscheinen lässt.
Um ein Wasserzeichen in ein Bild zu bekommen legt man - im Prinzip nur zwei Bitmaps aufeinander.
Um ein Durchscheinen des eigentlichen Bildes zu bekommen, wird das Wasserzeichen (Text oder Bitmap) halbtransparent gemacht.
Hier der Code der Klasse:
Fragen und Kommentare zu Code sind erwünscht.
Ich werde, heute noch, eine kleine Beispielanwendung zu dieser Klasse auf meiner HP veröffentlichen.
EDIT:
Hab inzwischen eine Dll daraus gemacht.
(Ok OK OK - hab das auch ein kleinewenig erweitert !)
Guckst du !
Gruss
mikeb69
wie erstelle ich ein Wasserzeichen ?
Dieser Frage habe ich mich heute gewidmet.
Ein Wasserzeichen ist ein Text oder ein Bild, welches das eigentliche Bild durchscheinen lässt.
Um ein Wasserzeichen in ein Bild zu bekommen legt man - im Prinzip nur zwei Bitmaps aufeinander.
Um ein Durchscheinen des eigentlichen Bildes zu bekommen, wird das Wasserzeichen (Text oder Bitmap) halbtransparent gemacht.
Hier der Code der Klasse:
VB.NET-Quellcode
- 'ClassWatermark ist eine Klasse um Bilder einfach mit einem Wasserzeichen
- 'zu markieren.
- 'Erstellt von Michael Bernhard alias mikeb69
- 'Erstellt am 18.Mai 2008
- Public Class ClassWatermark
- Private _watermarkfont As Font
- Private _watermarktext As String
- Private _watermarklocation As Point
- Private _watermarkimage As Bitmap
- Private _watermarkshadow As Boolean
- Private _originalimage As Bitmap
- Private _combinedimage As Bitmap
- Private Const ALPHA As Byte = 128
- ''' <summary>Neue Instanz der Klasse ClassWatermark.</summary>
- ''' <param name="image">Bild welches das Wasserzeichen bekommen soll.</param>
- ''' <param name="text">Text, welcher als Wasserzeichen erscheinen soll.</param>
- ''' <param name="font">Zeichensatz, welcher verwendet werden soll.</param>
- ''' <param name="location">Position an der das Wasserzeichen eingebracht werden soll.</param>
- ''' <remarks></remarks>
- Public Sub New(ByVal image As Bitmap, ByVal text As String, ByVal font As Font, ByVal location As Point)
- _watermarktext = text
- _watermarkfont = font
- _watermarklocation = location
- _originalimage = image
- End Sub
- ''' <summary>Eigentliche Funktion zum Einbringen des Wasserzeichens.</summary>
- ''' <remarks>Wurde als Sub ausgeführt. Die Rückgabewerte stehen als Properties zur Verfügung.</remarks>
- Public Sub MakeWatermark()
- 'bitmap mit dem Wasserzeichen Image füllen
- _watermarkimage = New Bitmap(makewatermarkbitmap)
- 'Original Bitmap Clonen, damit diese unverändert bleibt.
- _combinedimage = _originalimage.Clone
- 'jetzt das wasserzeichen in das Original einbringen
- Using g As Graphics = Graphics.FromImage(_combinedimage)
- g.DrawImage(_watermarkimage, _watermarklocation)
- End Using
- End Sub
- ''' <summary>Diese Funktion erstellt das Wasserzeichen, welches später über das Originalimage
- ''' gelegt wird.</summary>
- ''' <returns>Image in Textgröße - um Rechenzeit zu sparen.</returns>
- ''' <remarks></remarks>
- Private Function makewatermarkbitmap() As Image
- 'Textgröße ermitteln.
- Dim s As Size = TextRenderer.MeasureText(_watermarktext, _watermarkfont)
- 'neue Bitmap erstellen
- Dim b As New Bitmap(s.Width, s.Height)
- 'original Resolution für dieses Bitmap übernehmen
- b.SetResolution(_originalimage.HorizontalResolution, _originalimage.VerticalResolution)
- Using g As Graphics = Graphics.FromImage(b)
- g.Clear(Color.Transparent)
- 'schatten zeichnen - wenn gewünscht
- If _watermarkshadow = True Then
- g.DrawString(_watermarktext, _watermarkfont, New SolidBrush(Color.FromArgb(ALPHA, 0, 0, 0)), 1, 1)
- End If
- 'echter text
- g.DrawString(_watermarktext, _watermarkfont, New SolidBrush(Color.FromArgb(ALPHA, 255, 255, 255)), 0, 0)
- 'text halbtransparent machen
- For y As Integer = 0 To b.Height - 1
- For x As Integer = 0 To b.Width - 1
- Dim c As Color = b.GetPixel(x, y)
- If c.R <> 0 Or c.G <> 0 Or c.B <> 0 Then
- b.SetPixel(x, y, Color.FromArgb(ALPHA, c.R, c.G, c.B))
- End If
- Next x
- Next y
- End Using
- Return b
- End Function
- ''' <summary>SaveImage speichert das angegebene Bild (Bitmap).</summary>
- ''' <param name="filename">Dateiname mit Pfad, unter welchem die Bitmap gespeichert werden soll.</param>
- ''' <returns>True wenn speichern erfolgreich - sonst False.</returns>
- ''' <remarks></remarks>
- Public Function SaveImage(ByVal filename As String) As Boolean
- Try
- _combinedimage.Save(filename)
- Return True
- Catch ex As Exception
- Return False
- End Try
- End Function
- #Region "Properties"
- ''' <summary>Gibt das Wasserzeichen als Image zurück - oder übernimmt dieses.</summary>
- ''' <remarks></remarks>
- Public Property WatermarkImage() As Image
- Get
- Return _watermarkimage
- End Get
- Set(ByVal value As Image)
- _watermarkimage = value
- End Set
- End Property
- ''' <summary>Gibt das Originalbild als Image zurück - oder übernimmt dieses.</summary>
- ''' <remarks></remarks>
- Public Property OriginalImage() As Image
- Get
- Return _originalimage
- End Get
- Set(ByVal value As Image)
- _originalimage = value
- End Set
- End Property
- ''' <summary>Gibt das fertige Bild als Image zurück.</summary>
- ''' <remarks></remarks>
- Public ReadOnly Property CombinedImage() As Image
- Get
- Return _combinedimage
- End Get
- End Property
- ''' <summary>Gibt den Wasserzeichentext zurück - oder setzt diesen.</summary>
- ''' <remarks></remarks>
- Public Property WatermarkText() As String
- Get
- Return _watermarktext
- End Get
- Set(ByVal value As String)
- _watermarktext = value
- End Set
- End Property
- ''' <summary>Gibt den Wasserzeichenfont zurück - oder setzt diesen.</summary>
- ''' <remarks></remarks>
- Public Property WatermarkFont() As Font
- Get
- Return _watermarkfont
- End Get
- Set(ByVal value As Font)
- _watermarkfont = value
- End Set
- End Property
- ''' <summary>Gibt zurück, ob das Wasserzeichen einen Schatten haben soll - oder setzt dies.</summary>
- ''' <remarks></remarks>
- Public Property WatermarkShadow() As Boolean
- Get
- Return _watermarkshadow
- End Get
- Set(ByVal value As Boolean)
- _watermarkshadow = value
- End Set
- End Property
- #End Region
- End Class
Fragen und Kommentare zu Code sind erwünscht.
Ich werde, heute noch, eine kleine Beispielanwendung zu dieser Klasse auf meiner HP veröffentlichen.
EDIT:
Hab inzwischen eine Dll daraus gemacht.
(Ok OK OK - hab das auch ein kleinewenig erweitert !)
Guckst du !
Gruss
mikeb69
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „mikeb69“ () aus folgendem Grund: Neuer Downloadlink Verweis zur Dll im Showroom