C# Resmi Webp Formatına Çevirme

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda C# ile bir resmi WEBP formatına çevirmeyi anlatacağım. Hadi başlayalım !
Table of Contents
WebP Formatı Tanımı ve ImageProcessor Kütüphanesi
WEBP formatı, Google tarafından JPG ve PNG formatlarının yerine geçmesi hedefiyle geliştirilmiş bir resim formatı ve hem kayıplı hemde kayıpsız sıkıştırma yapılabilmekte. WEBP formatının güzel yanı PNG ve JPG formatlarına göre resim boyutlarının çok daha düşük olması. 1 MB olan bir PNG formatındak resim WEBP formatına çevrildiğinde 100 KB’ye kadar düşebilmekte. Bizde şimdi C# ile herhangi bir formattaki resmi WEBP formatına çevireceğiz. Bunun için belki de en çok kullanılan kütüphanelerden olan ImageProcessor kütüphanesini kullanacağız. Bu kütüphaneye WEBP formatı için bir eklenti ekleyerek WEBP üzerine de çalışması sağlanıyor ve bu eklenti paketin adı ImageProcessor.Plugins.WebP. Ayrıca ImageProcessor paketi çalışabilmesi System.Drawing.Common kütüphanesine ihtiyaç duyduğundan bu 3 kütüphaneyi kullanacağız fakat bu kütüphaneler C# kurulumu ile beraber gelen kütüphanelerden olmadığı için elle indirip projemize dahil etmemiz gerekiyor. 3. parti bir kütüphaneyi C# projesine dahil etmenin en kolay ve hızlı yolu Nuget gibi bir paket yöneticisi olacaktır. Nuget, Visual Studio kurulumu ile beraber gelen ve Visual Studio üzerinde gömülü bir terminalde çalışan komutlar yardımıyla proje paketlerini yönetebildiğimiz bir araç ve Visual Studio üzerinden Tools > Nuget Package Manager > Package Manager Console adımlarını izleyerek kendisini açabiliyoruz. Nuget terminalini açtığımıza göre artık ihtiyacımız olan kütüphaneleri projemize dahil edebiliriz. Bunun için terminal ekranından şöyle bir komut gireceğiz;
Install-Package System.Drawing.Common
Install-Package ImageProcessor
Install-Package ImageProcessor.Plugins.WebP
Bu komutları ayrı ayrı çalıştırdıktan sonra Nuget, kütüphaneleri indirecek ve projemize ekleyerek kullanılabilir hale getirecektir. Kütüphaneleri projeye dahil etsekte kod yazacağımız C# dosyasında kullanamayacağız çünkü dosya içerisinde çağırmadık. Bu kütüphaneleri çağırıp dosya içerisinde de kullanılabilir hale getirmek için dosyanın en başına gelerek
using ImageProcessor;
using ImageProcessor.Plugins.WebP.Imaging.Formats;
kod satırlarını ekleyelim. Artık bu kütüphaneleri kullanabiliriz.
ImageFactory Sınıfı
ImageProcessor kütüphanesi ile resmi WEBP formatına çevirebilmek için ImageFactory sınıfını kullanacağız ve tabiki kullanabilmek için bu sınıfın yeni bir nesnesini türetmemiz gerekiyor. Yeni bir nesnesini constructor metodunu kullanarak yapabiliriz ve constructor metodu herhangi bir parametre istemiyor. Buna göre yeni bir ImageFactory sınıfı nesnesi türetelim.
ImageFactory imageFactory = new ImageFactory();
Nesneye Resmin Doldurulması
Yeni bir ImageFactory nesnesi türettik, şimdi sıra geldi WEBP formatına çevireceğimiz resmi bu sınıf içerisine doldurmaya. Bunun için imageFactory nesnesi altındaki Load() fonksiyonunu kullanacağız. Bu fonksiyon string tipte bir parametre istiyor ve bu parametre resmin yolu olması gerekiyor ve geriye de ImageFactory sınıfı nesnesi döndürüyor. Zaten ImageFactory sınıfı nesnesi üretmiştik, aynı nesneyi bu sefer Load() fonksiyonundan dönen nesne ile doldurabiliriz. Örneğin masaüstündeki resim.png dosyasını Load() fonksiyonuna parametre olarak gönderelim.
imageFactory = imageFactory.Load("c:/users/kullanici/desktop/resim.png");
WebP Formatına Çevirme
Şimdiki adımda resmi dönüştüreceğimiz formatı belirteceğiz. Bunun için imageFormat nesnesi altındaki Format() fonksiyonunu kullanacağız. Bu fonksiyon parametre olarak bir tane ISupportedImageFormat nesnesi istiyor fakat bu da ne derseniz ImageProcessor.Plugins.WebP kütüphanesi altındaki WebPFormat sınıfı. Bu sınıfın yeni bir nesnesini Format() fonksiyonuna parametre olarak gönderebiliyoruz. Ki zaten WebPFormat sınıfı da ISupportedImageFormat interfacesinden türetilmiş. WebPFormat sınıfının nesnesini türetip bir değişkene atamamıza gerek yok, o yüzden doğrudan Format() fonksiyonuna parametre gönderme aşamasında türetebiliriz. Format() fonksiyonu geriye yine ImageFactory nesnesi döndürüyor. Ve yine imageFactory değişkenini bu seferde Format() fonksiyonundan dönen değerle doldurabiliriz.
imageFactory = imageFactory.Format(new WebPFormat());
Dönüştürülen Resmin Kaydedilmesi
Herşeyi hazırladığımıza göre artık resmimizi kaydedebiliriz. Zaten bu aşamaya gelene kadar PNG formatında olan resmimiz WEBP formatına dönüştürülmüş ve bellekte bizim onu kaydetmemizi bekliyor. Yeni resmi kaydetmek için imageFormat nesnesi altındaki Save() fonksiyonunu kullanacağız ve bu fonksiyon string tipte hedef dosyanın yolunu parametre olarak istiyor. Parametre olarak göndereceğimiz dosya yolunda bir dosyanın olması zorunluluğu yok, zaten Save() fonksiyonu dosyayı oluşturacaktır. Örneğin resmi masaüstünde dosya.webp olarak kaydedelim;
imageFactory.Save("c:/users/kullanici/desktop/dosya.webp");
Tüm Kodlar
Evet an itibariyle resmimizi WEBP formatına çevirdik ve masaüstüne kaydettik, işlemlerimiz tamamlandı. Yazdığımız tüm kodları daha toplu olması için aşağıya bırakıyorum.
ImageFactory imageFactory = new ImageFactory();
imageFactory = imageFactory.Load("c:/users/kullanici/desktop/resim.png");
imageFactory = imageFactory.Format(new WebPFormat());
imageFactory.Save("c:/users/kullanici/desktop/dosya.webp");
Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.