【问题标题】:Resizing Image in ASP.NET -- Output as a Stream of the resized image for在 ASP.NET 中调整图像大小 - 输出为调整大小图像的流
【发布时间】:2009-08-20 06:11:45
【问题描述】:

我从link text 获得了这段代码并对其进行了一些修改,因为我想将它与我的 AJAX 上传器一起使用,该上传器需要一个流用于将上传的项目添加到附件显示中;

public Stream ResizeFromStream(int MaxSideSize, Stream Buffer)
{
    int intNewWidth;
    int intNewHeight;
    System.Drawing.Image imgInput = System.Drawing.Image.FromStream(Buffer);

    // GET IMAGE FORMAT
    ImageFormat fmtImageFormat = imgInput.RawFormat;

    // GET ORIGINAL WIDTH AND HEIGHT
    int intOldWidth = imgInput.Width;
    int intOldHeight = imgInput.Height;

    // IS LANDSCAPE OR PORTRAIT ?? 
    int intMaxSide;

    if (intOldWidth >= intOldHeight)
    {
        intMaxSide = intOldWidth;
    }
    else
    {
        intMaxSide = intOldHeight;
    }


    if (intMaxSide > MaxSideSize)
    {
        // SET NEW WIDTH AND HEIGHT
        double dblCoef = MaxSideSize / (double)intMaxSide;
        intNewWidth = Convert.ToInt32(dblCoef * intOldWidth);
        intNewHeight = Convert.ToInt32(dblCoef * intOldHeight);
    }
    else
    {
        intNewWidth = intOldWidth;
        intNewHeight = intOldHeight;
    }

    // CREATE NEW BITMAP
    Bitmap bmpResized = new Bitmap(imgInput, intNewWidth, intNewHeight);

    // SAVE BITMAP TO STREAM
    MemoryStream imgStream = new MemoryStream();
    bmpResized.Save(imgStream, imgInput.RawFormat);

    // RELEASE RESOURCES
    imgInput.Dispose();
    bmpResized.Dispose();
    Buffer.Close();

    return imgStream;
} 

并在这段代码中被调用;

private void ItemPicture_FileUploaded(object sender, UploaderEventArgs args)
{
    if (GetVisibleItemCount() >= 5)
        return;

    using (System.IO.Stream stream = args.OpenStream())
    {
        ImageResize ir = new ImageResize();
        // This returns a 0 byte stream
        ItemPictureAttachments.Upload(args.FileSize, args.FileName, ir.ResizeFromStream(640, stream));
        // This works fine
        // ItemPictureAttachments.Items.Add(args.FileSize, args.FileName, stream);
    }
}

在将流返回到调用它的位置时我做错了吗?谢谢!

【问题讨论】:

  • 您是否考虑过使用an open-source library 以获得更好的图像质量和avoid all the edge cases?您可以将所有代码替换为 ImageBuilder.Current.Build(httpPostedFile,"file.jpg", new Resizeettings("width=value&height=value"));

标签: asp.net ajax image resize uploader


【解决方案1】:

根据您的代码,一切正常。我建议你在

处设置一个断点
Bitmap bmpResized = new Bitmap(imgInput, intNewWidth, intNewHeight);

并检查 imgInput 是否不为空。或者 ImageRawFormat 可能有问题。

【讨论】:

    【解决方案2】:

    我使用常规 ASP.NET 文件控件的 PostedFile.Inputstream 属性测试了您的 ResizeFromStream 方法,并且效果很好。也许问题出在您用于检索文件流的组件 (args.OpenStream()) 上?

    【讨论】:

    • 是的,我将使用常规上传。多谢你们! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多