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

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

微软官方推荐用

1、SkiaSharp
调试了挺久,运行也OK

如果项目运行到docker里,需要NUGET安装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

 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.mzph.cn/news/120210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 认证方式

一、概述 客户端的身份验证是由配置文件控制的&#xff0c;配置文件为pg_hba.conf&#xff0c;存放位置在数据目录下&#xff08;show data_directory;&#xff09;。 在initdb初始化数据目录时&#xff0c;会生成一个默认的pg_hba.conf文件。也可以将该配置文件存放在其他地方…

uniapp:谷歌地图,实现地图展示,搜索功能,H5导航

页面展示 APP H5 谷歌地图功能记录,谷歌key申请相对复杂一些,主要需要一些国外的身份信息。 1、申请谷歌key 以下是申请谷歌地图 API 密钥的流程教程: 登录谷歌开发者控制台:打开浏览器,访问 Google Cloud Platform Console。 1、创建或选择项目:如果你还没有创建项目…

trucksim常见问题

一、Error: Unable to load .vs data from “D:\Users\Public\Documents\TruckSim2019.0 Data\Results\Run_e24aa2… LastRun.vs”.Reason for failure: Invalid character OxFFFFFFB2 in string"" on line 4.Would you like to continue receiving alerts of this t…

【Python机器学习】零基础掌握GaussianProcessRegressor高斯过程

如何更精确地预测未来的股票价格? 股票市场总是充满变数,投资者经常面临着如何更准确地预测股票价格的问题。传统的预测方法或许可以提供一些线索,但它们往往无法捕捉到市场的所有复杂性。 现代技术提供了一种更高级的预测方法:高斯过程回归(Gaussian Process Regressio…

华为云双十一服务器数据中心带宽全动态BGP和静态BGP区别

2023华为云双十一优惠活动中提供多款云服务器选择&#xff0c;需要注意的是&#xff1a;西南-贵阳一和华北-北京一数据中心是静态BGP带宽&#xff0c;其他数据中心配置全动态独享BGP带宽。 静态BGP和全动态BGP带宽有什么区别&#xff1f;全动态BGP网络线路可用性保障更高&…

Nginx内外网代理配置记录

一、背景 客户现场内网服务器不提供外网环境&#xff0c;仅在另一台服务器上提供外网访问权限&#xff0c;所以需要通过网络代理的方式&#xff0c;将内网服务器需要访问的外网请求代理到外网服务器去受理。 二、解决 如此流程需要用到两台服务器&#xff0c;所以对应的也需要…

【分享】7-Zip压缩包的密码可以取消吗?

7-Zip压缩包设置了“密码保护”&#xff0c;后面又不想要了&#xff0c;可以取消吗&#xff1f; 首先&#xff0c;我们要分两种情况来看&#xff0c;是记得密码&#xff0c;但不想每次打开压缩包都要输入密码&#xff0c;所以想取消密码&#xff0c;还是把密码忘记了所以想取消…

搜维尔科技:【应用】配备MTi-3的轻便型ROV,在水下进行地理标记视觉检测

部署潜水员进行水下摄像&#xff0c;不仅难度高而且费用昂贵&#xff0c;需要受过潜水和摄像两方面培训的专业人员来进行。但有些水下作业任务例如拍摄海底管道内部的照片&#xff0c;由于人员无法进入或危险度高的原因&#xff0c;无法由潜水员完成。 如今&#xff0c;俄罗…

stm32通过AT指令与esp8622通信

stm32通过AT指令与esp8622通信 文章目录 stm32通过AT指令与esp8622通信1.tcp通信2.mqtt通信 1.tcp通信 ATCWMODE1 设置为STA模式ATCWJAP_DEF"langtaotech","langtaotechXXX"ATCIPSTA? 查询ipATCIPMUX0 设置单连接ATCIPSTART"TCP","19…

openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)

环境回顾 上一篇文章中&#xff0c;我们讲解了 openEuler 22.03 LTS 安装 Docker CE 和 Dcoker Compose&#xff0c;部署的软件环境版本分别如下&#xff1a; OS 系统&#xff1a;openEuler 22.03 LTS(openEuler-22.03-LTS-x86_64-dvd.iso)Docker Engine&#xff1a;Docker C…

Linux--进程等待

1.什么是进程等待 1.通过系统调用wait/waitid,来对子进程进行进行检测和回收的功能。 2.为什么有进程等待 1.对于每个进程来说&#xff0c;如果子进程终止&#xff0c;父进程没有停止&#xff0c;就会形成僵尸进程&#xff0c;导致内存泄露&#xff0c;为了防止僵尸进程的形成…

【计算机视觉】MoCo v3 讲解

MoCo v3 论文信息 标题:An Empirical Study of Training Self-Supervised Vision Transformers 作者:Xinlei Chen, Saining Xie, Kaiming He 期刊:ICCV 2021 发布时间与更新时间:2021.04.05 2021.04.08 2021.05.05 2021.08.16 主题:计算机视觉、对比学习、MoCo arXiv:[21…

GIT在window是 配置SSHKEY

1、打开你得命令行工具&#xff0c;输入&#xff1a; cd ~/.ssh2、生成密钥 #设置自己的邮箱&#xff0c;随意设置 $ ssh-keygen -t rsa -C "wqzbxh163.com"#输入保存密钥的文件名字 Enter file in which to save the key (/c/Users/dahai/.ssh/id_rsa): wqzbxh剩下…

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包&#xff0c;spring boot 2的spring-boot-starter-data-redis中&#xff0c;默…

域名系统 DNS

DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统&#xff0c;用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢&#xff1f;这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…

2023年最受欢迎的11个UI设计师网站,助你成为行业翘楚

作为一名优秀的UI设计师&#xff0c;快速寻找灵感&#xff0c;保持审美在线&#xff0c;了解行业动态绝对是一项职业必备技能。 今天小编为各位小伙伴整理了一些UI设计师必看的绝佳网站。你可以从这些网站中了解行业最新动态&#xff0c;寻找创意灵感、学习优秀作品&#xff0…

ModbusTCP 转 Profinet 主站网关控制汇川伺服驱动器配置案例

ModbusTCP Client 通过 ModbusTCP 控制 Profinet 接口设备&#xff0c;Profinet 接口设备接入 DCS/工控机等 兴达易控ModbusTCP转Profinet主站网关&#xff08;XD-ETHPNM20&#xff09;采用数据映射方式进行工作。 使用设备&#xff1a;兴达易控ModbusTCP 转 Profinet 主站网关…

DeOldify 接口化改造 集成 Flask

类似的图片修复项目 GFPGAN 的改造见我另一篇文 https://blog.csdn.net/weixin_43074462/article/details/132497146 DeOldify 是一款开源软件&#xff0c;用于给黑白照片或视频上色&#xff0c;效果还不错。 安装部署教程请参考别的文章&#xff0c;本文基于你给项目跑通&…

【MySQL索引与优化篇】索引的数据结构

文章目录 1. 概述2. 常见索引结构2.1 聚簇索引2.2 二级索引(辅助索引、非聚簇索引)2.3 联合索引 3. InnoDB的B树索引的注意事项3.1 根页面位置万年不动3.2 内节点中目录项记录的唯一性 4. MyISAM中的索引方案5. InnoDB和MyISAM对比6. 小结7. 补充&#xff1a;MySQL数据结构的合…

JavaWeb——关于servlet种mapping地址映射的一些问题

6、Servlet 6.4、Mapping问题 一个Servlet可以指定一个映射路径 <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern> </servlet-mapping>一个Servlet可以指定多个映射路径 <servlet-mapping>&…