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 # - Ajoute un filigrane à la photo de manière spéciale . Mes remerciements particuliers à 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).
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 d'image 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
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 à celle-ci:
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()
- Vérifiez si cette modification vous convient - J'ai modifié 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 l'alignement du 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;
}
Utilisation:
Bitmap watermark = new Bitmap(@"c:/watermark.png");
Bitmap bitmap = new Bitmap(@"c:/image.png");
bitmap = WatermarkImage(bitmap, watermark);
bitmap.Save(@"C:/watermarkedImage.png");