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

微信小程序多图片上传至SFTP服务器(后台通过SpringMVC进行图片接收) 前言 由于之前写过一篇关于微信小程序图片上传到后台的文章参考《微信小程序上传图片到服务器(java后台以及使用springmvc)》,有读者反馈关于多图片上传的问题,所以博主决定另外写一篇关于微信小程序多图片上传的文章,但是如果只是单纯写多图片上传的话,感觉上有点单调,因此决定结合上传至SFTP服务器来写这一篇文章,关于SFTP服务器的搭建请参考《CentOS通过使用自带SSH服务结合Nginx... 阅读详情

  本文旨在与各位朋友们分享我是如何在项目中用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。

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

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例) 本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。 阅读详情

相关推荐

CATIA P3 V5-6R2023在Windows 11 23H2上的稳定安装与系统级配置指南

CATIA是高端制造业核心的三维参数化设计平台,其运行依赖严格的系统底层支撑。理解CATIA的BRep几何内核原理与Windows子系统(如WSL、Hyper-V)的协同机制,是保障建模稳定性与计算精度的技术前提。CATIA Run-Time Library和OpenGL硬件加速能力共同决定了曲面重建、螺纹建模等关键操作的可靠性;而.NET Framework 3.5、VC++ 2022运行库及显卡Studio驱动的精准匹配,则构成工业软件在Win11环境落地的工程基础。本文聚焦于航空、轨交、能源等领域高频

weixin_30983353的博客 631

微信小程序服务器请求和上传数据,上传图片并展示,提交表单完整实例代码附效果图

微信小程序开发交流qq群   173683895  、 526474645 ;    承接微信小程序开发。扫码加微信。 为了方便大家,下面列出微信请求服务器常用的几种方式,并附上代码和注释。   一: GET请求(最常用的)   wx.request({ url: 'https://URL', //这里''里面填写你的服务器API接口的路径 data: {},...

a_靖的博客 14万+

UE5.3与Colosseum配置实战:从编译到问题解决的全流程指南

本文提供了在Windows系统下配置UE5.3与Colosseum仿真环境的全流程实战指南。详细介绍了从软件版本选择、源代码获取、编译脚本执行到解决常见编译错误和引擎崩溃问题的具体步骤,旨在帮助开发者高效搭建无人机、机器人等仿真平台,并顺利运行外部API控制。

weixin_29002595的博客 556

微信小程序裁剪图片后上传

上传图片的时候调起裁剪页面,裁剪后再回调完成上传; 图片裁剪直接用we-cropper https://github.com/we-plugin/we-cropper we-cropper使用详细方法参考博文https://we-plugin.github.io/we-cropper/#/ chooseImage: function(e){ var _this = th...

weixin_30265171的博客 1263

【全部更新】2025金地杯E题山西省大学生数学建模思路代码文章教学:高速铁路牵引供电系统能耗优化

问题四将列车的运行速度与发车时间同时作为优化变量,建立联合优化模型,目标是在考虑电价机制和调度均衡性的前提下,使牵引供电系统一天内的总电费支出最小。问题三在考虑分时电价机制的基础上,基于遗传算法优化列车速度组合,使牵引供电系统一天内的总电费支出最小。然而,在实际运营中,不同时段的电价差异显著,合理安排列车的运行时间与运行速度,可有效降低系统的总电费支出。本研究聚焦于高速铁路牵引供电系统的能耗与电费优化问题,针对列车运行速度、发车时间与分时电价的综合影响,提出一系列数学模型,以实现系统能耗与电费的最小化。

xb459149247的博客 5289

川崎机器人 AS语言基础运动指令表

    功能简介 动作方式 参考坐标系 位置特性 X,Y,Z 角度特性 O,A,T 指令格式(距离单位毫米,时间单位秒,角度单位度 示例1 示例2 运 动 指 令 JMOVE 以关节移动到目标点 关节移动方式 基础坐标系 不受控 伪随机动作 JMOVE 目标点 JMOVE #yd JMOVE put1 LMOVE 以直线移动到目标点 直线移动方式

喜欢自学并分享经验的技术宅 9348

微信小程序上传头像

最近在做微信小程序上传头像和上传照片功能就随手写一下代码: 上传头像html: js代码: uploadFile 提交默认是post方法,后台给的接口的时候需要后台做成pos。

Dreawer微信小程序联盟 3573

FC游戏Hack实战:从零开始修改游戏数据

本文以《忍者神龟3》为例,详细介绍了从零开始进行FC游戏Hack的完整实战流程。通过使用FCEUX模拟器和调试器,结合“递减法”精准定位生命值内存地址,并利用十六进制编辑器修改关键指令,最终实现“无限生命”效果。文章旨在引导读者理解游戏数据修改的核心原理与操作技巧,重温经典的同时深入计算机程序运行机制。

weixin_28366353的博客 356

C# Ajax上传图片同时生成微缩图(附Demo)

    1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)         2.C#位图处理  System.Drawing。         3.最新demo支持IE7,IE8,FireFox。 生成微缩图的核心方法:   CreateThumbnailPicture /// &lt;summary&gt; ...

liyonghui123的专栏 219

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4938

Python 领域 vllm 知识蒸馏的实践经验

知识蒸馏(Knowledge Distillation)是一种将大型、复杂模型(教师模型)的知识转移到小型、高效模型(学生模型)的技术。在大型语言模型(LLM)时代,这项技术变得尤为重要,因为它可以在保持模型性能的同时显著降低计算资源需求。本文专注于在Python生态中使用vLLM(Very Large Language Model)框架实现知识蒸馏的实践经验。vLLM是一个专为大型语言模型设计的高效推理和服务框架,它通过创新的注意力机制和内存管理技术,显著提高了LLM的推理速度。

AI Python 编程之道的博客 777

PS图片上传图片 同时生成微缩图

一、技术概述: 1.Ajax无刷新上传图片,详情请阅我的这篇文章.(jquery + c# ashx) 2.C#位图处理 System.Drawing. 3.最新demo支持IE7,IE8,FireFox. 二、微缩图处理方法: 生成微缩图的核心方法: CreateThumbnailPicture /// /// 图片微缩图处理 /// /// 源图片...

weixin_33774615的博客 102

从“能跑”到“好用”:一名 Python 开发者的工程化进阶之路【Python心得篇】

Python 早已不只是写脚本、跑数据的工具。后端服务AI Agent 编排层自动化平台核心语言数据与业务之间的“中枢层”区别只在于:你是用脚本方式,还是工程方式在写。如果你已经能写“能跑的 Python”,下一步,就是让它长期可跑、稳定可演进。Python 的真正价值不在于“写得快”,而在于能否支撑持续演进的工程实践。当代码从一次性脚本走向长期运行的系统,开发者必须从结构设计、职责拆分、性能意识和类型约束等方面进行系统性思考。

博客 1546

C#实战:PS图片上传图片 同时生成微缩图<转>

【IT168 技术文档】本文旨在与各位朋友们分享我是如何在项目中用C# “ps图片” 为网站生成同比例微缩图的解决方案。如有不足之处欢迎您指出。   一、技术概述:   1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)   2.C#位图处理 System.Drawing。   3.最新demo支持IE7,IE8,FireFox。   二、微缩图处理...

weixin_34195546的博客 113

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

微信小程序上传图片功能

微信小程序图片上传 采用的是基于struct的Java后台服务器,所以接受图片是由struct完成。 首先,在微信开发中,微信有自带的API 中wx.uploadfile能实现多图片上传功能,实现代码如下: wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 可以指定是原图...

weixin_36045276的博客 725

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传

今天遇到微信小程序的用户头像设置功能,做笔记. 先上gif: 再上代码: 小demo,代码很简单. 1.index.wxml [html] view plain copy    button style="margin:30rpx;" bindtap="chooseimage">获取图片button>  

大灰狼的小绵羊哥哥的博客 7879

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

微信小程序图片上传

uploadImage : function (){   wx.chooseImage({      count: 9, // 默认9      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都...

weixin_30802273的博客 163

微信小程序 - 上传图片组件

2019-01-08更新至1.1:修复了一些问题 2019-03-14 全面更新,推荐:https://www.cnblogs.com/cisum/p/10533559.html 使用了es8的async/await,注意正确导入“regenerate.js”的路径,使用说明在components/up-img/index.js 点击下载:图片上传组件 转载于:https:/...

weixin_30344131的博客 196
上一篇: 正则表达式30分钟入门教程
下一篇: C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考
beichen_
博客等级 码龄19年 17粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值