Markus Bühler

Markus Bühler
30.07.2012
0 Kommentar(e)

http://imageresizing.net/ bietet lizenzfrei eine performante und stabile Komponente um Bilder in Grösse, Art und Erscheinung über URL Parameter zu verändern. Damit diese aber mit SharePoint funktioniert, muss ein eigenes Plugin erstellt werden.

Zuerst das Resultat
Originalbild unter der URL:
http://abc/Images/sempach.jpg


Das angepasste Bild mit der URL:
http://abc/Images/sempach.jpg?width=400&height=100&mode=crop


Das benötigte Plugin
Die Hauptaufgabe besteht darin, ein Plugin zu schreiben welches Bilder aus einer SharePoint Library für die Komponente liest und als Stream zurück gibt. Details wie ein Plugin geschrieben wird sind hier zu finden.

Als erstes die Klasse die das Plugin implementiert. Natürlich könnte sie sich auch in einem anderen namespace befinden, dass muss einfach das Plugin im Config File aber mit dem FQN registriert werden:
namespace ImageResizer.Plugins.Basic
{
  public class SpFileImageProcessor : IPlugin, IVirtualImageProvider
  {
     public IPlugin Install(Config c)
    {
       c.Plugins.add_plugin(this);
       return this;
    }

    public bool Uninstall(Config c)
    {
      c.Plugins.remove_plugin(this);
       return true; //True for successfull uninstallation...
    }

    public bool FileExists(string virtualPath, System.Collections.Specialized.NameValueCollection queryString)
     {
       return SpVirtualFile.GetSpVirtualFile(virtualPath).Exists;
     }

    public IVirtualFile GetFile(string virtualPath, System.Collections.Specialized.NameValueCollection queryString)
    {
       return SpVirtualFile.GetSpVirtualFile(virtualPath);
    }
  }

}

Dann unser Virtuelles SharePoint File welches dieses als Stream zurück gibt.
namespace ImageResizer.Plugins.Basic
{
  public class SpVirtualFile : IVirtualFile
  {
    public string VirtualPath { get; private set; }
    public SPFile SpFile { get; private set; }

    private SpVirtualFile(string virtualPath)
    {
      VirtualPath = virtualPath;
      SpFile = SPContext.Current.Site.RootWeb.GetFile(VirtualPath);
    }

    public static SpVirtualFile GetSpVirtualFile(string virtualPath)
    {
      return new SpVirtualFile(virtualPath);
    }

    public Stream Open()
    {
      return SpFile.OpenBinaryStream();
    }

    public bool Exists
    {
      get { return SpFile.Exists; }
    }
 }

}

und zum Schluss entsprechend im web.config registrieren.
...
<resizer>
  ...
  <plugins>
    <add name="SpFileImageProcessor" />   
    ...
  <plugins/>
<resizer/>

Randbemerkung
Wir haben eine SharePoint Solution welche ImageResizer inkl. SharePoint Plugin installiert und konfiguriert. Bei Interesse nehmen sie mit uns Kontakt auf.


Kommentar hinterlassen




 Security code

Kommentar(e)

Noch keine Kommentare.