当前位置: 首页 > 编程日记 > 正文

ASP.NET图象处理详解

作者:未知 请与本人联系

在使用ASP的时候,我们时常要借助第三方控件来实现一些图象功能。而现在,ASP.NET的推出,我们已经没有必要再使用第三方控件来实现,因为ASP.NET 已经具有强大的功能来实现一些图象处理。现在,我们就来看看怎样使用ASP.NET的这一强大功能。

一、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可能不敢想的效果。

二、读取和改变图象文件大小
读取图片?直接使用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,该函数专门处理改变一会的图片大小,这个图片的长宽和原图片的长宽保持相同比例。其他部分请参考上文程序代码。

三、画图特效
如果只是将图片显示在网页上,这样未免显得简单。现在,我们来进一步感受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的不同参数来实现。

四、总结
ASP.NET的图象处理可以实现的功能很多,我们在这里其实只是简单的介绍,更多功能的应用,需要我们在实践中摸索、总结。

相关文章:

IT工作者,你们的爱情是这样的吗?

今天在博客里看到了这篇文章&#xff0c;看完这个视频我随笔写了点自己的感受和看法&#xff0c; 视频链接在下方&#xff1a; http://leidu.blog.51cto.com/3245712/622534 很感谢90 男孩提供&#xff0c;建议IT人员看一下&#xff0c;看完写一下你们的感受吧&#xff01;…

平头哥玄铁处理器Linux新版本,5大亮点速览

来源 | 芯片开放社区为了便于 CPU 评估&#xff0c;系统集成&#xff0c;快速上手玄铁处理器 Linux 操作系统&#xff0c;平头哥更新了玄铁处理器 linux 版本&#xff0c;结合 gitlab 开源 CI/CD 系统&#xff0c;对已发布到开源社区的玄铁架构 CPU 相关的生态软件形成持续保障…

费用保险单,如何失焦时自动补零

费用&#xff0c;如何失焦时自动补零转载于:https://www.cnblogs.com/maojiayan/p/5606247.html

腾讯AI种番茄双丰收:参赛AI全胜专家,辽宁试点净利增千元

6月9日&#xff0c;腾讯宣布了两项AI农业领域进展。在研究侧&#xff0c;腾讯 AI Lab 与荷兰瓦赫宁根大学&#xff08;下称WUR&#xff09;联办的“第二届国际智慧温室种植挑战赛”&#xff08;下称比赛&#xff09;落幕。在全球疫情肆虐之时&#xff0c;复赛的五支队伍挑战用 …

在ASP.NET中值得注意的两个地方

在ASP.NET中ASPX页面的Page_Load事件有两个让人奇怪的地方&#xff0c;你应该记住它们&#xff1a; a.有时Page_Load事件在你的ASP.NET页面里会发生多次。这种情况发生的一个可能的原因是你把ASPX页面的AutoEvenWireup值设置成了True。如果是这样&#xff0c;那么在“Sub Page…

yii 级联删除

alter table 外键表 add constraint 级联删除名 foreign key (外键字段) references 主表名(主表字段)ON delete CASCADE go 转载于:https://blog.51cto.com/dasangshu/624605

iOS--优秀博客记录

感谢唐巧整理&#xff0c;我又加了一些备注。原地址&#xff1a;https://github.com/tangqiaoboy/iOSBlogCN 博客地址RSS地址psOneVs Denhttp://onevcat.com/atom.xml 一只魔法师的工坊http://blog.ibireme.com/feed/图片处理、YYKit破船之家http://beyondvincent.com/atom.xml…

linux环境下和网络服务相关的配置文件含义及如何配置

要建立一个安全Linux服务器就首先要了解Linux环境下和网络服务相关的配置文件的含义及如何进行安全的配置。那天查看服务器的eth0地址&#xff0c;后来想了一些问题&#xff0c;到家里就翻了翻以前的文档&#xff0c;无意中看到了这个&#xff0c;现在发布出来&#xff0c;希望…

ASP.NET保持用户状态的九种选择

