熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET中圖象處理過程詳

2013-11-13 10:35:26  來源: .NET編程 

    在使用ASP的時候我們時常要借助第三方控件來實現一些圖象功能而現在ASPNET的推出我們已經沒有必要再使用第三方控件來實現因為ASPNET已經具有強大的功能來實現一些圖象處理現在我們就來看看怎樣使用ASPNET的這一強大功能

    一SystemDrawing的使用

    以下的舉例將演示在內存中生成一張圖片然後將這張圖片通過網頁顯示出來需要了解的是我們這裡輸出的不是HTML效果而是實實在在的圖片(圖象)我們可以使用“另存為…”將輸出圖象保存起來

    我們先來看看效果

     我們看到這張圖片是一個漸變背景上有“看見了嗎”幾個字當然這個效果在PhotoShop等圖象處理軟件裡面很容易實現但是一些與數據庫結合 的應用我們不可能將所有圖片都事先設計出來這時候利用ASPNET來實現這些功能就顯得很重要了我們來看源代碼

    <%@pagelanguage="vb"contenttype="image/jpeg"%>

    <%@importnamespace="systemdrawing"%>

    <%@importnamespace="systemdrawingimaging"%>

    <%@importnamespace="systemdrawingdrawingd"%>

    <%

    清空Response

    responseclear

    建立一個*大小bit的BMP圖象

    dimimgOutputasNewbitmap(pixelformatformatbpprgb)

    根據以上BMP建立一個新圖象

    dimgasgraphics=graphicsfromimage(imgOutput)

    gclear(colorGreen)

    gsmoothingMode=smoothingModeantiAlias

    gdrawString("看見了嗎?"Newfont("黑體"fontstylebold)newSolidBrush(ColorWhite)NewpointF())

      gFillRectangle(NewlinearGradientBrush(Newpoint()Newpoint()colorfromArgb()

  colorfromArgb()))

    imgOutputsave(responseoutputstreamimageformatjpeg)

    gdispose()

    imgOutputdispose()

    responseend

    %>

     在以上代碼中我們看到和數據庫程序不同這裡專門引入了圖象處理的名字空間systemdrawing等程序首先清空了Response確保沒 有輸出然後程序建立了一個大的BMP圖象再在這個基礎上建立一個新圖象建立圖象以後我們首先“畫”出了字符串“看見了嗎”該字符 串為大粗黑體顏色為白色位置為(最後我們實現漸變效果

    以上舉例很簡單但是如果和數據庫結合我們可以實現很多使用ASP可能不敢想的效果

    二讀取和改變圖象文件大小

    讀取圖片?直接使用HTML不就可以了?當然可以我們這裡只是提供一種選擇和方法來實現這一功能具體這一功能的使用我們可能需要在實踐中更多的學習先來看程序源代碼

    <%importallrelevantnamespaces%>

    <%@importnamespace="System"%>

    <%@importnamespace="SystemDrawing"%>

    <%@importnamespace="SystemDrawingImaging"%>

    <%@importnamespace="SystemIO"%>

    <scriptrunat="server">

    SubsendFile()

    dimgasSystemDrawingImage=SystemDrawingImageFromFile(servermappath(request("src")))

    dimthisFormat=grawformat

    dimimgOutputasNewBitmap(gcint(request("width"))cint(request("height")))

    ifthisformatequals(systemdrawingimagingimageformatGif)then

    responsecontenttype="image/gif"

    else

    responsecontenttype="image/jpeg"

    endif

    imgOutputsave(responseoutputstreamthisformat)

    gdispose()

    imgOutputdispose()

    endsub

    SubsendError()

    dimimgOutputasNewbitmap(pixelformatformatbpprgb)

    dimgasgraphics=graphicsfromimage(imgOutput)

    gclear(coloryellow)

    gdrawString("錯誤!"Newfont("黑體"fontstylebold)systembrusheswindowtextNewpointF())

    responsecontenttype="image/gif"

    imgOutputsave(responseoutputstreamimageformatgif)

    gdispose()

    imgOutputdispose()

    endsub

    </script>

    <%

    responseclear

    ifrequest("src")=""orrequest("height")=""orrequest("width")=""then

    callsendError()

    else

    iffileexists(servermappath(request("src")))then

    callsendFile()

    else

    callsendError()

    endif

    endif

    responseend

    %>

     在以上的程序中我們看到兩個函數一個是SendFile這一函數主要功能為顯示服務器上的圖片該圖片的大小通過Width和Height設置 同時程序會自動檢測圖片類型另外一個是SendError這一函數的主要功能為服務器上的圖片文件不存在時顯示錯誤信息這裡很有趣錯誤信息也 是通過圖片給出的(如圖)

    以上的程序顯示圖片並且改變圖片大小現在我們將這個程序進一步顯示圖片並且保持圖片的長寬比例這樣和實際應用可能比較接近特別是需要制作電子相冊或者是圖片網站的時候比較實用我們先來看主要函數

    FunctionNewthumbSize(currentwidthcurrentheight)

    dimtempMultiplierasDouble

    ifcurrentheight>currentwidththen

    tempMultiplier=/currentheight

    Else

    tempMultiplier=/currentwidth

    endif

    dimNewSizeasNewSize(CInt(currentwidth*tempMultiplier)CInt(currentheight*tempMultiplier))

    returnNewSize

    EndFunction

    以上程序是增加的一個函數NewthumbSize該函數專門處理改變一會的圖片大小這個圖片的長寬和原圖片的長寬保持相同比例其他部分請參考上文程序代碼

    三畫圖特效

    如果只是將圖片顯示在網頁上這樣未免顯得簡單現在我們來進一步感受ASPNET的強大功能我們將學習圖象處理中常用的圖象反轉圖象切割圖象拉伸等技巧

    先來看看程序效果

    仔細看我們可以找到各種圖象處理效果現在我們來看看程序代碼

    <%@PageLanguage="vb"Debug="True"%>

    <%@importnamespace="systemdrawing"%>

    <%@importnamespace="systemdrawingimaging"%>

    <%@importnamespace="systemdrawingdrawingd"%>

    <%

    dimstrFilenameasstring

    dimiasSystemDrawingImage

    strFilename=servermappath("/chrisfsckjpg")

    i=SystemDrawingImageFromFile(strFilename)

    dimbasNewsystemdrawingbitmap(iwidthiheightpixelformatformatbpprgb)

    dimgasgraphics=graphicsfromimage(b)

    gclear(colorblue)

    旋轉圖片

    iRotateFlip(SystemDrawingRotateFlipTypeRotateFlipX)

    gdrawimage(iNewpoint())

    iRotateFlip(SystemDrawingRotateFlipTypeRotateFlipY)

    gRotateTransform()

    gdrawimage(iNewpoint())

    gRotateTransform()

    gdrawimage(iNewpoint())

    gRotateTransform()

    gdrawimage(iNewpoint())

    gRotateTransform()

    gdrawimage(iNewpoint())

    gRotateTransform()

    gRotateTransform()

    gdrawimage(iNewrectangle()Newrectangle(iwidthiheight)GraphicsUnitPixel)

    gRotateTransform()

    拉伸圖片

    gdrawimage(iNewrectangle()Newrectangle(iwidthiheight)GraphicsUnitPixel)

    gdrawimage(iNewrectangle()Newrectangle(iwidthiheight)GraphicsUnitPixel)

    gdrawimage(iNewrectangle()Newrectangle(iwidthiheight)GraphicsUnitPixel)

    切割圖片

    gdrawimage(iNewrectangle()GraphicsUnitPixel)

    gdrawimage(iNewrectangle()GraphicsUnitPixel)

    旋轉圖片

    iRotateFlip(SystemDrawingRotateFlipTypeRotateFlipX)

    gdrawimage(iNewrectangle()GraphicsUnitPixel)

    responsecontenttype="image/jpeg"

    bsave(responseoutputstreamimageformatjpeg)

    bdispose()

    %>

    在以上的程序中我們看到實現圖象處理的各種技巧仔細觀察我們可以知道旋轉圖片其實是用了一個RotateFlip方法而切割和拉伸圖片完全是通過設置DrawImage的不同參數來實現

    四總結

  ASPNET的圖象處理可以實現的功能很多我們在這裡其實只是簡單的介紹更多功能的應用需要
From:http://tw.wingwit.com/Article/program/net/201311/14065.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.