C# 在Asp Core中上载时调整图像大小

C# 在Asp Core中上载时调整图像大小,c#,asp.net-core,C#,Asp.net Core,在保存照片之前,当用户选择上传照片时,我需要更改照片的大小并将其保存为新大小 我正在使用此代码,但它不会以新的大小保存。有什么问题吗 public async Task<IActionResult> UploadNewsPic() { var file = Request.Form.Files[0]; try { if (file.Length > 0) {

在保存照片之前,当用户选择上传照片时,我需要更改照片的大小并将其保存为新大小


我正在使用此代码,但它不会以新的大小保存。有什么问题吗

public async Task<IActionResult> UploadNewsPic()
    {
        var file = Request.Form.Files[0];
        try
        {
            if (file.Length > 0)
            {
                string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                string fullPath = Path.Combine(_applicationRoot.UploadNewPath(), file.Name);
                using (var stream = new FileStream(fullPath, FileMode.Create))
                {
                    if (file.IsImage())
                    {
                        await file.ResizeImage(3, 3);
                        file.CopyTo(stream);
                    }
                }
            }
            return Ok();
        }
        catch (Exception e)
        {
            return BadRequest();
        }
    }
public异步任务UploadNewsPic()
{
var file=Request.Form.Files[0];
尝试
{
如果(file.Length>0)
{
字符串fileName=ContentDispositionHeaderValue.Parse(file.ContentDisposition.fileName.Trim(“”);
字符串fullPath=Path.Combine(_applicationRoot.UploadNewPath(),file.Name);
使用(var stream=newfilestream(fullPath,FileMode.Create))
{
if(file.IsImage())
{
wait file.ResizeImage(3,3);
file.CopyTo(流);
}
}
}
返回Ok();
}
捕获(例外e)
{
返回请求();
}
}
这是调整大小扩展:

 public async static Task<Image> ResizeImage(this IFormFile file, int width, int height)
    {
        using (var memoryStream = new MemoryStream())
        {
            await file.CopyToAsync(memoryStream);
            using (var img = Image.FromStream(memoryStream))
            {
                return img.Resize(width, height);
            }
        }
    }

    public static Image Resize(this Image image, int width, int height)
    {
        var res = new Bitmap(width, height);
        using (var graphic = Graphics.FromImage(res))
        {
            graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode = SmoothingMode.HighQuality;
            graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphic.CompositingQuality = CompositingQuality.HighQuality;
            graphic.DrawImage(image, 0, 0, width, height);
        }
        return res;
    }
public async static Task ResizeImage(此文件,int-width,int-height)
{
使用(var memoryStream=new memoryStream())
{
等待文件.CopyToAsync(memoryStream);
使用(var img=Image.FromStream(memoryStream))
{
返回img.Resize(宽度、高度);
}
}
}
公共静态图像调整大小(此图像,整数宽度,整数高度)
{
var res=新位图(宽度、高度);
使用(var graphic=Graphics.FromImage(res))
{
graphic.InterpolationMode=InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode=SmoothingMode.HighQuality;
graphic.PixelOffsetMode=PixelOffsetMode.HighQuality;
graphic.CompositingQuality=CompositingQuality.HighQuality;
graphic.DrawImage(图像,0,0,宽度,高度);
}
返回res;
}
您的
ResizeImage()
函数返回一个已调整大小的图像,它不会编辑图像本身,因此必须将其设置为变量

if (file.IsImage())
{
    Image imageResized = await file.ResizeImage(3, 3);
    // ...
}

您需要将结果从
ResizeImage
保存到流中。现在您只是复制原始文件

var img = await file.ResizeImage(3, 3);
img.Save(stream, SomeFormat);

“但它不能以新的尺寸保存“此信息没有真正的帮助。例如,您是否在任何地方收到任何错误消息,您是否尝试调试此问题以确保它确实执行了预期的操作。请不要标记不相关的技术。我在这里没有看到任何与EF有关的东西。您应该标记ASP.NET核心。此外,在服务器系统上使用图形API也不受支持,即使它可以工作(如果我没有完全弄错的话)。还有像ImageSharp这样的库,顺便说一下,您不需要将
FormFile
复制到
ResizeImage
中的内存流中,只需使用
OpenReadStream
<代码>Image.FromStream(file.OpenReadStream())