如何使用C#点网核心压缩图像大小
我在代码中使用.NET Core 2.2,我使用IFormFile上传图像。如何在图像上载到服务器之前压缩图像大小(KB)?我搜索解决方案,但这些答案与位图相关,但由于我使用的是IFormFile,因此我需要与之相关的解决方案 我将在内部检查图像大小,如果它的大小高达700KB,我不想压缩。但是如果它更高,那么我想压缩并上传。示例代码将非常有用 我尝试使用Magick.NET包。但问题是,我怎样才能 IFormFile到MagickImage类型?如何使用C#点网核心压缩图像大小,c#,.net,asp.net-core,core,C#,.net,Asp.net Core,Core,我在代码中使用.NET Core 2.2,我使用IFormFile上传图像。如何在图像上载到服务器之前压缩图像大小(KB)?我搜索解决方案,但这些答案与位图相关,但由于我使用的是IFormFile,因此我需要与之相关的解决方案 我将在内部检查图像大小,如果它的大小高达700KB,我不想压缩。但是如果它更高,那么我想压缩并上传。示例代码将非常有用 我尝试使用Magick.NET包。但问题是,我怎样才能 IFormFile到MagickImage类型? foreach(IFormFile photo
foreach(IFormFile photo in Images)
{
using (MagickImage mi = photo) // Cannot implicitly convert type
//Microsoft.AspNetCore.Http.IFormFile to ImageMagick.MagickImage
{
mi.Format = Image.Jpeg;
mi.Resize(40, 40);
mi.Quality = 10;
mi.Write(imageFile);
}
}
我使用了可用于.NET和.NETCore的库来压缩图像。有关更多详细信息,请参阅其文档
在您的情况下,您需要将图像临时保存在某个位置并使用路径(类似于我的示例),或者将其转换为内存中的字节数组,并读取该数组,因为它接受byte[]
using (MagickImage image = new MagickImage(@"YourImage.jpg"))
{
image.Format = image.Format; // Get or Set the format of the image.
image.Resize(40, 40); // fit the image into the requested width and height.
image.Quality = 10; // This is the Compression level.
image.Write("YourFinalImage.jpg");
}
问题是,我无法将IFormFile类型转换为MagickImage类型。我已经更新了问题。你能告诉我正确的方法吗?使用(MagickImage mi=new MagickImage(photo))@Benjamin因为上传的图像可以有不同的大小,如果我保留image.Quality=10(或任何其他数字),那么尽管它会减小图像大小(1MB降到83KB,这很好),但是有没有一种方法可以使其小于一定的大小,就像我很乐意将图像大小转换为最大700KB(原始分辨率),无论原始大小是5MB、10MB还是20MB。我不希望图像是83KB,因为质量会受到太多的影响。我不想要高质量的图像,但不要太低,比如83KB的质量。你提到的上传前的
是指“从浏览器上传到服务器之前”还是“上传到当前服务器之后再上传到其他服务器之前”?如果您想在上传文件之前对其进行压缩,那么C#编写的服务器无法处理该文件。您应该搜索一些javascript解决方案。1)在上传图像之前,您不能对图像执行任何操作,至少使用C#。2) 不能明确控制大小:只能控制质量。您可以执行某种递归算法,从max开始逐步降低质量,直到文件大小在可接受的范围内,但可能需要多次递归,并且根据上载的文件大小,可能会导致性能问题。