c# - 有没有办法限制调整大小的图像文件大小?
问题描述
我正在寻找一种方法来限制调整大小的图像文件大小。调整大小的图像大小不应超过给定大小,即 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);
}
但是上面的代码会生成任意大小的图像文件。
解决方案
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);
}
}
推荐阅读
- javascript - 为什么我得到Uncaught TypeError:无法在'Node'上执行'appendChild':参数1不是'Node'类型。使用这个可拖动的代码?
- javascript - 出现 div 以及单击详细信息/摘要时自动滚动
- python - 如何访问/迭代熊猫系列的元素?
- java - 十进制转十六进制有助于理解
- reactjs - 输入 onClick 和 onFocus 碰撞
- javascript - Windows:是否有 NPM 模块可以 getActiveWindow 和 setWindowPos
- numpy - 奇怪的根`使用 numpy.roots`
- amazon-web-services - aws-load-balancer-eip-allocations 不起作用。在 AWS 上使用 k8s 将静态 IP 分配给 LoadBalancer 服务
- python - 在 Python 中使用 BeautifulSoup 从 Google 搜索中检索链接
- anylogic - 在其 java 操作中参考 DES 块