在使用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的不同参数来实现
四总结
ASP
NET的图象处理可以实现的功能很多
我们在这里其实只是简单的介绍
更多功能的应用
需要