2003-06-10 ■陶刚编译 ■yesky摘要&#xff1a;ASP.NET为保持用户请求之间的数据提供了多种不同的途径。你可以使用Application对象、cookie、hidden fields、Sessions或Cache对象&#xff0c;以及它们的大量的方法。决定什么时候使用它们有时很困难。本文将介绍了上述的技术&…

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

作者 | 杨秀璋&#xff0c;责编 | 夕颜 题图 | 视觉中国出品 | CSDN博客本篇文章主要讲解Python调用OpenCV实现图像平滑&#xff0c;包括四个算法&#xff1a;均值滤波、方框滤波、高斯滤波和中值滤波。全文均是基础知识&#xff0c;希望对您有所帮助。知识点如下&#xff1a;…

Laravel Lumen之Eloquent ORM使用速查-基础部分

使用Eloquent [eləkwənt] 时&#xff0c;数据库查询构造器的方法对模型类也是也用的&#xff0c;使用上只是省略了DB::table(表名)部分。 在模型中使用protected成员变量$table指定绑定的表名。<?php namespace App;use Illuminate\Database\Eloquent\Model;class Flight…

数据库连接字在Web.config里的用法

作者&#xff1a;未知 请速与本人联系在asp.net中的WEB程序的设置中我们必须用到Web.config来存储数据库连接字.事实上这是个很好的做法,因为可以省去我们很多的麻烦还可以帮助我们避免不必要的错位,是的很多情况下我就是这样做.它通过XML来记录这些信息.具体的是在....这个标…

重构ncnn,腾讯优图开源新一代移动端推理框架TNN

来源 | 腾讯优图从学界到工业界&#xff0c;“开源”已经成为AI领域的一个关键词。一方面&#xff0c;它以“授人以渔”的方式为AI构建了一个开放共进的生态环境&#xff0c;帮助行业加速AI应用落地&#xff1b;另一方面&#xff0c;在解决行业实际问题时持续更新和迭代&#x…

java读取文件

