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

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.kler.cn/news/109268.html

相关文章:

  • 汽车混动技术
  • docker 启动简单的开发环境(mysql, redis, etcd)
  • MySQL WITH AS及递归查询
  • ELASTICO-A Secure Sharding Protocol For Open Blockchains
  • 目标检测YOLO实战应用案例100讲-高速铁路供电安全检测监测系统图像智能识别(中)
  • 七层负载均衡 HAproxy
  • 由k8s升级慢引起的etcd性能不足的问题排查
  • Windows-Oracle11g 安装详解-含Navicate远程连接配置 -本地监听设置及更换navicate环境指向的oci.dll
  • 人工智能在疾病治疗中的应用:机遇与挑战
  • redis原理 主从同步和哨兵集群
  • 【蓝桥杯选拔赛真题05】C++超级素数 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析
  • VR数字党建:红色文化展厅和爱国主义教育线上线下联动
  • 2023秋《论文写作》课程总结
  • go-kit中如何开启websocket服务
  • 23种设计模式在SpringCloud源码里的应用
  • 单元测试,集成测试,系统测试的区别是什么?
  • css position属性与js滚动
  • Leetcode 2914. Minimum Number of Changes to Make Binary String Beautiful
  • 一个特殊级数的敛散性判断
  • C#,数值计算——分类与推理Svmlinkernel的计算方法与源程序
  • k8s二进制安装部署
  • 适用于 Mac 或 Windows 的 4 种最佳 JPEG/PNG图片 恢复软件
  • 在Go项目中二次封装Kafka客户端功能
  • rust学习-LinkedList
  • 物联网和互联网医院小程序:如何实现医疗设备的远程监测和管理?
  • H5游戏源码分享-接苹果游戏拼手速
  • Python requests之Session
  • Knife4j使用教程(三) -- 实体类的配置注解(@ApiModel与@ApiModelProperty 的 认识与使用)
  • 多线程---定时器
  • 【网络安全】Seeker内网穿透追踪定位