Белая полоса, а затем текстовый водяной знак? - PullRequest
0 голосов
/ 28 декабря 2011

Я хотел бы применить водяной знак к изображениям.

В данный момент я пытаюсь использовать этот код, но он не работает на изображениях разных размеров:

public void AddWaterMark(string filePath, string watermarkText)
{
    Image img = Image.FromFile(
        MapPath(GlobalVariables.UploadPath + "/" + filePath));
    Graphics gr = Graphics.FromImage(img);
    Font font = new Font("Alial Black", 40);
    Color color = Color.FromArgb(50, 241, 235, 105);
    StringFormat stringFormat = new StringFormat
                                {
                                    Alignment = StringAlignment.Near, 
                                    LineAlignment = StringAlignment.Near
                                };
    gr.SmoothingMode = SmoothingMode.AntiAlias;
    gr.DrawString(watermarkText, font, new SolidBrush(color), 
        new Point(20, img.Height - 60), stringFormat);

    img.Save(MapPath(GlobalVariables.UploadPath + "/w_" + filePath));
}

Иногдашрифт уходит снизу.Я хочу, чтобы это был текст вдоль нижней части изображения.

Как сделать так, чтобы он не уходил снизу?

Кроме того, я хочу немного улучшить его.Я хочу сделать белую, но прозрачную полосу по всей длине нижней части изображения, а затем написать поверх нее черный текст.Это возможно с рисунком?Итак, полоса в нижней части изображения, возможно, 60 пикселей в высоту, и в середине 60 пикселей, я хочу, чтобы текст был написан (выровнено по левому краю).

Я также нахожу, что текст перемещается вокругразмер файла

Вот изображение, которое работает: http://www.listerhome.com/fulldisplay.aspx?imageid=100055

Иногда, когда я загружаю изображения с более высоким разрешением, я получаю это: http://www.listerhome.com/fulldisplay.aspx?imageid=100060

1 Ответ

1 голос
/ 28 декабря 2011

Вы можете использовать функцию MeasureString для вычисления размера строки.

SizeF stringSize = gr.MeasureString(watermarkText, font, img.Width - 40);
gr.DrawString(watermarkText, font, new SolidBrush(color), 
    new RectangleF(20, img.Height - stringSize.Height, img.Width - 40, stringSize.Height),
    stringFormat);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...