1 java8读取文本文件2 3 4 public static void java8ReadFileLines(String fileName) throws IOException {5 List lineList Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);6 7 for(String line:lineList){8 Sys…

常见 Datagrid 错误

Marcie Robillard DatagridGirl.comDatagrid 控件是 Microsoft ASP.NET 中功能最强、用途最广的 Web 控件之一&#xff0c;这一点已经得到了 ASP.NET 权威人士的认同。虽然 Datagrid 控件易于使用&#xff0c;但同样易于给使用者带来麻烦。以下是许多人所犯的一些错误&#xff…

干货!3 个重要因素,带你看透 AI 技术架构方案的可行性!

作者 | 房磊责编 | Carol出品 | AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;人工智能这几年发展的如火如荼&#xff0c;不仅在计算机视觉和自然语言处理领域发生了翻天覆地的变革&#xff0c;在其他领域也掀起了技术革新的浪潮。无论是在新业务上的尝试&…

mysql从另一张获取数据的方法

方法一 CREATE TABLE tmp AS SELECT a.id FROM t_user t JOIN temp a ON t.email a.email; 方法二 INSERT INTO t_user (id,username,PASSWORD,email,user_type,STATUS) SELECT id,REPLACE(email,,_),PASSWORD,email,0,0 FROM temp; 这两个sql都是从另外一张中获取的数据插入…

手动创建Spring项目 Spring framework

之前学习框架一直是看的视频教程&#xff0c;并且在都配套有项目源码&#xff0c;跟着视频敲代码总是很简单&#xff0c;现在想深入了解&#xff0c;自己从官网下载文件手动搭建&#xff0c;就遇到了很多问题记载如下。 首先熟悉一下spring的官方网站&#xff1a;http://spring…

使用 ASP+ DataGrid 控件来创建主视图/详细资料视图

Nikhil Kothari Microsoft Corporation 2000年8月简介 Microsoft Visual Studio.NET 的下一发行版包括 DataGrid Web 控件 (作为服务器控件的 Active Server Page (ASP) 套件的一部分)。 该控件提供用以根据数据源的内容来表示 HTML 的功能。 DataGrid 控件可以用于若干个只…

如何将广告始终定位到网页右下角

body{margin:0;border:0;height:100%;overflow-y:auto;}#test{display:block; bottom:3px; right:3px; width:130px; position:fixed;}/* 以下是写给IE6的 */* html #test{position:absolute;right:18px} * html{overflow-x:auto; overflow-y:hidden;}转载于:https://www.cnblo…

如何用 Python 将 Excel 表格转成可视化图形?| 原力计划

作者 | Waao666责编 | 王晓曼出品 | CSDN 博客前言大家知道&#xff0c;考研很大一部分也是考信息收集能力。每年往往有很多人就是在这上面栽跟头了&#xff0c;不能正确分析各大院校往年的录取信息&#xff0c;进而没能选择合适的报考院校。至于很多院校的录取信息是以 PDF 形…

Mac OS X 下mysql配置备忘

从windows过渡到os x确实需要适应&#xff0c;对于开发人员来讲更是这样。从官网下载目前最新版本的mysql 5.7.13&#xff0c;下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/刚开始非常顺利的安装完mysql&#xff0c;这时候我还没有意识到密码的问题&#xff0c;直…

为 ASP.NET Datagrid 创建自定义列

Marcie Robillard DatagridGirl.com 2003 年 9 月 简介 不得不承认&#xff0c;为 Microsoft ASP.NET 编写 Datagrid 代码包括大量的重复工作。尽管我深受该控件的困扰&#xff0c;但我还是不断寻找简化这类任务的捷径。谁都不愿意做重复的工作&#xff0c;对不对&#xff1…

不怕面试被问了!二叉树算法大盘点

作者 | BoCong-Deng题图 | 视觉中国出品 | CSDN博客树结构对于程序员来说应该不陌生&#xff0c;特别是二叉树&#xff0c;基本只要接触算法这一类的都一定会碰到的&#xff0c;所以我打算通过一篇文章&#xff0c;对二叉树结构的相关算法进行总结汇总&#xff0c;思路和代码实…

Field types

2019独角兽企业重金招聘Python工程师标准>>> Field types The generated Form class will have a form field for every model field. Each model field has a corresponding default form field. For example, a CharField on a model is represented as a CharFie…

【51CTO学院三周年】我的职业生涯有贵人相助--小强老师

个人认为功能测试做到一定年限之后&#xff0c;自然会遇到职业生涯中最大瓶颈——转型。对此&#xff0c;我的经历是这样的。话说那还是两年前&#xff0c;在搜索某问题的时候发现了51CTO&#xff0c;从中看到了很多大牛的博文和视频课程&#xff0c;顿时感觉自己找到宝了&…

在.NET中实现彩色光标,动画光标和自定义光标

作者&#xff1a;孟宪会 微软MVPTest.cs using System;using System.Drawing;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection; namespace ColorCursor{ public class Form1 : System.Windows.Forms.Form { [DllImport("us…

magento模板区块--首页content区块

首页替换 自定义首页content内容 在cms-->>page 新建首页 在content 里加入 -------------------------- <div class"col-left side-col"> <p class"home-callout"><a href"{{store direct_url"apparel/shoes/womens/anash…

遮挡也能识别?地平线提出时序信息提升行人检测准确度|​CVPR 2020

来源 | 驭势科技行人检测作为计算机视觉领域最基本的主题之一&#xff0c;多年来被广泛研究。尽管最先进的行人检测器已在无遮挡行人上取得了超过 90% 的准确率&#xff0c;但在严重遮挡行人检测上依然无法达到满意的效果。究其根源&#xff0c;主要存在以下两个难点&#xff1…

通过响应式web设计,使本站支持手机浏览

2019独角兽企业重金招聘Python工程师标准>>> 2014-01-28 14:49:14 现在越来越多的人通过手机来上网&#xff0c;手机由于屏幕尺寸的原因&#xff0c;当浏览为PC端浏览器设计的网页的时候&#xff0c;往往会出现各种各样的问题。 糊涂僧的这个小博客也一样&#xff0…