图片缩放
/// <summary> /// 图片转换 /// </summary> /// <param name="image"></param> /// <param name="directoryPath">目录路径</param> /// <param name="imageenum"></param> /// <param name="qualityNum">图片质量</param> public void ImageTransformation(Image image, string directoryPath, ImageFormatEnum imageenum = ImageFormatEnum._1080, long qualityNum = 100) { var ext = Path.GetExtension(directoryPath); ext = ext.Substring(ext.LastIndexOf('.') + 1); //去除点 .jpeg => jpeg int oldWidth = image.Width; int oldHeight = image.Height; int newWidth = 0; int newHeight = 0; if (oldWidth > oldHeight && oldWidth > (int)imageenum) { newWidth = (int)imageenum; newHeight = Convert.ToInt32(oldHeight * newWidth / oldWidth); } else if (oldHeight > oldWidth && oldHeight > (int)imageenum) { newHeight = (int)imageenum; newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight); } else if (oldWidth == oldHeight && oldWidth > (int)imageenum) { newHeight = (int)imageenum; newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight); } else { newWidth = Convert.ToInt32(oldWidth); newHeight = Convert.ToInt32(oldHeight); } //新建图片 Image newimage = new Bitmap(newWidth, newHeight); //新建画板 Graphics g = Graphics.FromImage(newimage); //清空画布并设置背景色 g.Clear(Color.Transparent); //设置画布的绘画质量 g.CompositingQuality = CompositingQuality.HighQuality; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = SmoothingMode.HighQuality; //设置高质量插值法 g.InterpolationMode = InterpolationMode.HighQualityBilinear; //显示图像的位置 Rectangle destRect = new Rectangle(0, 0, newWidth, newHeight); //显示图像那一部分 Rectangle srcRect = new Rectangle(0, 0, image.Width, image.Height); g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel); g.Dispose(); //以下代码为保存图片时,设置压缩质量 EncoderParameters encoderParams = new EncoderParameters(); EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, qualityNum); encoderParams.Param[0] = encoderParam; //var format = GetImageFormat(image).ToString().ToLower(); //var encoder = GetEncoderInfo("image/" + format); var encoder = GetEncoderInfo("image/" + ext); newimage.Save(directoryPath, encoder, encoderParams); newimage.Dispose(); newimage = null; } private static ImageCodecInfo GetEncoderInfo(string mimeType) { int j; ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); for (j = 0; j < encoders.Length; ++j) { if (encoders[j].MimeType == mimeType) return encoders[j]; } return null; } /// <summary> /// 图片格式 /// </summary> public enum ImageFormatEnum { _640 = 640, _800 = 800, _1024 = 1024, _1080 = 1080, _1920 = 1920, _2560 = 2560, _b = 0 //原图 } /// <summary> ///获取图片格式 /// </summary> /// <param name="img">图片</param> /// <returns>默认返回JPEG</returns> public ImageFormat GetImageFormat(Image img) { if (img.RawFormat.Equals(ImageFormat.Jpeg)) { return ImageFormat.Jpeg; } if (img.RawFormat.Equals(ImageFormat.Gif)) { return ImageFormat.Gif; } if (img.RawFormat.Equals(ImageFormat.Png)) { return ImageFormat.Png; } if (img.RawFormat.Equals(ImageFormat.Bmp)) { return ImageFormat.Bmp; } return ImageFormat.Jpeg;//根据实际情况选择返回指定格式还是null }
下载: Demo
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现