C# 图片处理,添加文字、添加图片、圆形切割。处理后图片不失真,不压缩图片 【 程序示例】

本文主要是介绍C# 图片处理,添加文字、添加图片、圆形切割。处理后图片不失真,不压缩图片 【 程序示例】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片处理程序示例,实现功能点有

1、远程图片转换Image对象

2、在图片上添加文字

3、在图片上添加图片

4、将图片进行椭圆形(圆形)切割

5、微软程序处理图片失真。不少人发现图片用微软程序重绘之后,即时什么也不做,图片质量也会压缩,微软的Image.Save方法,不设置压缩质量,是默认保存到图片压缩质量为75,所以保存的图片质量偏低。

代码如下,此处是asp.net中的一般处理程序

public void ProcessRequest(HttpContext context)
{//产品图片string ProducePicUrl = "http://img.xxx.com/group1/M00/36/B8/cnHoeV3pxMWANofjAACQFhMkSE0601_s.jpg";Image img = GetStreamByUrl(ProducePicUrl);Graphics grap = Graphics.FromImage(img);//设置输出图片质量grap.CompositingQuality = CompositingQuality.HighQuality;grap.SmoothingMode = SmoothingMode.HighQuality;grap.InterpolationMode = InterpolationMode.HighQualityBicubic;//在图片上添加文字grap.DrawString("中国山东找蓝翔", new Font("宋体", 20, FontStyle.Bold), Brushes.Blue, new PointF(29, 29));//企业logo图片string ComPicUrl = "http://img.xxx.com/group1/M00/2D/62/cnHoeVsfISeAEPqhAAA5bjwdSWo698_s.jpg";Image Comimg = GetStreamByUrl(ComPicUrl);//图片圆形切割Comimg = CutEllipse(Comimg, new Rectangle(0, 0, Comimg.Width, Comimg.Height), new Size(100, 100));//图片上添加图片grap.DrawImage(Comimg, new Rectangle(img.Width - 100, 0, 100, 100),0, 0, Comimg.Width, Comimg.Height, GraphicsUnit.Pixel);EncoderParameters ps = new EncoderParameters(1);EncoderParameter p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);ps.Param[0] = p;ImageCodecInfo imgcodec = GetCodecInfo("image/jpeg");img.Save(context.Response.OutputStream, imgcodec, ps);//img.Save(context.Response.OutputStream, ImageFormat.Jpeg);常用图片保存,质量被压缩context.Response.ContentType = "image/jpeg";
}
/// <summary>
/// 图片剪切成椭圆形
/// </summary>
/// <param name="img">原始Image对象</param>
/// <param name="rec">被切割图片的矩形范围</param>
/// <param name="size">椭圆的尺寸</param>
/// <returns></returns>
private Image CutEllipse(Image img, Rectangle rec, Size size)
{Bitmap bitmap = new Bitmap(size.Width, size.Height);using (Graphics g = Graphics.FromImage(bitmap)){using (TextureBrush br = new TextureBrush(img, System.Drawing.Drawing2D.WrapMode.Clamp, rec)){br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;g.FillEllipse(br, new Rectangle(Point.Empty, size));}}return bitmap;
}
private ImageCodecInfo GetCodecInfo(string mimeType)
{ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();foreach (ImageCodecInfo ici in CodecInfo){if (ici.MimeType == mimeType) return ici;}return null;
}/// <summary>
/// 获取远程图片的Image对象
/// </summary>
/// <returns></returns>
public Image GetStreamByUrl(string imgurl)
{WebRequest myrequest = WebRequest.Create(imgurl);myrequest.Timeout = 3 * 1000;WebResponse myresponse = myrequest.GetResponse();Stream imgstream = myresponse.GetResponseStream();Image img = Image.FromStream(imgstream);myrequest.Abort();myresponse.Close();return img;
}

 

最终效果:右侧圆形区域是企业Logo

参考资料:https://blog.csdn.net/chinacsharper/article/details/50854852

这篇关于C# 图片处理,添加文字、添加图片、圆形切割。处理后图片不失真,不压缩图片 【 程序示例】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317171

相关文章

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页