Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#点网核心压缩图像大小_C#_.net_Asp.net Core_Core - Fatal编程技术网

如何使用C#点网核心压缩图像大小

如何使用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

我在代码中使用.NET Core 2.2,我使用IFormFile上传图像。如何在图像上载到服务器之前压缩图像大小(KB)?我搜索解决方案,但这些答案与位图相关,但由于我使用的是IFormFile,因此我需要与之相关的解决方案

我将在内部检查图像大小,如果它的大小高达700KB,我不想压缩。但是如果它更高,那么我想压缩并上传。示例代码将非常有用

我尝试使用Magick.NET包。但问题是,我怎样才能 IFormFile到MagickImage类型?

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开始逐步降低质量,直到文件大小在可接受的范围内,但可能需要多次递归,并且根据上载的文件大小,可能会导致性能问题。