Поместите изображение водяного знака на другие изображения (C#, ASP.Net)



Как добавить изображение водяного знака на другие изображения?



Я могу поместить текст на изображение в виде водяного знака, но теперь у меня есть изображение, которое я хотел бы поместить туда вместо текста. Как это сделать в C#?

Просто еще раз, чтобы быть точным, у меня есть изображение X, и я хочу использовать его в качестве символа водяного знака. Я хочу, чтобы этот символ появлялся на всех моих изображениях, когда они будут показаны на моем веб-сайте. Таким образом, у меня будет изображение X с водяными знаками на изображении Y и Z.



Вот код, который у меня сейчас есть. создает водяной знак:



public static void AddWaterMark(MemoryStream ms, string watermarkText, MemoryStream outputStream)
{
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
Graphics gr = Graphics.FromImage(img);
Font font = new Font("Tahoma", (float)40);
Color color = Color.FromArgb(50, 241, 235, 105);
double tangent = (double)img.Height / (double)img.Width;
double angle = Math.Atan(tangent) * (180 / Math.PI);
double halfHypotenuse = Math.Sqrt((img.Height * img.Height) + (img.Width * img.Width)) / 2;
double sin, cos, opp1, adj1, opp2, adj2;

for (int i = 100; i > 0; i--)
{
font = new Font("Tahoma", i, FontStyle.Bold);
SizeF sizef = gr.MeasureString(watermarkText, font, int.MaxValue);

sin = Math.Sin(angle * (Math.PI / 180));
cos = Math.Cos(angle * (Math.PI / 180));
opp1 = sin * sizef.Width;
adj1 = cos * sizef.Height;
opp2 = sin * sizef.Height;
adj2 = cos * sizef.Width;

if (opp1 + adj1 < img.Height && opp2 + adj2 < img.Width)
break;
//
}

StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

gr.SmoothingMode = SmoothingMode.AntiAlias;
gr.RotateTransform((float)angle);
gr.DrawString(watermarkText, font, new SolidBrush(color), new Point((int)halfHypotenuse, 0), stringFormat);

img.Save(outputStream, ImageFormat.Jpeg);
}
635   2  

2 ответов:

В том же месте, где вы называете gr.Шнурок, вы также можете сделать gr.DrawImage(положение, размер, наложение изображения). Это помогает, если ваше изображение наложения загружается из файла PNG (с прозрачностью), чтобы произвести лучшее качество.

Вот еще одно решение, которое использует GDI+

Создание фотографии с водяными знаками с помощью GDI+ для .NET

Comments

    Ничего не найдено.