2009-08-03 12 views
17

मैं अन्य छवियों पर वॉटरमार्क छवि कैसे जोड़ूं?अन्य छवियों पर वॉटरमार्क छवि रखें (सी #, एएसपी.नेट)

मैं एक छवि पर एक पानी के निशान के रूप में पाठ रखने में सक्षम हूं लेकिन अब मेरे पास एक छवि है जिसे मैं पाठ के बजाय वहां रखना चाहता हूं। मैं इसे सी # में कैसे करूं?

विशिष्ट होने के लिए बस एक और बार, मेरे पास छवि एक्स है और मैं इसे वॉटरमार्क प्रतीक के रूप में उपयोग करना चाहता हूं। मैं अपनी वेबसाइट पर दिखाए जाने पर यह प्रतीक अपनी सभी छवियों पर दिखाना चाहता हूं। तो मैं छवि एक्स छवि Y और जेड

पर वॉटरमार्क

होगा यहाँ कोड मैं वर्तमान में है कि वॉटरमार्क बनाता है:

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); 
     } 
+0

अपने कोड से ऊपर का उपयोग करता है यह gif प्रारूप तस्वीर के साथ समस्या है। –

+0

या, मुझे जीआईएफ के साथ चिंता नहीं थी। मेरी सभी तस्वीरें जेपीजी हैं और पानी का निशान एक पीएनजी है इसलिए मैंने उनको अनदेखा कर दिया। – Miles

उत्तर

11
एक ही जगह है जहाँ आप gr.DrawString फोन में

, आप भी कर सकते हैं gr.DrawImage (स्थिति, आकार, ओवरले इमेज)। यह सर्वोत्तम गुणवत्ता का उत्पादन करने के लिए आपकी छवि-से-ओवरले को पीएनजी फ़ाइल (पारदर्शिता के साथ) से लोड किया जाता है।

+1

आह मैं अब एक मूर्खता की तरह महसूस करता हूं ... हाहाहा, धन्यवाद – Miles

संबंधित मुद्दे