2012-10-13 3 views
17

पर वॉटरमार्क जोड़ें, मुझे स्टैक ओवरफ्लो में सबसे अच्छा समाधान मिला। प्रश्न के लिए लिंक C# - Add watermark to the photo by special way है। एलेक्स Maslakov और adrift के लिए मेरा विशेष धन्यवाद।इंटरनेट पर किसी छवि पर स्वचालित रूप से वॉटरमार्क डालने के लिए समाधान खोजने के दौरान स्वचालित रूप से एक छवि

मैंने कुछ संशोधनों के साथ समाधान लागू किया, मैं छवि के केंद्र में वॉटरमार्क रखना चाहता हूं। के रूप में

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"); 
     } 

    } 

इस प्रकार है लेकिन वॉटरमार्क ठीक से छवि के केंद्र में नहीं रखा गया है मैं भटकते हुए द्वारा प्रदान समाधान संशोधित (छवि नीचे देखें)।

enter image description here

कृपया मुझे सही करें ...

धन्यवाद

+0

यह ईमानदारी से मेरे लिए केंद्रित लग जाते हैं। क्या आप उस वॉटरमार्क छवि को उस बॉक्स पर स्पष्टता के लिए बदल सकते हैं जहां यह बंद है? –

+0

कृपया संपादित फोटो देखें ... – Riskhan

उत्तर

12

अंत में मैं अपने प्रश्न का हल ... लगता है

को सही कोड जवाब

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"); 
     } 

    } 
पीछा कर रहा है

Furqan सफदर और Abdias सॉफ्टवेयर लिंक Problem in tiling image starting at different height using TextureBrush in C# करने के लिए मेरे धन्यवाद भी मुझे इस समस्या

और धन्यवाद हल करने के लिए मदद की सभी

अंत में

enter image description here

1

केंद्र संरेखण के लिए इस कोड का प्रयास करें:।

int x = (image.Width/2 - watermarkImage.Width/2); 
int y = (image.Height/2 - watermarkImage.Height/2); 
+0

मैंने आपके समाधान को लागू किया है, लेकिन परिणाम में कोई बदलाव नहीं है, संपादित फोटो – Riskhan

+0

जिस तरह से यह केंद्र गठबंधन है लेकिन किनारों से काट रहा है जो मुख्यतः ब्रश के कम आकार के कारण है। परीक्षण करने के लिए ब्रश आकार को बढ़ाने का प्रयास करें। –

+0

मूल की तुलना में गणना के परिणाम में कोई अंतर नहीं है। – K3N

5

आपका मूल सूत्र btw ठीक है,

क्या आप सुनिश्चित कर रहे हैं कि दोनों का संकल्प है वही? अपने वॉटरमार्क छवि बराबर की डीपीआई संकल्प सेट छवि के लिए:

watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); 

(मेरे सिर के ऊपर से है, लेकिन मुझे लगता है कि संपत्ति नाम सही हैं)।

अद्यतन:

आदेश SetResolution() का उपयोग करने के बिटमैप करने के लिए छवि से बदलें - देखें कि कहीं यह परिवर्तन आपके लिए काम करता है - मैं जिस तरह से वॉटरमार्क छवि पर तैयार की है बदल दिया है:

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

छवि का संकल्प 72 डीपीआई है और वॉटरमार्किमेज का संकल्प 96 डीपीआई है, मुझे ऊपर निर्दिष्ट फ़ंक्शन नहीं मिल रहा है, इसलिए वॉटरमार्किमेज का संकल्प मैन्युअल रूप से 72 डीपीआई में बदल गया , लेकिन परिणाम – Riskhan

+0

में कोई बदलाव नहीं है मैंने आपके दिनचर्या को वॉटरवार्क खींचने के तरीके में थोड़ा बदल दिया है। देखें कि क्या यह काम करता है। – K3N

+0

अंततः मुझे समस्या हल करने का समाधान मिला, कृपया मेरा अपना जवाब देखें। आपके समर्थन के लिए आपके लिए बहुत से धन्यवाद – Riskhan

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