İlkay İlknur

just a developer...

DeepZoomTools.dll ile Programatik Olarak Deep Zoom Image ve Deep Zoom Collection Oluşturma

Merhaba Arkadaşlar,

Web uygulamaları geliştirirken özellikle yüksek çözünürlüklü resimlerle çalışıyorsanız bu resimleri client tarafına yüklemek, bu resimler arasında gezinmek veya zoom yapmak gerek resim dosyalarının büyüklüğü nedeniyle gerekse klasik client-server yapısı nedeniyle oldukça zor olmakta. Bu noktada bana göre en iyi çözüm DeepZoom teknolojisini kullanmak. DeepZoom sayesinde hem resimlerin yüklenme süresi kısalmakta hemde kullanıcılara oldukça tatmin edici bir kullanıcı deneyimi sunmakta. Üstelik DeepZoom teknolojisini kullanmak için çok fazla kod yazmanıza bile gerek yok. Bunun yanında DeepZoom teknolojisi Microsoft'un sunduğu bir takım ürünlerde ve kontrollerde de aktif olarak DeepZoom kullanılmakta.(Bu araçlardan biri ile ilgili bu hafta içerisinde bir görsel ders hazırlamayı planlıyorum ve bu teknolojinin nerede ve hangi noktada aktif olarak kullanıldığını uygulamalı olarak görme imkanı yakalayacağız.) DeepZoom ile ilgili daha detaylı bilgiyi bu adresten alabilirsiniz.

Şimdi gelelim esas konumuza. Biraz öncede bahsettiğim gibi DeepZoom teknolojisini kullanmadan önce elimizde bulunan resimleri DeepZoom'un anlayabileceği gerektiği durumlarda da bu resimleri otomatik olarak yükleyeceği bir formata çevirmemiz gerekiyor. Normalde bu çevirme işlemini DeepZoom Composer adındaki uygulama otomatik olarak gerçekleştirmekte. Bunun yanında bir takım command-toollar yardımıyla da bu DeepZoom Image'ları elde etmemiz mümkün. Ancak özellikle dinamik olarak çalışan uygulamalarımızda örneğin bir resmin upload edildikten sonra DeepZoom formatına çevrilmesi gerekebilmekte. Bu noktada da yardımımıza DeepZoomTools isimli kütüphane yetişmekte. DeepZoomTools isimli kütüphaneye yukarıda belirttiğim command-toollarla birlikte şu adresten ulaşabilirsiniz.

DeepZoomTools Kütüphanesini Kullanalım

Microsoft tarafından bizlere sunulan DeepZoomTools isimli kütüphane ile başta Deep Zoom Image'ları ve Collection'ları oluşturmakla beraber pek çok işlem yapabilmekteyiz. Şimdi öncelikle bir Console uygulaması yaratalım ve DeepZoomTools isimli kütüphaneyi yarattığımız projeye referans edelim.

DeepZoomTools.dll içerisinde bulunan namespace ve tipler

Yukarıdaki resimden de göreceğiniz gibi Microsoft.DeepZoomTools içerisinde birçok tip bulunmakta. Biz bu yazımız süresince ise daha çok ImageCreator ve CollectionCreator tiplerini kullanıyor olacağız. İlk olarak bilgisayar üzerinde bulunan bir folder içerisindeki resimleri DeepZoom formatına çevireceğiz daha sonra ise çevirdiğimiz resimleri DeepZoom Collection altında toplayacağız. Bunun için ilk olarak app.config dosyasından parametrik olarak folder ismini okuyan ve bu folder içerisinde bulunan .jpg uzantılı resimleri geri döndüren bir metot yazarak uygulamaya giriş yapalım.

private static List<string> GetFiles()
{
string path = ConfigurationManager.AppSettings["Path"];
return Directory.GetFiles(path, "*.jpg").ToList();
}
Şimdi gelelim DeepZoom Image'larını oluşturacağımız metoda. Bu metot içerisinde adından da anlayacağımız üzere ImageCreator tipini kullanıyor olacağız. İlk olarak Bir adet ImageCreator örneği oluşturduktan sonra bu örnek üzerinden oluşturulacak Image'lar ile ilgili bir kaç özellik tanımlayacağız. Daha sonra ise Image'ları teker teker yine app.config içerisinde parametrik olarak aldığımız folder içerisinde oluşturacağız. Metodumuz ise şu şekilde olacak.
private static void CreateDeepZoomImages()
{
List<string> images = GetFiles();
List<string> createdImages = new List<string>();
string targetFolder = ConfigurationManager.AppSettings["TargetFolder"];
ImageCreator creator = new ImageCreator();
creator.TileSize = 256;
creator.TileFormat = ImageFormat.Jpg;
creator.TileOverlap = 0;
foreach (var image in images)
{
string filepath = Path.Combine(targetFolder, Path.GetFileNameWithoutExtension(image));
creator.Create(image, filepath);
createdImages.Add(Path.ChangeExtension(filepath, ".xml"));
}
CreateCollection(createdImages);
}
Böylece yukarıdaki metot ile folder içerisinde bulunan resimler DeepZoom formatına çevrilmiş bulunmakta. Ayrıca yarattığımız Image'lar ile ilgili bilgileri tutan xml dosyaları da createdImages isimli listte saklamış durumdayız. Çünkü bir sonraki adımda elimizde bulunan Image'ları koleksiyona çevirirken bu pathlere ihtiyaç duyacağız. :)

DeepZoom Collection Oluşturma

DeepZoom koleksiyonları oluşturmak amacıyla da yine adından da  anlayacağımız üzere CollectionCreator isimli tipi kullanıyor olacağız. Bu tip üzerinden ise yine bir takım değerleri verdikten sonra bu kez toplu bir şekilde elimizdeki list'i parametre olarak göndererek .dzc uzantılı collection dosyamızı elde edeceğiz.
private static void CreateCollection(List<string> createdImages)
{
string targetFolder = ConfigurationManager.AppSettings["TargetFolder"];
CollectionCreator collCreator = new CollectionCreator();
collCreator.TileSize = 256;
collCreator.TileFormat = ImageFormat.Jpg;
collCreator.ImageQuality = 0.95;
collCreator.TileOverlap = 0;
collCreator.MaxLevel = 8;
collCreator.Create(createdImages, Path.Combine(targetFolder,"CollectionOutput.dzc"));}
Tüm bu işlemler sonucunda ise app.config dosyamız içerisinde TargetFolder olarak bildirdiğimiz lokasyonda DeepZoom formatındaki Image'larımız ve koleksyionumuz oluşmuş olacaktır. Ayrıca gerek Image oluştururken gerekse koleksiyon oluştururken TileSize, TileFormat, TileOverlap gibi çeşitli değerler set ettik. Bu değerler ve diğer tüm propertyler ile ilgili bilgilere buradaki whitepaperdan ulaşabilirsiniz.   Not : Gerçekleştirdiğimiz uygulamayı aşağıdaki linki tıklayarak indirebilirsiniz. DeepZoomAutomation  Bir sonraki yazımızda görüşmek üzere, Hoşçakalın,


Yorum Gönder