【.net core】图片压缩

该文章介绍了一个使用SkiaSharp库来压缩图片的C#代码实现。功能类ImageCompression包含一个Compress方法,接受原图片路径、目标路径、最大宽度和图片质量作为参数,通过调整图片尺寸和质量达到压缩目的。方法首先读取图片,然后根据最大宽度计算新尺寸,再进行缩放和质量设置,最后保存压缩后的JPEG图片。
摘要由CSDN通过智能技术生成

 使用SkiaSharp组件实现功能,组件下载在nuget中安装最新版本至项目

功能实现类:

using SkiaSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace YiSha.Util
{
    public static class ImageCompression
    {
        /// <summary>
        /// 压缩图片
        /// </summary>
        /// <param name="source">原文件位置</param>
        /// <param name="target">生成目标文件位置</param>
        /// <param name="maxWidth">最大宽度,根据此宽度计算是否需要缩放,计算新高度</param>
        /// <param name="quality">图片质量,范围0-100</param>
        public static void Compress(string source, string target, decimal maxWidth, int quality)
        {
            using (var file = File.OpenRead(source))
            using (var fileStream = new SKManagedStream(file))
            using (var bitmap = SKBitmap.Decode(fileStream))
            {
                var width = (decimal)bitmap.Width;
                var height = (decimal)bitmap.Height;
                var newWidth = width;
                var newHeight = height;
                if (width > maxWidth)
                {
                    newWidth = maxWidth;
                    newHeight = height / width * maxWidth;
                }
                using (var resized = bitmap.Resize(new SKImageInfo((int)newWidth, (int)newHeight), SKFilterQuality.Medium))
                {
                    if (resized != null)
                    {
                        using (var image = SKImage.FromBitmap(resized))
                        using (var writeStream = File.OpenWrite(target))
                        {
                            image.Encode(SKEncodedImageFormat.Jpeg, quality).SaveTo(writeStream);
                        }
                    }
                }
            }
        }
    }
}

方法调用:

 

//absoluteFileNameold:需要压缩的文件路径
//absoluteFileNamenew:压缩后文件的保存路径
//1920:图片分辨率
//80:图片质量(0-100,越高越清晰,越小越模糊)
ImageCompression.Compress(absoluteFileNameold, absoluteFileNamenew, 1920, 80);//压缩图片并保存

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值