Makale Özeti

Bu makalemizde C# ile resim dosyalarının üzerine farklı resimleri eklemeyi ve resmin üzerine nasıl yazı yazabileceğimize değineceğiz.

Makale

Günümüzdeki bir çok sitede artık, resimlerin üzerinde kendi logolarını ya da sitelerinin isimlerini görebiliyoruz. Peki bu tip resimlere logolar ve yazılar nasıl ekleniyor olabilir? Sitede bulunan yüzlerce resmin hepsine aynı logoyu veya yazıyı site editörünün bir grafik programını kullanarak eklemesi oldukça zahmetli ve uzun bir işlem olacaktır. Sitedeki resimlerin sürekli olarak güncellendiğini de düşünürsek, yeni eklenen resimlerinde üzerinde bu işlemlerin yapılması yine işleri zorlaştıracaktır. Dolayısıyla bu tip işlemleri otomatiğe bağlamak, yani uygulama tarafında yazacağımız kodlarla çözmek sitemizin işleyişini hızlandıracaktır.

Bu makalemizde Graphics sınıfımızla, bir kaç basit adımda resimlerin üzerine yazı yazma ve bir resim dosyası eklemeyi göreceğiz. Graphics sınıfından oluşturulacak olan bir nesnenin DrawString metoduyla resmin üzerinde string değerleri yazdırabilir, DrawImage metoduyla da bir resim dosyasının eklenmesini sağlayabiliriz. Aşağıda yapacağımız örnekte bu metotların ne şekilde kullanılacağına değineceğiz.

Yeni bir web site projesi açalım ve sayfamıza 2 textbox, 1 buton ekleyelim.

Textboxların ID'lerini sırasıyla, txb_ResimURL, txb_ResimYazi şeklinde, butonun ID'sini ise btn_Resim olarak ayarlayalım.

txb_ResimURL kontrolümüze işlem yapılacak resmin adresini (HTTP URL bilgisini),
txb_ResimYazi kontrolümüze ise resmin üzerine yazılmasını istediğimiz stringin değerini belirteceğiz.

btn_Resim kontrolümüzün Click olayına ise aşağıdaki kodları yazıyoruz.

Not: System.Drawing ve System.Drawing.Drawing2D namespace'lerini projeye dahil etmeyi unutmayın.


        protected void btn_Resim_Click(object sender, EventArgs e)
        {
            try
            {
                Bitmap Resim = new Bitmap(new System.Net.WebClient().OpenRead(txb_ResimUrl.Text));

                Graphics g = Graphics.FromImage(Resim);

                g.SmoothingMode = SmoothingMode.Default;

                g.DrawString(txb_ResimYazi.Text, new Font("Verdana", 3, FontStyle.Bold), new SolidBrush(System.Drawing.Color.White), 10, 50);

                System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("~/yazgelistir_logo.gif"));

                g.DrawImage(img, 10, 10, 160, 40);

                Response.ContentType = "image/jpeg";

                Resim.Save(Response.OutputStream, Resim.RawFormat);
            }
            catch
            {
                Response.Write("HATA ¿");
            }

        }

Bu çalışmada resmimizi local makinamızdan değilde, uzaktaki sunucudan almış olduğumuzu hepinizin görmesini istiyorum.
Kodlarımızda dikkat edeceğiniz 3 kısım var.

g.DrawString() methoduyla resmin üzerine yazı yazdırdık. Bu methoda verdiğimiz parametlerin anlamı;
txb_ResimYazi.Text = Yazılacak yazının stringini verdik
new Font("Verdana", 3, FontStyle.Bold) = 3 em boyutunda, Verdana yazı tipinde ve kalın bir yazı olacağını belirttik,
new SolidBrush(System.Drawing.Color.White) = yazımızın rengini beyaz olacağını belirttik
10 = resmimizin üzerinde X koordinatını belirledik
50 = resmimizin üzerinde Y koordinatını belirledik

System.Drawing.Image img, satırında resmin üzerine ekleyeceğimiz logoyu, image sınıfından türetilen img değişkenimize, logomuzun çalışma root'unda bulunan yazgelistir.com'un logosunu verdik.

g.DrawImage() methoduyla resmin üzerine logoyu yerleştirdik. Bu methoda verdiğimiz parametrelerin anlamı sırasıyla:
img = logomuz
10 = X koordinatı
10 = Y koordinatı
160 = logomuzun genişliği
40 = logomuzun yüksekliği

Kodları açıkladıktan sonra sayfamızı çalıştırıyoruz ve sayfa çıktısına göz atıyoruz,

Sayfa ilk açıldığında resim URL ve yazımı belirttikten sonra Resmi İşle butonuna tıklıyorum.

Ardından;

Gördüğünüz gibi resmin üzerine, yazgelistir.com'un logosunu ve altınada ismimi yazdırmış oldum. Graphics sınıfının DrawString ve DrawImage metotları ile varolan bir resmin üzerine farklı bir resim dosyasının ve metinsel ifadelerin eklemesini sağlayabiliriz.

Bir sonraki makalemde görüşmek dileğiyle

Serkan PEKTAŞ