|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! 在利用ASP的时分,咱们经常要借助第三方控件来完成一些图像功效。而如今,ASP.NET的推出,咱们已没有需要再利用第三方控件来完成,由于ASP.NET 已具有壮大的功效来完成一些图像处置。如今,咱们就来看看如何利用ASP.NET的这一壮大功效。
1、System.Drawing的利用
以下的举例将演示在内存中生成一张图片,然后,将这张图片经由过程网页显示出来。需求懂得的是,咱们这里输入的不是HTML后果,而是实其实在的图片(图像),咱们可使用“另存为…”将输入图像保留起来。
咱们先来看看后果:
咱们看到,这张图片是一个突变后台上有“看见了吗”几个字,固然,这个后果在Photoshop等图像处置软件外面很轻易完成,然而,一些与数据库联合的使用咱们不成能将一切图片都事前设计出来,这时候候,使用ASP.NET来完成这些功效就显得很主要了。咱们来看源代码:
<%@ page language="vb" contenttype="image/jpeg" %>
<%@ import namespace="system.drawing" %>
<%@ import namespace="system.drawing.imaging" %>
<%@ import namespace="system.drawing.drawing2d" %>
<%
'清空Response
response.clear
'创立一个120*30巨细,24bit的BMP图像;
dim imgOutput as New bitmap(120, 30, pixelformat.format24bpprgb)
'依据以上BMP创立一个新图像;
dim g as graphics = graphics.fromimage(imgOutput)
g.clear(color.Green)
g.smoothingMode = smoothingMode.antiAlias
g.drawString("看见了吗?", New font("黑体",16,fontstyle.bold),new SolidBrush(Color.White),New pointF(2,4))
g.FillRectangle(New linearGradientBrush(New point(0,0), New point(120,30), color.fromArgb(0,0,0,0),color.fromArgb(255,255,255,255)),0,0,120,30)
imgOutput.save(response.outputstream, imageformat.jpeg)
g.dispose()
imgOutput.dispose()
response.end
%>
在以上代码中,咱们看到和数据库法式分歧,这里专门引入了图像处置的名字空间system.drawing等。法式起首清空了Response,确保没有输入;然后,法式创立了一个120乘30大的BMP图像,再在这个基本上创立一个新图像,创立图像今后,咱们起首“画”出了字符串“看见了吗”,该字符串为16大粗黑体,色彩为白色,地位为(2,4);最初,咱们完成突变后果。
以上举例很复杂,然而假如和数据库联合,咱们可以完成良多利用ASP能够不敢想的后果。
2、读取和改动图像文件巨细
读取图片?直接利用HTML不就能够了?固然可以,咱们这里只是供应一种选择和办法来完成这一功效,详细这一功效的利用,咱们能够需求在理论中更多的进修。先来看法式源代码:
<% ' import all relevant namespaces %>
<%@ import namespace="System" %>
<%@ import namespace="System.Drawing" %>
<%@ import namespace="System.Drawing.Imaging" %>
<%@ import namespace="System.IO" %>
<script runat="server">
Sub sendFile()
dim g as System.Drawing.Image = System.Drawing.Image.FromFile(server.mappath(request("src")))
dim thisFormat=g.rawformat
dim imgOutput as New Bitmap(g, cint(request("width")), cint(request("height")))
if thisformat.equals(system.drawing.imaging.imageformat.Gif) then
response.contenttype="image/gif"
else
response.contenttype="image/jpeg"
end if
imgOutput.save(response.outputstream, thisformat)
g.dispose()
imgOutput.dispose()
end sub
Sub sendError()
dim imgOutput as New bitmap(120, 120, pixelformat.format24bpprgb)
dim g as graphics = graphics.fromimage(imgOutput)
g.clear(color.yellow)
g.drawString("毛病!", New font("黑体",14,fontstyle.bold),systembrushes.windowtext, New pointF(2,2))
response.contenttype="image/gif"
imgOutput.save(response.outputstream, imageformat.gif)
g.dispose()
imgOutput.dispose()
end sub
</script>
<%
response.clear
if request("src")="" or request("height")="" or request("width")="" then
call sendError()
else
if file.exists(server.mappath(request("src"))) then
call sendFile()
else
call sendError()
end if
end if
response.end
%>
在以上的法式中,咱们看到两个函数,一个是SendFile,这一函数次要功效为显示办事器上的图片,该图片的巨细经由过程Width和Height设置,同时,法式会主动检测图片类型;别的一个是SendError,这一函数的次要功效为办事器上的图片文件不存在时,显示毛病信息,这里很风趣,毛病信息也是经由过程图片给出的(如图):
以上的法式显示图片而且改动图片巨细,如今,咱们将这个法式进一步,显示图片而且坚持图片的长宽比例,如许,和实践使用能够对照接近,出格是需求制造电子相册或是图片网站的时分对照适用。咱们先来看次要函数:
Function NewthumbSize(currentwidth, currentheight)
dim tempMultiplier as Double
if currentheight > currentwidth then
tempMultiplier = 200 / currentheight
Else
tempMultiplier = 200 / currentwidth
end if
dim NewSize as New Size(CInt(currentwidth * tempMultiplier), CInt(currentheight * tempMultiplier))
return NewSize
End Function
以上法式是增添的一个函数NewthumbSize,该函数专门处置改动一会的图片巨细,这个图片的长宽和原图片的长宽坚持不异比例。其他局部请参考上文法式代码。
3、绘图殊效
假如只是将图片显示在网页上,如许不免显得复杂。如今,咱们来进一步感触感染ASP.NET的壮大功效。咱们将进修图像处置中经常使用的图像反转、图像切割、图像拉伸等技能。
先来看看法式后果:
细心看,咱们可以找到各类图像处置后果。如今,咱们来看看法式代码:
<%@ Page Language="vb" Debug="True" %>
<%@ import namespace="system.drawing" %>
<%@ import namespace="system.drawing.imaging" %>
<%@ import namespace="system.drawing.drawing2d" %>
<%
dim strFilename as string
dim i as System.Drawing.Image
strFilename = server.mappath("./chris-fsck.jpg")
i = System.Drawing.Image.FromFile(strFilename)
dim b as New system.drawing.bitmap(i.width, i.height, pixelformat.format24bpprgb)
dim g as graphics = graphics.fromimage(b)
g.clear(color.blue)
'扭转图片
i.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipX)
g.drawimage(i,New point(0,0))
i.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipY)
g.RotateTransform(10)
g.drawimage(i,New point(0,0))
g.RotateTransform(10)
g.drawimage(i,New point(20,20))
g.RotateTransform(10)
g.drawimage(i,New point(40,40))
g.RotateTransform(10)
g.drawimage(i,New point(40,40))
g.RotateTransform(-40)
g.RotateTransform(90)
g.drawimage(i,New rectangle(100,-400,100,50),New rectangle(20,20,i.width-20,i.height-20),GraphicsUnit.Pixel)
g.RotateTransform(-90)
' 拉伸图片
g.drawimage(i,New rectangle(10,10,50,50),New rectangle(20,20,i.width-20,i.height-20),GraphicsUnit.Pixel)
g.drawimage(i,New rectangle(50,10,90,50),New rectangle(20,20,i.width-20,i.height-20),GraphicsUnit.Pixel)
g.drawimage(i,New rectangle(110,10,150,50),New rectangle(20,20,i.width-20,i.height-20),GraphicsUnit.Pixel)
'切割图片
g.drawimage(i,50,100,New rectangle(180,80,60,110),GraphicsUnit.Pixel)
g.drawimage(i,140,100,New rectangle(180,80,60,110),GraphicsUnit.Pixel)
'扭转图片
i.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipX)
g.drawimage(i,230,100,New rectangle(180,110,60,110),GraphicsUnit.Pixel)
response.contenttype="image/jpeg"
b.save(response.outputstream, imageformat.jpeg)
b.dispose()
%>
在以上的法式中,咱们看到完成图像处置的各类技能,细心察看,咱们可以晓得扭转图片实际上是用了一个RotateFlip办法;而切割和拉伸图片,完整是经由过程设置DrawImage的分歧参数来完成。
4、总结
ASP.NET的图像处置可以完成的功效良多,咱们在这里其实只是复杂的引见,更多功效的使用,需求咱们在理论中探索、总结。
无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的; |
|