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

本文旨在与各位朋友们分享我是如何在项目中用C# “ps图片” 为网站生成同比例微缩图的解决方案。如有不足之处欢迎您指出。

一、技术概述


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

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

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

二、微缩图处理方法:


生成微缩图的核心方法:

CreateThumbnailPicture

/// <summary>
/// 图片微缩图处理
/// </summary>
/// <param name="srcPath">源图片</param>
/// <param name="destPath">目标图片</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
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"。关键代码片段如下:

1 //上传成功后网站内源图片相对路径
2   string relativePath = System.Web.HttpContext.Current.Request.ApplicationPath
3 + string.Format(@"Content/Upload/Images/{0}", fileName);
4
5 /*
6 比例处理
7 微缩图高度(DefaultHeight属性值为 400)
8 */
9 System.Drawing.Image img = System.Drawing.Image.FromFile(toFile);
10 int width = img.Width;
11 int height = img.Height;
12 float ratio = (float)width / height;
13
14 //微缩图高度和宽度
15   int newHeight = height <= DefaultHeight ? height : DefaultHeight;
16 int newWidth = height <= DefaultHeight ? width : Convert.ToInt32(DefaultHeight * ratio);
17
18 FileInfo generatedfile = new FileInfo(toFile);
19 string newFileName = "Thumb_" + generatedfile.Name;
20 string newFilePath = Path.Combine(generatedfile.DirectoryName, newFileName);
21
22 PictureHandler.CreateThumbnailPicture(toFile, newFilePath, newWidth, newHeight);
23
24 string thumbRelativePath = System.Web.HttpContext.Current.Request.ApplicationPath
25 + string.Format(@"/Content/Upload/Images/{0}", newFileName);
26
27 //返回原图和微缩图的网站相对路径
28   relativePath = string.Format("{0},{1}", relativePath, thumbRelativePath);
29
30 return relativePath;
  

三、程序运行截图:


上传前:

上传后:


    四、 小结:


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

如果您感兴趣可以在这里下载本例DEMO。

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

posted on 2010-12-03 08:36 ryanding 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ryanding/archive/2010/12/03/1894894.html

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

  1. 图片怎么转为html格式,ps图片怎么转换为html ps图片转换为html图文教程

    10.除此之外,我们还可以对某个切片进行进一步的切割,右键单击某个切片,然后选择"划分切片",打开划分切片对话框,设置横向和纵向的切片个数. 11.最后,一个关键的设置就是,右键单 ...

  2. 怎样快速抠图ps图片?这些小妙招了解一下

    最近有个做生活vlog记录的小伙伴发出提问,想给自己的照片抠图人像,更换个场景再p一些文字和效果做视频的封面图,其实一个视频除了内容,标题和封面图也至关重要,好的封面可以吸引观众想点击进去的心理,反之 ...

  3. PS图片无法保存ICO格式解决方法

    iCO作为一种图标文件格式,很多朋友想制作ICO图标却没有专业的ICO软件,实在很郁闷.尤其是一些汇编软件在做软件图标只支持ICO格式,这让人很蛋疼.Photoshop(以下简称:PS)作为公认的专业 ...

  4. 不会PS图片怎么批量调色

    现在很多实体制造业都转向线上,转向线上的第一步就是有自己的线上展示平台和微商城.小企业不能在一开始就能搭建好团队,那么非专业人士进行这种线下转线上,会有很多操作上问题.其中有个问题就是,不会PS图片怎 ...

  5. CVPR人工智能成精记,不但看穿PS,还能一键卸妆

    人工智能成精记,不但看穿PS,还能一键卸妆 最近CVPR2020的论文集合突然在Github上火了起来,笔者看到这个名为CVPR2020-Paper- Code 的项目(https://github. ...

  6. html商品图片放大插件,PS图片无损放大/图像处理插件-ON1 Resize 2018.5

    PS图片无损放大/图像处理插件-ON1 Resize 2018.5 书法字体2019.03.30ON1 Resize ON1 Resize 2018是专门为摄影师打造的一款功能强大的照片后期处理软件, ...

  7. PS图片无损放大插件 Alien Skin Blow Up 3 for Mac

    Alien Skin Blow Up 3 for Mac是一款运行在Mac平台上的PS图片无损放大滤镜插件,这款alienskin滤镜插件适用于ps和lr,使用alien skin blow up 3 ...

  8. 亲测好用的PS图片无损放大插件:Blow Up 3 for Mac

    Alien Skin Blow Up 3 for Mac是一款运行在Mac平台上的PS图片无损放大滤镜插件,这款alienskin滤镜插件适用于ps和lr,使用alien skin blow up 3 ...

  9. PS图片批量自动排版

    PS图片批量自动排版 依次点击菜单:"文件"-"自动"-"联系表II..." 源图像:选择你要处理的图片所在的文件夹: 缩览图:这里选择你想 ...

最新文章

  1. Delphi Qjson
  2. 【MCtalk活动推荐】IM快速搭建即时通讯实战
  3. Spring Boot系列二 Spring @Async异步线程池用法总结
  4. Flash 检测摄像头是否被占用
  5. 深刻理解Servlet运行机制和生命周期
  6. 换一种方式“写代码 编程序“,为自己的程序生涯找条新路
  7. Window服务器可安装的live messager最新版本-20090826
  8. 微擎应用笔记3--manifest.xml文件使用说明
  9. gm(GraphicsMagick)图片中文水印乱码问题
  10. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类
  11. 小学期实践心得(2)
  12. hdu 4836 The Query on the Tree(线段树or树状数组)
  13. day08面向对象-内部类、异常
  14. 最近遇到个关于接口的奇怪的问题
  15. 设计模式之简单工厂,工厂方法和抽象工厂
  16. 如何使用MISRA改进嵌入式编程
  17. OpenCalib: 自动驾驶多传感器的一个开源标定工具箱
  18. Excel中神秘的间接引用函数Indirect
  19. 缴费报修小程序开发制作功能介绍
  20. Django migrate 报错,通过fake 和 --fake-initial来修复

热门文章

  1. 机器人模仿人类动作一学就会,还能举一反三了 | 论文
  2. 在硅谷谈AI不够有创意,到苹果开吐槽大会 | 跟着李开复去硅谷
  3. 利用JS实现 TABLE的分页
  4. 客户端父进程提前死亡
  5. 如何利用msxsl绕过AppLocker?
  6. 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
  7. spring cloud config client refresh过程
  8. CentOS6安装Cisco模拟器Dynamips
  9. MVC进阶学习--HtmlHelper控件解析(三)
  10. 简单的横向ListView实现(version 4.0)