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

相关文章

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当