Der Deep Zoom Composer ist ein extrem cooles Werkzeug, wenn es darum geht hochauflösende und viele Bilder leicht und schnell darzustellen. Er erzeugt direkt eine fertige Silverlight-Anwendung inklusive Visual Studio Projekt.

Allerdings ist er nicht dazu geeignet Bilder automatisiert für Deep Zoom vorzubereiten. Aber selbst dafür liefert der Deep Zoom Composer die Lösung direkt mit. Und zwar befindet sich die gesamte Logik für die Deep Zoom Bilder Erstellung in der dll DeepZoomTools.dll. Diese wird mit dem Deep Zoom Composer automatisch mit ausgeliefert.

image

Bindet man diese DLL in sein Visual Studio Projekt ein, kann man die gesamte Automatisierung selber schreiben.

image

Um nun Bilder aus einem Verzeichnis inklusive Unterverzeichnisse automatisch in ein Deep Zoom Verzeichnis zu konvertieren sind nur wenige Zeilen Code notwendig.

using System.Collections.Generic;
using System.IO;
using Microsoft.DeepZoomTools;
 
namespace DeepZoomLogic
{
    public class DeepZoomHelper
    {
        public DeepZoomHelper(string sourceFolder, string destinationFolder)
        {
            _sourceFolder = sourceFolder;
            _destinationFolder = destinationFolder + "\\";
        }
 
        private string _sourceFolder;
        private string _destinationFolder;
 
        public void Start()
        {
            List<string> images = GetImagesInDirectory(_sourceFolder);
            List<string> data = new List<string>();
 
            foreach (var image in images)
            {
                ImageCreator ic = new ImageCreator();
 
                ic.TileSize = 256;
                ic.TileFormat = ImageFormat.Jpg;
                ic.ImageQuality = 0.95;
                ic.TileOverlap = 0;
 
                string target = _destinationFolder + "\\output_images\\" + Path.GetFileNameWithoutExtension(image);
 
                ic.Create(image, target);
                data.Add(Path.ChangeExtension(target, ".xml"));
            }
 
            CollectionCreator cc = new CollectionCreator();
 
            cc.TileSize = 256;
            cc.TileFormat = ImageFormat.Jpg;
            cc.MaxLevel = 8;
            cc.ImageQuality = 0.95;
 
            cc.Create(data, _destinationFolder + "\\output");
        }
 
        private static List<string> GetImagesInDirectory(string path)
        {
            return GetImagesInDirectory(new DirectoryInfo(path));
        }
 
        private static List<string> GetImagesInDirectory(DirectoryInfo di)
        {
            List<string> images = new List<string>();
 
            foreach (var fi in di.GetFiles("*.jpg"))
            {
                images.Add(fi.FullName);
            }
 
            foreach (var sub in di.GetDirectories())
            {
                images.AddRange(GetImagesInDirectory(sub));
            }
 
            return images;
        }
 
    }
}
 
 

Verbindet man das ganze noch mit einer kleinen Upload-Vorrichtung, hat man sein eigenes Fotoportal schon fast fertig.

Das ganze habe ich als kleine Sample-Anwendung zum Download bereit gestellt. Link siehe unten.

Schritt 1: Bilder hochladen

image

Schritt 2: Erstellen des Deep Zooms mittels der oben genannten Klasse

Schritt 3: Tada …

image

Download des Projektes