当前位置: 首页 > news >正文

c# .net linux ImageSharp+FastDFS+Base64上传图片,压缩图片大小,图像处理dcoker中使用也可以

.net 以前是用System.Drawing来处理图片,但是在dcoker 、linux上用不了

微软官方推荐用

1、SkiaSharp

如果项目运行到docker里,需要NUGET安装SkiaSharp.NativeAssets.Linux.NoDependencies

注意:如果你同时引用SkiaSharp.NativeAssets.Linux和SkiaSharp.NativeAssets.Linux.NoDependencies 可能会导致docker中运行报错,记得只能引用一个SkiaSharp.NativeAssets.Linux.NoDependencies

2、ImageSharp 

我感觉这个用起来简单一些

nuget安装SixLabors.ImageSharp

使用:

这里用ImageSharp 为例子

我这里是通过jquery蒋图片转为base64 ,用法见jquery把图片路径转成base64_mob649e815e258d的技术博客_51CTO博客

新建controller,接收前端提交过来的base64,并返回上传后的文件名

  public string addFileToServer(string base64stringdata, string oldfilename){byte[] imgBytes;if (base64stringdata.Contains(",")){//前端用jQuery将图片路径转换为base64的话,这里需要 // 或者在jquery取值时先将Data URL转换为base64字符串var base64String = dataURL.split(",")[1];imgBytes = Convert.FromBase64String(base64stringdata.Remove(0, base64stringdata.IndexOf(',') + 1));}else{imgBytes = Convert.FromBase64String(base64stringdata);}//取后缀名string strext =  System.IO.Path.GetExtension(oldfilename);if (strext == ".jpg" || strext == ".gif" || strext == ".jpeg" || strext == ".bmp" || strext == ".png"){ //图片自动压缩 并上传       imgBytes = ImageSharpTools.ImageReSise(imgBytes, strext, 800, 800);}//上传文件string    returnFileName = new FastDFSNetCoreHelper().Upload(imgBytes, strext);return returnFileName ;}

nuget安装SixLabors.ImageSharp

新建类 ImageSharpTools.cs

 public class ImageSharpTools{/// <summary>/// 调整图片尺寸/// </summary>/// <param name="imageBytes">字节流</param>/// <param name="ext">后缀名</param>/// <param name="towidth">设置宽度</param>/// <param name="toheight">设置高度</param>/// <returns></returns>public static byte[] ImageReSise(byte[] imageBytes,string ext,int towidth,int toheight){var image = Image.Load(imageBytes);int imageWidh = image.Width;int imageHight = image.Height;if (imageWidh > imageHight){//如果宽大于高,调整比例if (imageWidh > towidth){toheight = (int)(imageHight * ((double)towidth / (double)imageWidh));imageWidh = towidth;}else{towidth = imageWidh;}}if (imageWidh < imageHight){ //如果宽小于高,调整比例if (imageHight > toheight){towidth = (int)(imageWidh * ((double)toheight / (double)imageHight));imageHight = toheight;}else{toheight = imageHight;}}//调整图片尺寸image.Mutate(x => x.Resize(towidth, toheight, KnownResamplers.Spline));MemoryStream ms = new MemoryStream();image.SaveAsPngAsync(ms);var byteFile = ms.ToArray();ms.Close();ms.Dispose();image.Dispose();return byteFile;}
}

nuget安装FastDFSNetCore

新建类:FastDFSNetCoreHelper.cs

using FastDFS.Client;
using System.Net;public class FastDFSNetCoreHelper{public string Upload(byte[] imgBytes, string ext){if (ext.Contains(".")){ext = ext.Replace(".", "");}           List<IPEndPoint> pEndPoints = new List<IPEndPoint>(){//设置dfs的服务器地址和端口new IPEndPoint(IPAddress.Parse("10.112.250.130"), 2315)};ConnectionManager.Initialize(pEndPoints);StorageNode storageNode = FastDFSClient.GetStorageNodeAsync().Result;var str = FastDFSClient.UploadFileAsync(storageNode, imgBytes, ext);return "/" + storageNode.GroupName + "/" + str.Result.ToString();}}

完美OK

http://www.lryc.cn/news/212289.html

相关文章:

  • Flutter FittedBox
  • 亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路
  • 【设计模式】第17节:行为型模式之“解释器模式”
  • 各传输介质详细知识点
  • 历史随想随记
  • ClickHouse Java多个参数的UDF编写
  • RPA除了和OCR、NLP技术结合,还能和什么技术结合?
  • AssertionError: Torch not compiled with CUDA enabled
  • 【Ubuntu 系统使用进入,自动进入base虚拟环境解决最全】
  • C++项目——云备份-⑨-服务端与客户端功能联调
  • Linux两条服务器实现相互免密登录
  • 华纳云Ubuntu环境怎么编译安装PHP和Nginx
  • Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45
  • Linux:KVM虚拟化
  • HTML标签,列表,表格相关
  • 【音视频】Linux | FFmpeg源码搭建
  • Ansible中常用模块
  • 2000-2021年上市公司产融结合度量数据
  • 2023最新最全Web自动化测试面试题
  • List的add(int index,E element)陷阱,不得不防
  • 如何使用drawio画流程图以及导入导出
  • 腾讯云轻量服务器“镜像类型”以及“镜像”选择方法
  • docker-compose 简单部署Flask + Redis + Nginx环境搭建网站
  • debian和ubuntu
  • 恒驰服务 | 华为云数据使能专家服务offering之数仓建设
  • AI与Prompt:解锁软件开发团队的魔法咒语,在复杂任务上生成正确率更高的代码
  • 深度学习02-数据集格式转换
  • 【c++|opencv】一、基础操作---1.图像读取
  • 【2023.10.30练习】C语言-循环右移字符
  • C++ 自引用指针this(整理)