代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
图片缩放图片剪切功能
作者:
zhensoft163
/ 发布于
2014/4/10
/
513
图片缩放图片剪切功能
using system; using system.collections.generic; using system.text; using system.io; using system.drawing; using system.drawing.drawing2d; using system.drawing.imaging; namespace wujian.common { /// <summary> /// 图片处理类 /// </summary> public class ptimage { #region 正方型裁剪并缩放 /// <summary> /// 正方型裁剪 /// 以图片中心为轴心,截取正方型,然后等比缩放 /// 用于头像处理 /// </summary> /// <param name="postedfile">原图httppostedfile对象</param> /// <param name="filesaveurl">缩略图存放地址</param> /// <param name="side">指定的边长(正方型)</param> /// <param name="quality">质量(范围0-100)</param> public static void cutforsquare(system.web.httppostedfile postedfile, string filesaveurl, int side, int quality) { //创建目录 string dir = path.getdirectoryname(filesaveurl); if (!directory.exists(dir)) directory.createdirectory(dir); //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息) system.drawing.image initimage = system.drawing.image.fromstream(postedfile.inputstream, true); //原图宽高均小于模版,不作处理,直接保存 if (initimage.width <= side && initimage.height <= side) { initimage.save(filesaveurl, system.drawing.imaging.imageformat.jpeg); } else { //原始图片的宽、高 int initwidth = initimage.width; int initheight = initimage.height; //非正方型先裁剪为正方型 if (initwidth != initheight) { //截图对象 system.drawing.image pickedimage = null; system.drawing.graphics pickedg = null; //宽大于高的横图 if (initwidth > initheight) { //对象实例化 pickedimage = new system.drawing.bitmap(initheight, initheight); pickedg = system.drawing.graphics.fromimage(pickedimage); //设置质量 pickedg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; pickedg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //定位 rectangle fromr = new rectangle((initwidth - initheight) / 2, 0, initheight, initheight); rectangle tor = new rectangle(0, 0, initheight, initheight); //画图 pickedg.drawimage(initimage, tor, fromr, system.drawing.graphicsunit.pixel); //重置宽 initwidth = initheight; } //高大于宽的竖图 else { //对象实例化 pickedimage = new system.drawing.bitmap(initwidth, initwidth); pickedg = system.drawing.graphics.fromimage(pickedimage); //设置质量 pickedg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; pickedg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //定位 rectangle fromr = new rectangle(0, (initheight - initwidth) / 2, initwidth, initwidth); rectangle tor = new rectangle(0, 0, initwidth, initwidth); //画图 pickedg.drawimage(initimage, tor, fromr, system.drawing.graphicsunit.pixel); //重置高 initheight = initwidth; } //将截图对象赋给原图 initimage = (system.drawing.image)pickedimage.clone(); //释放截图资源 pickedg.dispose(); pickedimage.dispose(); } //缩略图对象 system.drawing.image resultimage = new system.drawing.bitmap(side, side); system.drawing.graphics resultg = system.drawing.graphics.fromimage(resultimage); //设置质量 resultg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; resultg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //用指定背景色清空画布 resultg.clear(color.white); //绘制缩略图 resultg.drawimage(initimage, new system.drawing.rectangle(0, 0, side, side), new system.drawing.rectangle(0, 0, initwidth, initheight), system.drawing.graphicsunit.pixel); //关键质量控制 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff imagecodecinfo[] icis = imagecodecinfo.getimageencoders(); imagecodecinfo ici = null; foreach (imagecodecinfo i in icis) { if (i.mimetype == "image/jpeg" || i.mimetype == "image/bmp" || i.mimetype == "image/png" || i.mimetype == "image/gif") { ici = i; } } encoderparameters ep = new encoderparameters(1); ep.param[0] = new encoderparameter(system.drawing.imaging.encoder.quality, (long)quality); //保存缩略图 resultimage.save(filesaveurl, ici, ep); //释放关键质量控制所用资源 ep.dispose(); //释放缩略图资源 resultg.dispose(); resultimage.dispose(); //释放原始图片资源 initimage.dispose(); } } /// <summary> /// 正方型裁剪 /// 以图片中心为轴心,截取正方型,然后等比缩放 /// 用于头像处理 /// </summary> /// <param name="postedfile">原图httppostedfile对象</param> /// <param name="filesaveurl">缩略图存放地址</param> /// <param name="side">指定的边长(正方型)</param> /// <param name="quality">质量(范围0-100)</param> public static void cutforsquare(system.io.stream fromfile, string filesaveurl, int side, int quality) { //创建目录 string dir = path.getdirectoryname(filesaveurl); if (!directory.exists(dir)) directory.createdirectory(dir); //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息) system.drawing.image initimage = system.drawing.image.fromstream(fromfile, true); //原图宽高均小于模版,不作处理,直接保存 if (initimage.width <= side && initimage.height <= side) { initimage.save(filesaveurl, system.drawing.imaging.imageformat.jpeg); } else { //原始图片的宽、高 int initwidth = initimage.width; int initheight = initimage.height; //非正方型先裁剪为正方型 if (initwidth != initheight) { //截图对象 system.drawing.image pickedimage = null; system.drawing.graphics pickedg = null; //宽大于高的横图 if (initwidth > initheight) { //对象实例化 pickedimage = new system.drawing.bitmap(initheight, initheight); pickedg = system.drawing.graphics.fromimage(pickedimage); //设置质量 pickedg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; pickedg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //定位 rectangle fromr = new rectangle((initwidth - initheight) / 2, 0, initheight, initheight); rectangle tor = new rectangle(0, 0, initheight, initheight); //画图 pickedg.drawimage(initimage, tor, fromr, system.drawing.graphicsunit.pixel); //重置宽 initwidth = initheight; } //高大于宽的竖图 else { //对象实例化 pickedimage = new system.drawing.bitmap(initwidth, initwidth); pickedg = system.drawing.graphics.fromimage(pickedimage); //设置质量 pickedg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; pickedg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //定位 rectangle fromr = new rectangle(0, (initheight - initwidth) / 2, initwidth, initwidth); rectangle tor = new rectangle(0, 0, initwidth, initwidth); //画图 pickedg.drawimage(initimage, tor, fromr, system.drawing.graphicsunit.pixel); //重置高 initheight = initwidth; } //将截图对象赋给原图 initimage = (system.drawing.image)pickedimage.clone(); //释放截图资源 pickedg.dispose(); pickedimage.dispose(); } //缩略图对象 system.drawing.image resultimage = new system.drawing.bitmap(side, side); system.drawing.graphics resultg = system.drawing.graphics.fromimage(resultimage); //设置质量 resultg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; resultg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //用指定背景色清空画布 resultg.clear(color.white); //绘制缩略图 resultg.drawimage(initimage, new system.drawing.rectangle(0, 0, side, side), new system.drawing.rectangle(0, 0, initwidth, initheight), system.drawing.graphicsunit.pixel); //关键质量控制 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff imagecodecinfo[] icis = imagecodecinfo.getimageencoders(); imagecodecinfo ici = null; foreach (imagecodecinfo i in icis) { if (i.mimetype == "image/jpeg" || i.mimetype == "image/bmp" || i.mimetype == "image/png" || i.mimetype == "image/gif") { ici = i; } } encoderparameters ep = new encoderparameters(1); ep.param[0] = new encoderparameter(system.drawing.imaging.encoder.quality, (long)quality); //保存缩略图 resultimage.save(filesaveurl, ici, ep); //释放关键质量控制所用资源 ep.dispose(); //释放缩略图资源 resultg.dispose(); resultimage.dispose(); //释放原始图片资源 initimage.dispose(); } } #endregion #region 固定模版裁剪并缩放 /// <summary> /// 指定长宽裁剪 /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸 /// </summary> /// <param name="postedfile">原图httppostedfile对象</param> /// <param name="filesaveurl">保存路径</param> /// <param name="maxwidth">最大宽(单位:px)</param> /// <param name="maxheight">最大高(单位:px)</param> /// <param name="quality">质量(范围0-100)</param> public static void cutforcustom(system.web.httppostedfile postedfile, string filesaveurl, int maxwidth, int maxheight, int quality) { //从文件获取原始图片,并使用流中嵌入的颜色管理信息 system.drawing.image initimage = system.drawing.image.fromstream(postedfile.inputstream, true); //原图宽高均小于模版,不作处理,直接保存 if (initimage.width <= maxwidth && initimage.height <= maxheight) { initimage.save(filesaveurl, system.drawing.imaging.imageformat.jpeg); } else { //模版的宽高比例 double templaterate = (double)maxwidth / maxheight; //原图片的宽高比例 double initrate = (double)initimage.width / initimage.height; //原图与模版比例相等,直接缩放 if (templaterate == initrate) { //按模版大小生成最终图片 system.drawing.image templateimage = new system.drawing.bitmap(maxwidth, maxheight); system.drawing.graphics templateg = system.drawing.graphics.fromimage(templateimage); templateg.interpolationmode = system.drawing.drawing2d.interpolationmode.high; templateg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; templateg.clear(color.white); templateg.drawimage(initimage, new system.drawing.rectangle(0, 0, maxwidth, maxheight), new system.drawing.rectangle(0, 0, initimage.width, initimage.height), system.drawing.graphicsunit.pixel); templateimage.save(filesaveurl, system.drawing.imaging.imageformat.jpeg); } //原图与模版比例不等,裁剪后缩放 else { //裁剪对象 system.drawing.image pickedimage = null; system.drawing.graphics pickedg = null; //定位 rectangle fromr = new rectangle(0, 0, 0, 0);//原图裁剪定位 rectangle tor = new rectangle(0, 0, 0, 0);//目标定位 //宽为标准进行裁剪 if (templaterate > initrate) { //裁剪对象实例化 pickedimage = new system.drawing.bitmap(initimage.width, (int)math.floor(initimage.width / templaterate)); pickedg = system.drawing.graphics.fromimage(pickedimage); //裁剪源定位 fromr.x = 0; fromr.y = (int)math.floor((initimage.height - initimage.width / templaterate) / 2); fromr.width = initimage.width; fromr.height = (int)math.floor(initimage.width / templaterate); //裁剪目标定位 tor.x = 0; tor.y = 0; tor.width = initimage.width; tor.height = (int)math.floor(initimage.width / templaterate); } //高为标准进行裁剪 else { pickedimage = new system.drawing.bitmap((int)math.floor(initimage.height * templaterate), initimage.height); pickedg = system.drawing.graphics.fromimage(pickedimage); fromr.x = (int)math.floor((initimage.width - initimage.height * templaterate) / 2); fromr.y = 0; fromr.width = (int)math.floor(initimage.height * templaterate); fromr.height = initimage.height; tor.x = 0; tor.y = 0; tor.width = (int)math.floor(initimage.height * templaterate); tor.height = initimage.height; } //设置质量 pickedg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; pickedg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //裁剪 pickedg.drawimage(initimage, tor, fromr, system.drawing.graphicsunit.pixel); //按模版大小生成最终图片 system.drawing.image templateimage = new system.drawing.bitmap(maxwidth, maxheight); system.drawing.graphics templateg = system.drawing.graphics.fromimage(templateimage); templateg.interpolationmode = system.drawing.drawing2d.interpolationmode.high; templateg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; templateg.clear(color.white); templateg.drawimage(pickedimage, new system.drawing.rectangle(0, 0, maxwidth, maxheight), new system.drawing.rectangle(0, 0, pickedimage.width, pickedimage.height), system.drawing.graphicsunit.pixel); //关键质量控制 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff imagecodecinfo[] icis = imagecodecinfo.getimageencoders(); imagecodecinfo ici = null; foreach (imagecodecinfo i in icis) { if (i.mimetype == "image/jpeg" || i.mimetype == "image/bmp" || i.mimetype == "image/png" || i.mimetype == "image/gif") { ici = i; } } encoderparameters ep = new encoderparameters(1); ep.param[0] = new encoderparameter(system.drawing.imaging.encoder.quality, (long)quality); //保存缩略图 templateimage.save(filesaveurl, ici, ep); //templateimage.save(filesaveurl, system.drawing.imaging.imageformat.jpeg); //释放资源 templateg.dispose(); templateimage.dispose(); pickedg.dispose(); pickedimage.dispose(); } } //释放资源 initimage.dispose(); } #endregion #region 等比缩放 /// <summary> /// 图片等比缩放 /// </summary> /// <param name="postedfile">原图httppostedfile对象</param> /// <param name="savepath">缩略图存放地址</param> /// <param name="targetwidth">指定的最大宽度</param> /// <param name="targetheight">指定的最大高度</param> /// <param name="watermarktext">水印文字(为""表示不使用水印)</param> /// <param name="watermarkimage">水印图片路径(为""表示不使用水印)</param> public static void zoomauto(system.web.httppostedfile postedfile, string savepath, system.double targetwidth, system.double targetheight, string watermarktext, string watermarkimage) { //创建目录 string dir = path.getdirectoryname(savepath); if (!directory.exists(dir)) directory.createdirectory(dir); //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息) system.drawing.image initimage = system.drawing.image.fromstream(postedfile.inputstream, true); //原图宽高均小于模版,不作处理,直接保存 if (initimage.width <= targetwidth && initimage.height <= targetheight) { //文字水印 if (watermarktext != "") { using (system.drawing.graphics gwater = system.drawing.graphics.fromimage(initimage)) { system.drawing.font fontwater = new font("黑体", 10); system.drawing.brush brushwater = new solidbrush(color.white); gwater.drawstring(watermarktext, fontwater, brushwater, 10, 10); gwater.dispose(); } } //透明图片水印 if (watermarkimage != "") { if (file.exists(watermarkimage)) { //获取水印图片 using (system.drawing.image wrimage = system.drawing.image.fromfile(watermarkimage)) { //水印绘制条件:原始图片宽高均大于或等于水印图片 if (initimage.width >= wrimage.width && initimage.height >= wrimage.height) { graphics gwater = graphics.fromimage(initimage); //透明属性 imageattributes imgattributes = new imageattributes(); colormap colormap = new colormap(); colormap.oldcolor = color.fromargb(255, 0, 255, 0); colormap.newcolor = color.fromargb(0, 0, 0, 0); colormap[] remaptable = { colormap }; imgattributes.setremaptable(remaptable, coloradjusttype.bitmap); float[][] colormatrixelements = { new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.5 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} }; colormatrix wmcolormatrix = new colormatrix(colormatrixelements); imgattributes.setcolormatrix(wmcolormatrix, colormatrixflag.default, coloradjusttype.bitmap); gwater.drawimage(wrimage, new rectangle(initimage.width - wrimage.width, initimage.height - wrimage.height, wrimage.width, wrimage.height), 0, 0, wrimage.width, wrimage.height, graphicsunit.pixel, imgattributes); gwater.dispose(); } wrimage.dispose(); } } } //保存 initimage.save(savepath, system.drawing.imaging.imageformat.jpeg); } else { //缩略图宽、高计算 double newwidth = initimage.width; double newheight = initimage.height; //宽大于高或宽等于高(横图或正方) if (initimage.width > initimage.height || initimage.width == initimage.height) { //如果宽大于模版 if (initimage.width > targetwidth) { //宽按模版,高按比例缩放 newwidth = targetwidth; newheight = initimage.height * (targetwidth / initimage.width); } } //高大于宽(竖图) else { //如果高大于模版 if (initimage.height > targetheight) { //高按模版,宽按比例缩放 newheight = targetheight; newwidth = initimage.width * (targetheight / initimage.height); } } //生成新图 //新建一个bmp图片 system.drawing.image newimage = new system.drawing.bitmap((int)newwidth, (int)newheight); //新建一个画板 system.drawing.graphics newg = system.drawing.graphics.fromimage(newimage); //设置质量 newg.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; newg.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality; //置背景色 newg.clear(color.white); //画图 newg.drawimage(initimage, new system.drawing.rectangle(0, 0, newimage.width, newimage.height), new system.drawing.rectangle(0, 0, initimage.width, initimage.height), system.drawing.graphicsunit.pixel); //文字水印 if (watermarktext != "") { using (system.drawing.graphics gwater = system.drawing.graphics.fromimage(newimage)) { system.drawing.font fontwater = new font("宋体", 10); system.drawing.brush brushwater = new solidbrush(color.white); gwater.drawstring(watermarktext, fontwater, brushwater, 10, 10); gwater.dispose(); } } //透明图片水印 if (watermarkimage != "") { if (file.exists(watermarkimage)) { //获取水印图片 using (system.drawing.image wrimage = system.drawing.image.fromfile(watermarkimage)) { //水印绘制条件:原始图片宽高均大于或等于水印图片 if (newimage.width >= wrimage.width && newimage.height >= wrimage.height) { graphics gwater = graphics.fromimage(newimage); //透明属性 imageattributes imgattributes = new imageattributes(); colormap colormap = new colormap(); colormap.oldcolor = color.fromargb(255, 0, 255, 0); colormap.newcolor = color.fromargb(0, 0, 0, 0); colormap[] remaptable = { colormap }; imgattributes.setremaptable(remaptable, coloradjusttype.bitmap); float[][] colormatrixelements = { new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.5 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} }; colormatrix wmcolormatrix = new colormatrix(colormatrixelements); imgattributes.setcolormatrix(wmcolormatrix, colormatrixflag.default, coloradjusttype.bitmap); gwater.drawimage(wrimage, new rectangle(newimage.width - wrimage.width, newimage.height - wrimage.height, wrimage.width, wrimage.height), 0, 0, wrimage.width, wrimage.height, graphicsunit.pixel, imgattributes); gwater.dispose(); } wrimage.dispose(); } } } //保存缩略图 newimage.save(savepath, system.drawing.imaging.imageformat.jpeg); //释放资源 newg.dispose(); newimage.dispose(); initimage.dispose(); } } #endregion #region 其它 /// <summary> /// 判断文件类型是否为web格式图片 /// (注:jpg,gif,bmp,png) /// </summary> /// <param name="contenttype">httppostedfile.contenttype</param> /// <returns></returns> public static bool iswebimage(string contenttype) { if (contenttype == "image/pjpeg" || contenttype == "image/jpeg" || contenttype == "image/gif" || contenttype == "image/bmp" || contenttype == "image/png") { return true; } else { return false; } } #endregion }//end class }
试试其它关键字
图片缩放
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
zhensoft163
贡献的其它代码
(
11
)
.
图片缩放图片剪切功能
.
网页图片提取工具
.
扫描图片去黑边
.
判断两张图片是否一致
.
c#组合键
.
迭代删除过期文件及文件夹
.
实现回车替代Tab
.
带附件邮件发送(支持多附件)
.
页面提交防刷新等待提示
.
DataTable 过滤重复数据
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3