`
weizhai12
  • 浏览: 146014 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

图片管理类ImgCmdUtils

 
阅读更多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;
using System.Web;

namespace Common.Utilities
{
/// <summary>
/// 图片管理类
/// </summary>
public class ImgCmdUtils
{
#region 等比缩放



/// <summary>

/// 图片等比缩放

/// </summary>

/// <remarks>吴剑 2011-01-21</remarks>

/// <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(HttpPostedFileBase postedFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)
{

//创建目录



//原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)

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("黑体", 30);

System.Drawing.Brush brushWater = new SolidBrush(Color.Red);

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.8f, 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, initImage.Height/2 , wrImage.Width, wrImage.Height/2), 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 >= targetWidth && initImage.Width >= targetHeight)
{

//如果宽大于模版



//宽按模版,高按比例缩放

newWidth = targetWidth;

newHeight = targetHeight;

}else if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)
{

//如果宽大于模版

if (initImage.Width > targetWidth)
{

//宽按模版,高按比例缩放

newWidth = targetWidth;

newHeight = initImage.Height;

}

}

//高大于宽(竖图)

else
{

//如果高大于模版

if (initImage.Height > targetHeight)
{

//高按模版,宽按比例缩放

newHeight = targetHeight;

newWidth = initImage.Width ;

}

}



//生成新图

//新建一个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("宋体", 30);

System.Drawing.Brush brushWater = new SolidBrush(Color.Red);

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, 1f, 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

}
}


分享到:
评论

相关推荐

    22_PHP_基于KPI的医疗废弃物管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    Python教程-快速入门基础必看课程09-文件处理

    该视频主要讲述了Python中文件的读写操作和pandas库中的subt函数来处理CSV文件。 在Python中,文件的读写操作需要使用open函数打开文件,并指定路径和模式。读取文件时,可以使用f.read()方法读取内容,并使用f.close()方法关闭文件。写入文件时,可以使用f.write()方法写入内容,并使用f.close()方法关闭文件。视频还介绍了如何在文件中进行换行操作,以及如何将文件中的内容进行读取和写入。 此外,视频还强调了在进行文件操作时需要注意的一些细节和技巧,例如文件的编码格式、内存不足问题、文件的访问权限、写入速度变慢问题等。视频还介绍了如何使用with语句来自动关闭文件,以及如何使用os模块中的函数来处理文件和文件夹。 另外,视频还讲述了如何使用pandas库中的subt函数来处理CSV文件。通过使用read函数将CSV文件读入,然后使用subt函数按照行和列进行划分。在划分时,可以根据需要选择不同的分隔符,如逗号、制表符等。通过subt函数可以将CSV文件切分成多个元素,然后将这些元素存储在一个list中。视频还展示了如何将这个list进行组合,

    《2023年度TikTok电商行业趋势白皮书》.zip

    《2023年度TikTok电商行业趋势白皮书》.zip

    网络攻防课程seed-labs实验-DNS_Attacks.zip

    网络攻防课程seed-labs实验-DNS_Attacks.zip

    sql查询数据库表结构(sql server适用)

    1. sql 语句查询sql server 数据库表结构 2. sql 语句查询sql server 数据库临时表结构 3. 可自由扩展字段,主要提供一个查询思路 4. 包括表名,列名,字段类型、主键表示、字段说明等。

    ASP.NETC#实验室预约管理系统.zip

    ASP.NET实验室预约管理系统源码 该系统的系统角色有三个:学生、教师、管理员,系统功能介绍如下: 学生功能 学生主要是四个功能。注册功能、查询功能、预约功能、学生资料管理功能。 (1)注册功能。学生进入登录界面后,如果没有注册,要先注册。注册的用户名是学生的学号。注册后才可以登录,学生在此功能里还能够修改、删除个人资料。 (2)查询功能。学生在进入主界面后,能够对想预约的课程查询或教师查询。由于老师可能教多个课程,所以有个二级选择目录。 (3)预约功能。当学生查询好信息后,就要对想要预约的实验开始预约。 (4)学生资料管理功能。学生在注册后,可以通过登录,修改自己的个人信息。 教师功能 教师也有四个功能。注册功能、查询功能、预约功能,教师的资料管理功能。只是教师和学生所使用功能的方式不一样。 (1)注册功能。老师进入登录界面后,如果没有账号,也要先注册账号,同时可以对自己的资料进行修改、删除、填加。 (2)查询功能。教师的查询功能主要是对实验室类别、项目、预约情况的查询。类别查询主要是查询实验室房间的信息;项目查询主要是查看能实验该项目的房间信息;预约查询主要是对实验室预约状况的查

    html实现儿童节庆祝项目源码

    java结合html实现儿童节庆祝代码

    操作系统课程实现Shell.zip

    操作系统课程实现Shell.zip

    一带一路下的交通发展(16组).pptx

    一带一路下的交通发展(16组).pptx

    光伏特性曲线(光照强度/温度)构建U-P以及U-I曲线

    通过MATLAB/simulink模块,构建光伏特性曲线(光照强度/温度)构建U-P以及U-I曲线,可以通过simulink模型设置光伏发电板串并联数量、光伏参数(开路电压,开路电流、最大功率点电压、最大功率点电流以及最大功率)、温度系数等,可以得到完美的U-P以及U-I曲线,通过m文件能够修改坐标轴的x轴及y轴坐标的范围。 模型使用方法,首先在MATLAB中添加文件路径,然后在MATLAB工作区中打开m文件以及slx文件,然后在MATLAB中直接运行m文件,然后回弹出相应的U-P以及U-I曲线,通过m文件能够修改光照强度的变化范围、温度的变化范围,总共可以得到光照强度以及温度共四个U-P以及U-I曲线图。

    Python爬取百度贴吧数据.zip

    python爬虫案例

    43_超市管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    农业农村部特聘审计员推荐表.doc

    农业农村部特聘审计员推荐表.doc

    132_基于Java的动物拯救游戏-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    农垦农产品质量追溯系统建设项目验收申请书目录.doc

    农垦农产品质量追溯系统建设项目验收申请书目录.doc

    8_Android app作业-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    本人本科毕业论文创建的算例

    本人本科毕业论文创建的算例

    苹果刷机完整教程【中英双语对照】_20231121153540.zip

    苹果刷机完整教程【中英双语对照】_20231121153540.zip

    删除顺序表中指定值的所有元素.md

    删除顺序表中指定值的所有元素

Global site tag (gtag.js) - Google Analytics