Für eine Image-Gallery in in einem Community-Projekt, habe ich mir eine Lösung mit jQuery erstellt, um Bilder online zu bearbeiten.

Also hauptsächlich  Resize und Cropping.
Dabei enstand als kleines Nebenprodukt eine Lösung, bei der man einen Deepzoom auf große Bitmaps machen kann.

Eine einfache Version davon habe ich hier mal online gestellt:
DeepZoom mit jQuery

Download als ASP.NET - Website

Das verwendete Bild auf dem Server ist 7MB groß und wird durch ein setTimeout alle 150ms aktualisiert, sofern der Ausschnitt sich geändert hat.

 Realisiert ist das ganze mit jCrop das prinzipiell ein ähnliches Beispiel bereitstellt, allerdings läd der Client sich ein großes Image und es wird mittels css ein Ausschnitt gezeigt.

Mit meinem Beispiel werden die Positionen des Rahmens an den Server übermittelt und ein entsprechendes kleines Image gerenderd und zurückgegeben.

 

Das Cropping und resizing habe ich gestern schon beschrieben.

Die Request muss ich dann nur noch auswerten und und in meine Function werfen:

     7   img = Image.FromFile(Server.MapPath("test.png"))

    8         Dim h0 = CInt(Request("h0"))

    9         Dim w0 = CInt(Request("w0"))

   10 

   11         Dim faktorW = img.Width / w0

   12         Dim faktorH = img.Height / h0

   13 

   14 

   15 

   16 

   17         Dim X1 As Integer = CInt(Request("x1")) * faktorW

   18         Dim Y1 As Integer = CInt(Request("y1")) * faktorH

   19         Dim X2 As Integer = CInt(Request("x2")) * faktorW

   20         Dim Y2 As Integer = CInt(Request("y2")) * faktorH

   21 

   22         Dim targetWidth = 150

   23         Dim targetHeight = 200

   24 

   25 

   26 

   27         Response.ContentType = "image/jpg"

   28         Response.StatusCode = 200

   29         Dim img1 = cropAndResizeImage(img, _

   30                                     targetWidth, _

   31                                     targetHeight, _

   32                                     X1, _

   33                                     Y1, _

   34                                     X2, _

   35                                     Y2, _

   36                                     Imaging.ImageFormat.Jpeg)

   37         Response.BinaryWrite(img1.ToArray)

   38 

   39         Response.End()

 


 

 

Auch der Javascript Code ist überschaubar:

    7       var(api = null)

    8                 $(window).load(function() { initCrop() });

    9                 function initCrop() {

   10 

   11                     api = $.Jcrop('#rootImage', {

   12                         aspectRatio: .75,

   13                         minSize: [25, 0],

   14                         onChange: createPreview,

   15                         onSelect: createPreview()

   16                     });

   17 

   26                 }

   27 

   28                 function createPreview(c) {

   29                     previewUrl = 'zImages.aspx?t=1'

   30                                 + '&w0=' + $('#rootImage').width()

   31                                 + '&h0=' + $('#rootImage').height()

   32                                 + '&x1=' + c.x + '&y1=' + c.y + '&x2=' + c.x2

   33                                 + '&y2=' + c.y2 + '&w=' + c.w + '&h=' + c.h

   34                 }

   35 

   36                 var previewUrl = 'trans.gif'

   37                 var previewUrlLast = ''

   38                 var aktiv = window.setTimeout("updatePreview()", 50);

   39 

   40                 function updatePreview() {

   41                     if (previewUrl != previewUrlLast) {

   42             previewUrlLast = previewUrl

   43                         $('#previewImage').attr('src', previewUrl);

   44                     }

   45                     //Timer nicht zu kurz setzen!!

   46                     aktiv = window.setTimeout("updatePreview()", 150);

   47                 }    

 

 Ich liebe jQuery ;-)

 

 kick it on dotnet-kicks.de