Posto l’immagine di filigrana su altre immagini (C#, ASP.Net)

Come faccio ad aggiungere una filigrana immagine su altre immagini?

Io sono in grado di posizionare il testo su un’immagine come un segno di acqua, ma ora ho un’immagine che vorrei mettere là, invece di testo. Come faccio in C#?

Solo una volta per essere precisi, ho immagine X e voglio utilizzare come filigrana simbolo. Voglio che questo simbolo appare in tutta la mia immagine quando viene visualizzato sul mio sito. In modo da avere un immagine X filigrana sull’immagine Y e Z.

Ecco il codice che ho attualmente che crea la filigrana:

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);
        }
  • Dal codice di cui sopra, si è verificato un problema con il formato gif foto.
  • ya, io non preoccupatevi con le Gif. Tutte le mie foto sono Jpg e il segno di acqua è un PNG così ho ignorato le persone.
InformationsquelleAutor Miles | 2009-08-03



2 Replies
  1. 12

    nello stesso luogo dove è chiamata gr.Coulisse, si può anche fare gr.DrawImage(posizione, dimensione, overlayImage). Aiuta se la tua immagine di sovrapposizione viene caricato da un file PNG (con trasparenza) per produrre la migliore qualità.

    • ahhhhh mi sento come un idiota ora… hahaha, Grazie

Lascia un commento