一、技术概述:

1.Ajax无刷新上传图片,详情请阅我的这篇文章.(jquery + c# ashx)

2.C#位图处理 System.Drawing.

3.最新demo支持IE7,IE8,FireFox.

二、微缩图处理方法:

生成微缩图的核心方法:

CreateThumbnailPicture

///

/// 图片微缩图处理

///

///

///

///

///

public static void CreateThumbnailPicture(string srcPath, string destPath, int width, int height)

{

//根据图片的磁盘绝对路径获取 源图片 的Image对象

System.Drawing.Image img = System.Drawing.Image.FromFile(srcPath);

//bmp: 最终要建立的 微缩图 位图对象. Bitmap bmp = new Bitmap(width, height);

//g: 绘制 bmp Graphics 对象

Graphics g = Graphics.FromImage(bmp);

g.Clear(Color.Transparent);

//为Graphics g 对象 初始化必要参数,很容易理解.

g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

//源图片宽和高

int imgWidth = img.Width;

int imgHeight = img.Height;

//绘制微缩图

g.DrawImage(img, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, imgWidth, imgHeight) , GraphicsUnit.Pixel);

ImageFormat format = img.RawFormat;

ImageCodecInfo info = ImageCodecInfo.GetImageEncoders().SingleOrDefault(i => i.FormatID == format.Guid);

EncoderParameter param = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);

EncoderParameters parameters = new EncoderParameters(1);

parameters.Param[0] = param;

img.Dispose();

//保存已生成微缩图,这里将GIF格式转化成png格式.

if (format == ImageFormat.Gif)

{

destPath = destPath.ToLower().Replace(".gif", ".png");

bmp.Save(destPath, ImageFormat.Png);

}

else

{

if (info != null)

{

bmp.Save(destPath, info, parameters);

}

else

{

bmp.Save(destPath, format);

}

}

img.Dispose();

g.Dispose();

bmp.Dispose();

}

部分代码已经加入注释,仔细阅读代码应该不难理解.下面介绍ashx中AJAX调用方法,我们在AJAX异步上传图片成功后对源图片进行"PS".关键代码片段如下:

//上传成功后网站内源图片相对路径

string relativePath = System.Web.HttpContext.Current.Request.ApplicationPath

+ string.Format(@"Content/Upload/Images/{0}", fileName);

/*

比例处理

微缩图高度(DefaultHeight属性值为 400)

*/

System.Drawing.Image img = System.Drawing.Image.FromFile(toFile);

int width = img.Width;

int height = img.Height;

float ratio = (float)width / height;

//微缩图高度和宽度

int newHeight = height <= DefaultHeight ? height : DefaultHeight;

int newWidth = height <= DefaultHeight ? width : Convert.ToInt32(DefaultHeight * ratio);

FileInfo generatedfile = new FileInfo(toFile);

string newFileName = "Thumb_" + generatedfile.Name;

string newFilePath = Path.Combine(generatedfile.DirectoryName, newFileName);

PictureHandler.CreateThumbnailPicture(toFile, newFilePath, newWidth, newHeight);

string thumbRelativePath = System.Web.HttpContext.Current.Request.ApplicationPath

+ string.Format(@"/Content/Upload/Images/{0}", newFileName);

//返回原图和微缩图的网站相对路径

relativePath = string.Format("{0},{1}", relativePath, thumbRelativePath);

return relativePath;

三、程序运行截图:

上传前:

上传后:

四、 小结:

我使用该方法主要是为了解决打印报表时由于图片大小没有合理的比例规范导致报表样式变形,同样该方法也适合网站或论坛由用户上传源图片生成微缩头像等.

最后希望本文能够帮助您解决开发中的类似问题.

