Ajouter automatiquement un filigrane à une image

En cherchant une solution pour mettre automatiquement un filigrane sur une image sur Internet, j’ai trouvé la meilleure solution en stackoverflow. Le lien pour la question est C # – Ajouter un filigrane à la photo par un moyen spécial . Mes remerciements spéciaux à Alex Maslakov et à la dérive .

J’ai implémenté cette solution avec quelques modifications, je veux mettre un filigrane au centre de l’image. J’ai modifié la solution fournie par adrift comme suit

private void button1_Click(object sender, EventArgs e) { using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png")) using (Graphics imageGraphics = Graphics.FromImage(image)) using (Brush watermarkBrush = new TextureBrush(watermarkImage)) { int x = (image.Width - watermarkImage.Width)/2; int y = (image.Height - watermarkImage.Height)/2; imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), watermarkImage.Size)); image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); } } 

mais le filigrane n’est pas correctement placé au centre de l’image (voir l’image ci-dessous).

entrez la description de l'image ici

s’il vous plaît corrigez-moi…

Merci

Enfin, je trouve la solution à ma question …

La réponse au code corrigé est la suivante

  private void button1_Click(object sender, EventArgs e) { using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png")) using (Graphics imageGraphics = Graphics.FromImage(image)) using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage)) { int x = (image.Width / 2 - watermarkImage.Width / 2); int y = (image.Height / 2 - watermarkImage.Height / 2); watermarkBrush.TranslateTransform(x, y); imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width+1, watermarkImage.Height))); image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); } } 

mes remerciements à Furqan Safdar et Abdias Software Le lien Problème de mosaïque commençant à une hauteur différente en utilisant TextureBrush en C # m’a également aidé à résoudre ce problème

et merci à tous

enfin résultat

entrez la description de l'image ici

Votre formule originale est très bien.

vous assurez-vous que la résolution des deux est la même? Définissez la résolution en DPI de votre image en filigrane égale à l’image:

 watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); 

(du haut de ma tête, mais je pense que les noms de propriété sont corrects).

METTRE À JOUR:

Changez d’Image en Bitmap afin d’utiliser SetResolution() – Voyez si ce changement vous SetResolution() – J’ai changé la façon dont le filigrane est tracé sur l’image:

 private void button1_Click(object sender, EventArgs e) { using (Bitmap image = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) using (Bitmap watermarkImage = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\watermark.png")) using (Graphics imageGraphics = Graphics.FromImage(image)) { watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); int x = ((image.Width - watermarkImage.Width) / 2); int y = ((image.Height - watermarkImage.Height) / 2); imageGraphics.DrawImage(watermarkImage, x, y, watermarkImage.Width, watermarkImage.Height); image.Save("C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); } } 

Essayez ce code pour aligner le centre:

 int x = (image.Width / 2 - watermarkImage.Width / 2); int y = (image.Height / 2 - watermarkImage.Height / 2); 

Échantillon de travail:

 public static Bitmap WatermarkImage(Bitmap image, Bitmap watermark) { using (Graphics imageGraphics = Graphics.FromImage(image)) { watermark.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); int x = (image.Width - watermark.Width) / 2; int y = (image.Height - watermark.Height) / 2; imageGraphics.DrawImage(watermark, x, y, watermark.Width, watermark.Height); } return image; } 

Usage:

 Bitmap watermark = new Bitmap(@"c:/watermark.png"); Bitmap bitmap = new Bitmap(@"c:/image.png"); bitmap = WatermarkImage(bitmap, watermark); bitmap.Save(@"C:/watermarkedImage.png");