• C#压缩图片的方法


    /// 
    /// 图片压缩
    /// 
    /// 图片文件路径
    /// 保存文件夹
    /// 压缩质量
    /// 压缩后的文件名后缀(防止直接覆盖原文件)
    public static void CompressionImage(string imagePath, string targetFolder, long quality, string fileSuffix = "Demo")
    {
        if (!System.IO.File.Exists(imagePath))
        {
            throw new FileNotFoundException();
        }
        if (!Directory.Exists(targetFolder))
        {
            Directory.CreateDirectory(targetFolder);
        }
        var fileInfo = new FileInfo(imagePath);
        var fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
        var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}");
    
        var imageByte = CompressionImage(imagePath, quality);
        var ms = new MemoryStream(imageByte);
        var image = Image.FromStream(ms);
        image.Save(fileFullName);
        ms.Close();
        ms.Dispose();
        image.Dispose();
    }
    
    /// 
    /// 设置图片质量
    /// 
    /// 
    /// 范围0~100,越大质量越高
    /// 
    private static byte[] CompressionImage(string imagePath, long quality)
    {
        using (var fileStream = new FileStream(imagePath, FileMode.Open))
        {
            using (var img = Image.FromStream(fileStream))
            {
                using (var bitmap = new Bitmap(img))
                {
                    ImageCodecInfo codecInfo = GetEncoder(img.RawFormat);
                    var myEncoder = System.Drawing.Imaging.Encoder.Quality;
                    var myEncoderParameters = new EncoderParameters(1);
                    var myEncoderParameter = new EncoderParameter(myEncoder, quality);
                    myEncoderParameters.Param[0] = myEncoderParameter;
                    using (var ms = new MemoryStream())
                    {
                        bitmap.Save(ms, codecInfo, myEncoderParameters);
                        myEncoderParameters.Dispose();
                        myEncoderParameter.Dispose();
                        return ms.ToArray();
                    }
                }
            }
        }
    }
    
    /// 
    /// Guid
    /// 
    /// 
    /// 
    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        var codecs = ImageCodecInfo.GetImageDecoders();
        return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    调用方法:

    CompressionImage("C:\\Users\\admin\\Desktop\\画图\\1.jpg", "C:\\Users\\admin\\Desktop\\画图\\Demo", 50, "Demo");
    
    • 1
  • 相关阅读:
    LeetCode·每日一题·907.子数组的最小值之和·动态规划
    阿里巴巴面试题- - -多线程&并发篇(三十五)
    【Nginx】负载均衡
    全自动测试-2-测试页面添加搜索
    常用排序算法实现
    【架构设计】冷备/热备/温备、水平扩展/垂直扩展、弹性扩容
    ChatGLM2-6B 部署与微调
    【Flutter】Android Studio的Flutter环境配置
    【基于HTML5的网页设计及应用】——实现个人简历表格和伪类选择器应用
    elementui限制input输入框中小数点保留一位小数
  • 原文地址:https://blog.csdn.net/weixin_44171249/article/details/134034213