如何裁剪或调整图像大小以在 asp.net 中设置纵横比

Posted

技术标签:

【中文标题】如何裁剪或调整图像大小以在 asp.net 中设置纵横比【英文标题】:How to crop or resize Image to set aspect ratio in asp.net 【发布时间】:2013-11-01 06:25:39 【问题描述】:

我的网络表单中有一个图像控件。我将其宽度设置为 100 像素,高度设置为 100 像素。但是如果有人上传比例为 100 * 120 的图像。我希望它裁剪或调整大小并设置 100 * 100。我尝试设置最大宽度但没有成功,我尝试了使用代码的位图方法

 protected void Button1_Click(object sender, EventArgs e)

    if (FileUpload1.HasFile)
    
        string filename = FileUpload1.FileName;
        string directory = Server.MapPath("~/");
        Bitmap originalBMP = new Bitmap(FileUpload1.FileContent);
        float origWidth = originalBMP.Width;
        float origHeight = originalBMP.Height;
        float sngRatio = origWidth / origHeight;
        float newWidth = 100;
        float newHeight = newWidth / sngRatio;
        Bitmap newBMP = new Bitmap(originalBMP,Convert.ToInt32(newWidth),Convert.ToInt32(newHeight));
        Graphics oGraphics = Graphics.FromImage(newBMP);
        oGraphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        oGraphics.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight);
        newBMP.Save(directory + filename);
        originalBMP = null;
        newBMP = null;
        oGraphics = null;
        Label1.Text = "File <b style='color: red;'>" + filename + "&lt;</b> uploaded.";
        Image1.ImageUrl = @"~/" + filename;
    
    else
    
        Label1.Text = "No file uploaded!";
    

它工作,但它保存调整大小的图像在目录中我想将原始图像保存在目录中并在图像控件中显示调整大小的图像。

【问题讨论】:

【参考方案1】:

查看 codeplex 上的 Web Image Resize 处理程序:http://webimageresizer.codeplex.com/

它是一个处理图像的自定义处理程序。

示例网址 取自 codeplex 项目的主页

// 返回映射到 /bla.jpg 的图像,调整大小为 100 像素的宽度,保留相对于高度的纵横比 /ImageHandler.ashx?src=/bla.jpg&width=100

// 返回映射到 /bla.jpg 的图像,调整大小为 100 像素的高度,保留相对于宽度的纵横比 /ImageHandler.ashx?src=/bla.jpg&height=100

// 返回图像映射到 /bla.jpg 调整为宽度 100 像素和高度 50 像素 /ImageHandler.ashx?src=/bla.jpg&width=100&height=50

另一种选择是使用http://imageresizing.net/

好处是它注册了一个处理程序来透明地处理图像,这意味着您只需将查询字符串变量添加到原始图像 url 来操作图像。

示例网址

/images/bla.jpg?h=100&w=100

【讨论】:

感谢您回答 jaq 我只是在尝试图像大小调整.net 感谢您提供示例网址 /images/bla.jpg?h=100&w=100 的示例网址无法使用,您可以编辑一下 Image1.ImageUrl = @"~/" + filename + "?h=100&amp;w=100"; 可能是您所追求的,因为这将生成图像的相对 url 并添加宽度和高度查询字符串变量。

以上是关于如何裁剪或调整图像大小以在 asp.net 中设置纵横比的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GraphicsMagick 从图像中裁剪/调整背景/边框的大小

如何在Kivy的TabbedPanel中设置图像大小?

在 asp.net 中调整图像大小而不会丢失图像质量

React 裁剪图像库,也可以移动或调整图像大小

调整图像大小而不扭曲或裁剪它

ASP.NET 图像上传与调整大小