PS图片上传图片 同时生成微缩图相关推荐

  1. C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo)

    C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo) 本文旨在与各位朋友们分享我是如何在项目中用C# "ps图片" 为网站生成同比例微缩图的解决方案.如有不足之 ...

  2. Asp.net mvc 实时生成缩率图到硬盘

    之前对于缩率图的处理是在图片上传到服务器之后,同步生成两张不同尺寸的缩率供前端调用,刚开始还能满足需求,慢慢的随着前端展示的多样化,缩率图已不能前端展示的需求,所以考虑做一个实时生成图片缩率图服务. ...

  3. asp.net中上传图片并生成小图片,自动添加水印的代码 .

    asp.net中上传图片并生成小图片,自动添加水印的代码 分类: .Net(C#) 2010-03-22 15:28 242人阅读 评论(0) 收藏 举报 /// 上传图片生成缩略图及水印 (来自:h ...

  4. 如何将图片序列化_PS如何将图片制作成gif动态图 ps制作gif动态图教程

    想要制作gif动态图片,为何不试试万能的PS呢!使用PS可以帮助用户快速轻松的制作gif动图,操作简单又方便.那么如何利用PS快速将图片做成gif动态图,其实方法是很简单,制作这种gif动图其实就是把 ...

  5. 【Python小工具】若干图片合并生成动态图(.gif)

    相信很多学生党.上班族在日常的学习.科研.办公中总会有一些比较特殊的需求,本人作为一个理工科(非计算机相关专业)学生和大家一样.有时好不容易找到了比较心仪的工具,却发现还要收费,质量和使用的便捷性也不 ...

  6. 图片表情制作,QQ斗图生成,搜狗图片搜索,自适应支持手机浏览

    介绍: 自适应支持手机浏览 图片表情制作 QQ斗图生成 搜狗图片搜索 可以给自己网站吸粉,源码是自适应的手机也可以浏览! 源码集成了搜狗搜索图片接口,可以一键搜索百万图片,还有表情制作等模块 网盘下载 ...

  7. 计算机硬件的配置的图片,鲁大师怎么生成电脑配置图

    其实鲁大师是可以生成电脑配置图的,那么鲁大师怎么生成电脑配置图呢?下面是学习啦小编收集整理的鲁大师怎么生成电脑配置图,希望对大家有帮助~~ 鲁大师生成电脑配置图的方法 工具/原料 能上网的电脑一台 鲁 ...

  8. 前端生成海报图:html2canvas 生成海报图/网页html转图片

    html2canvas 生成海报图 <html><head> <title>生成海报图Demo</title> </head><bod ...

  9. PHP使用Grafika合成图片,生成海报图

    需求背景: 在小程序上生成海报图,但在保存图片时,只能保存其中的小程序码图片,保存下来的图片过于单调,且无法确认该图片的作用性,所以需要调整为保存一整张海报图. 海报效果图: 需求分析: 在海报图中, ...

  10. php制作雷达图,用pChart生成雷达图图片

    需求 :由于工作需要,需要在一张背景图上添加这一张雷达图,之后图片可以在微信中长按保存.所以说我必须生成一张带有雷达图的图片 第一反应是用百度echars雷达图做动态显示,之后截图.考虑到工作量和效率 ...

最新文章

  1. G6 图可视化引擎——简介
  2. chrome跨域插件_Chrome 插件开发入门
  3. linux ssh客户端_WinSCP软件双系统(Win-Linux)文件传输教程
  4. 2021-08-13 初识servlet
  5. 机器学习实战——房价预测完整案例(建议收藏慢慢品)
  6. Opengl 之 窗口初体验 ------ By YDD的铁皮锅
  7. SPSS-相关分析(实例讲解)-数据分析
  8. Map获取key,value的方法
  9. (CVPR-2021)动态区域感知卷积
  10. Your brain expands and shrinks over time — these charts show how
  11. 记录由于未关闭加速器就关机而导致的再次启动后DNS配置错误
  12. uc浏览器电脑版翻译设置在哪 uc浏览器翻译网页教程
  13. Ubuntu20.04下配置Anaconda3+NVIDIA 驱动+Cuda11.1+Cudnn8.0.5
  14. “System.NullReferenceException:未将对象引用设置到对象的实例“解 析 引用他人文章
  15. H5互动游戏推广引流是做什么的?详解游戏引流推广方式
  16. python视频处理模块_python使用moviepy模块对视频进行操作
  17. Vue SSR 从入门到 Case Study
  18. 【matlab】信号时域分析之离散卷积
  19. 算法学习——剑指 Offer II 040. 矩阵中最大的矩形(Java实现)
  20. Newsfan FTP1软件保留区文件列表

热门文章

  1. 小猫爪:动手笔记01-FreeRTOS移植
  2. 【OpenCV】将图片黑色背景变成透明背景
  3. Infor咨询服务调研报告-市场现状、市场份额、市场定位及未来发展趋势
  4. R语言notes(1)——行列处理
  5. 7.0 站在生物学的角度看TypeScript类的继承
  6. D2RQ 的安装和基本使用
  7. 算法笔记方法论4 枚举法 详细笔记
  8. 网络墨卡托投影的前世今生
  9. IK分词器原理研磨及源码改造,更适用生产
  10. [软件人生]大白话讲述了近两百年中美之间的历史关系及tpp是什么