在Aspx中上传和调整大小图片

4

我有一个页面,允许用户上传图片。问题是我的老用户无法自己调整图片大小。我想允许他们上传任何大小的图片,然后当服务器接收到它时,会创建这张图片的一个小副本。

3个回答

15

有很多方法可以调整图像大小,但我喜欢这种方法

System.Drawing.Image image = System.Drawing.Image.FromFile("FilePath");            
int newwidthimg = 160;                
float AspectRatio = (float)image.Size.Width / (float)image.Size.Height;
int newHeight = Convert.ToInt32(newwidthimg / AspectRatio);
Bitmap thumbnailBitmap = new Bitmap(newwidthimg, newHeight);
Graphics thumbnailGraph = Graphics.FromImage(thumbnailBitmap);
thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;
thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;
thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
var imageRectangle = new Rectangle(0, 0, newwidthimg, newHeight);
thumbnailGraph.DrawImage(image, imageRectangle);
thumbnailBitmap.Save("FilePath", ImageFormat.Jpeg);
thumbnailGraph.Dispose();
thumbnailBitmap.Dispose();
image.Dispose();        
我已经固定了宽度,因为我想让所有的图片宽度都是160,并根据纵横比例自动调整高度。

9

您可以使用一种resizeMethod

(注:此处无需翻译,仅为示例)
protected void Button1_Click(object sender, EventArgs e)
{
    HttpPostedFile pf = FileUpload1.PostedFile;
    System.Drawing.Image bm = System.Drawing.Image.FromStream(pf.InputStream);
    bm = ResizeBitmap((Bitmap) bm, 100, 100); /// new width, height
    bm.Save(Path.Combine(YOURUPLOADPATH, pf.FileName);
}

private Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight)
{
    Bitmap result = new Bitmap(nWidth, nHeight);
    using (Graphics g = Graphics.FromImage((System.Drawing.Image)result))
        g.DrawImage(b, 0, 0, nWidth, nHeight);
    return result;
}

另一方面,上传一个大小为3 MB的文件,然后再将其*调整大小*成20kb的图片 - 对我来说并不太好。也许您可以考虑限制上传文件的大小。


1
我喜欢这个选项直接从HttpPost中获取图像,而不依赖于先将图像保存到磁盘上。 - Adam Hey

1

这是一个相当新的解决方案。希望它能有所帮助。

http://forums.asp.net/t/1657138.aspx/1?C+Resize+Profile+Image

protected void UploadButton_Click(object sender, EventArgs e)
    {
        if (File1.HasFile)
        {
            string fileName = Server.HtmlEncode(File1.FileName);
            string extension = System.IO.Path.GetExtension(fileName);
            System.Drawing.Image image_file = System.Drawing.Image.FromStream(File1.PostedFile.InputStream);
            int image_height = image_file.Height;
            int image_width = image_file.Width;
            int max_height = 100;
            int max_width = 100;

            image_height = (image_height * max_width) / image_width;
            image_width = max_width;

            if (image_height > max_height)
            {
                image_width = (image_width * max_height) / image_height;
                image_height = max_height;
            }

            Bitmap bitmap_file = new Bitmap(image_file, image_width, image_height);
            System.IO.MemoryStream stream = new System.IO.MemoryStream();

            bitmap_file.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            stream.Position = 0;

            byte[] data = new byte[stream.Length + 1];
            stream.Read(data, 0, data.Length);

            Profile.Picture = data;
            Profile.PictureType = "image/png";
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接