.netcore 图片处理
Posted he-bo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.netcore 图片处理相关的知识,希望对你有一定的参考价值。
.netcore 图片处理
/// <summary> /// 根据文件类型和文件名返回新路径 /// </summary> /// <param name="type">文件类型</param> /// <param name="fileName">文件名/回传新的相对路径</param> /// <returns>全新文件绝对路径</returns> public static string CreatePath(FileType type, ref string fileName) string path1 = $"RootPathEnum.GetName(typeof(FileType), type)/"; var path = $"AppContext.BaseDirectorypath1"; //检查上传的物理路径是否存在,不存在则创建 if (!Directory.Exists(path)) Directory.CreateDirectory(path); string name = $"DateTime.Now:yyyyMMddHHmmssff.GetFileExt(fileName)"; fileName = $"path1name"; return $"pathname"; /// <summary> /// 取小写文件名后缀 /// </summary> /// <param name="name">文件名</param> /// <returns>返回小写后缀,不带“.”</returns> public static string GetFileExt(string name) return name.Split(".").Last().ToLower(); /// <summary> /// 是否为图片文件 /// </summary> /// <param name="fileExt">文件扩展名,不含“.”</param> public static bool IsImage(string fileExt) ArrayList al = new ArrayList"bmp","jpeg","jpg","gif","png","ico"; return al.Contains(fileExt); /// <summary> /// 检查是否允许文件 /// </summary> /// <param name="fileExt">文件后缀</param> /// <param name="allowExt">允许文件数组</param> public static bool CheckFileExt(string fileExt, string[] allowExt) return allowExt.Any(t => t == fileExt); /// <summary> /// 制作缩略图 /// </summary> /// <param name="original">图片对象</param> /// <param name="newFileName">新图路径</param> /// <param name="maxWidth">最大宽度</param> /// <param name="maxHeight">最大高度</param> public static void ThumbImg(Image original, string newFileName, int maxWidth, int maxHeight) Size newSize = ResizeImage(original.Width, original.Height, maxWidth, maxHeight); using (Image displayImage = new Bitmap(original, newSize)) try displayImage.Save(newFileName, original.RawFormat); finally original.Dispose(); /// <summary> /// 制作缩略图 /// </summary> /// <param name="fileName">文件名</param> /// <param name="newFileName">新图路径</param> /// <param name="maxWidth">最大宽度</param> /// <param name="maxHeight">最大高度</param> public static void ThumbImg(string fileName, string newFileName, int maxWidth, int maxHeight) byte[] imageBytes = File.ReadAllBytes(fileName); Image img = Image.FromStream(new MemoryStream(imageBytes)); ThumbImg(img, newFileName, maxWidth, maxHeight); /// <summary> /// 计算新尺寸 /// </summary> /// <param name="width">原始宽度</param> /// <param name="height">原始高度</param> /// <param name="maxWidth">最大新宽度</param> /// <param name="maxHeight">最大新高度</param> /// <returns></returns> private static Size ResizeImage(int width, int height, int maxWidth, int maxHeight) if (maxWidth <= 0) maxWidth = width; if (maxHeight <= 0) maxHeight = height; decimal MAX_WIDTH = maxWidth; decimal MAX_HEIGHT = maxHeight; decimal ASPECT_RATIO = MAX_WIDTH / MAX_HEIGHT; int newWidth, newHeight; decimal originalWidth = width; decimal originalHeight = height; if (originalWidth > MAX_WIDTH || originalHeight > MAX_HEIGHT) decimal factor; if (originalWidth / originalHeight > ASPECT_RATIO) factor = originalWidth / MAX_WIDTH; newWidth = Convert.ToInt32(originalWidth / factor); newHeight = Convert.ToInt32(originalHeight / factor); else factor = originalHeight / MAX_HEIGHT; newWidth = Convert.ToInt32(originalWidth / factor); newHeight = Convert.ToInt32(originalHeight / factor); else newWidth = width; newHeight = height; return new Size(newWidth, newHeight); /// <summary> /// 得到图片格式 /// </summary> /// <param name="name">文件名称</param> /// <returns></returns> public static ImageFormat GetFormat(string name) string ext = GetFileExt(name); switch (ext) case "ico": return ImageFormat.Icon; case "bmp": return ImageFormat.Bmp; case "png": return ImageFormat.Png; case "gif": return ImageFormat.Gif; default: return ImageFormat.Jpeg;
public async Task<string> Upload(IFormFile file, FileType type) string name = file.FileName; string filePath = FileBase.CreatePath(type, ref name); string ext = FileBase.GetFileExt(file.FileName); bool isDel = false; using (var stream = new FileStream(filePath, FileMode.CreateNew)) await file.CopyToAsync(stream); if (!FileBase.IsImage(ext)) return name; //如果图片宽高超出限制则缩小 Image img = Image.FromStream(stream); if (img.Width > Config.ImgMaxWidth || img.Height > Config.ImgMaxHeight) string path = FileBase.CreatePath(type, ref name); FileBase.ThumbImg(img, path, Config.ImgMaxWidth, Config.ImgMaxHeight); isDel = true; if(isDel) File.Delete(filePath); return name;
以上是关于.netcore 图片处理的主要内容,如果未能解决你的问题,请参考以下文章
ImageSharp一个专注于NetCore平台图像处理的开源项目
.NetCore实现图片缩放与裁剪 - 基于ImageSharp
WPFUWP借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
WPFUWP借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx