首页 > 解决方案 > 有没有办法限制调整大小的图像文件大小?

问题描述

我正在寻找一种方法来限制调整大小的图像文件大小。调整大小的图像大小不应超过给定大小,即 100KB。

这是我调整图像大小的代码:

using (var ms = new MemoryStream(Image_data))
{
    var image = Image.FromStream(ms);
    var ratioX = (double)1800 / image.Width;
    var ratioY = (double)1500 / image.Height;

    var ratio = Math.Min(ratioX, ratioY);
    var width = (int)(image.Width * ratio);
    var height = (int)(image.Height * ratio);

    var newImage = new Bitmap(width, height);
    Graphics.FromImage(newImage).DrawImage(image, 0, 0, width, height);
    Graphics.FromImage(newImage).CompositingQuality = CompositingQuality.HighQuality;
    Graphics.FromImage(newImage).SmoothingMode = SmoothingMode.HighQuality;
    Graphics.FromImage(newImage).InterpolationMode = InterpolationMode.HighQualityBicubic;
    Bitmap bmp = new Bitmap(newImage);

    ImageConverter converter = new ImageConverter();
    Image_data = (byte[])converter.ConvertTo(bmp, typeof(byte[]));
    string SmallImageData = string.Format(Convert.ToBase64String(Image_data));
    string subpath = ConfigurationManager.AppSettings["ResizedImagePath"];
    bool pathexists = System.IO.Directory.Exists(HttpContext.Current.Server.MapPath(subpath));
    if (!pathexists)
    {
        System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath(subpath));
    }
    string path = HttpContext.Current.Server.MapPath(subpath) + "/" + ImageName + ".jpeg";
    bmp.Save(path, ImageFormat.Jpeg);
}

但是上面的代码会生成任意大小的图像文件。

标签: c#asp.net

解决方案


Magick.NET 提供了一个Extent参数来指定最大文件大小输出,它通知压缩。说明

获取或设置不超过以千字节为单位的指定范围 (jpeg:extent) 的压缩质量。

来自源代码库的测试用例示例:

var defines = new JpegWriteDefines
{
    Extent = 10, // 10 KB target size
};

using (var image = new MagickImage(/* File */))
{
    using (MemoryStream memStream = new MemoryStream())
    {
        image.Settings.SetDefines(defines);

        image.Format = MagickFormat.Jpeg;
        image.Write(memStream);
    }
}

推荐阅读