C# 使用asp.net、C从数据库加载图像后调整图像大小

C# 使用asp.net、C从数据库加载图像后调整图像大小,c#,asp.net,image,C#,Asp.net,Image,我有一张从数据库中提取的用户上传的图片,我正在将其缩小,以便显示在我打算打印的网页上。我曾考虑在用户上传时保存一个较小的版本,但由于该文档的设计尚未最终确定,我一直在寻找更具动态性的东西。此外,此文档只需打印一次,而上传的图像会在应用程序中的各个位置多次显示 使用javascript在保持其比例的同时调整其大小,在一段时间内打印效果良好。为样式添加边距后,打印机开始以全尺寸打印图像。我想这是利润。它在屏幕上看起来很好,但把所有内容都从纸上推了下来 这让我考虑在服务器上用C代码调整它的大小,但我们

我有一张从数据库中提取的用户上传的图片,我正在将其缩小,以便显示在我打算打印的网页上。我曾考虑在用户上传时保存一个较小的版本,但由于该文档的设计尚未最终确定,我一直在寻找更具动态性的东西。此外,此文档只需打印一次,而上传的图像会在应用程序中的各个位置多次显示

使用javascript在保持其比例的同时调整其大小,在一段时间内打印效果良好。为样式添加边距后,打印机开始以全尺寸打印图像。我想这是利润。它在屏幕上看起来很好,但把所有内容都从纸上推了下来

这让我考虑在服务器上用C代码调整它的大小,但我们使用上传到数据库的用户图像,我似乎无法在页面生命周期中找到正确的时间或位置来访问和更改宽度和高度。我在网上尝试过使用位图的各种方法,但当我使用文件下载页面作为图像url时,它们都需要一个文件


也许我找错地方了,需要回到客户那里。非常感谢您的建议和帮助。

您能否实施这样一个流程:

用户发送图像 当用户等待时,通过函数/例程/脚本打开图像 图像会动态调整大小并保存在正确的位置,从而返回成功代码 用户根据脚本的返回值接收消息。 编辑:

我同意你在这里得到的大多数答复


如果图片存储在数据库中,则首先需要为所有图片制作缩略图并将其放入同一数据库中,然后在添加新图片时需要执行一个过程来动态创建缩略图。

当您必须根据已知约束调整图像大小时,而且可能需要多次这样做,我一直主张在上传和存储结果时进行一次调整大小。当然,您不会说需要保留原始图像大小,但如果需要,则只需存储图像两次-一次为原始大小,一次为调整大小的尺寸


完成后,您就可以根据调整大小后的图像的已知尺寸来定义打印布局,而不必为每次使用调整大小而费心了。

我建议在上传时进行转换,并可能保存这两幅图像,以防您想让用户点击整个图像。使用此模型,您只需执行一次转换,并且可以渲染任意大小的图像。Image类上的GetThumbnailImage方法将执行您想要的操作,如下所示:

String imageFile = uploadedFileName;
Image baseImage = Image.FromFile(imageFile);
Image thumbImage = baseImage.GetThumbnailImage(300,300,..., ...);
SaveMyImage(baseImage);
SaveMyImage(thumbImage);

请务必查看文档中的参数,以验证缩放问题和回调处理。

只要文件下载器页面返回正确大小的图像,不指向实际图像就无所谓了

在您的FileDownloader页面伪代码中,我希望看到如下内容:

using (Image img = LoadImageFromDatabase())
{
    using (Image resized = ResizeImage(img))
    {
        Response.Clear();
        // Set proper headers
        using (MemoryStream ms = new MemoryStream())
        {
            resized.Save(ms); // maybe the function isn't called Save, can't remember a 100%
            ms.Seek(0); // Can't remember if this is necessary
            Response.BinaryWrite(ms);
        }
    }
}
就像我提到的,它是高度伪代码,但是它应该是直接打开的Visual Studio,我现在还没有访问它,自从我上次使用它已经有一段时间了,因为我像这个问题中的大多数其他建议一样存储了调整大小的图像-我也这样做,然而,我意识到这不是你的选择。免责声明:我建议你使用我为此设计的开源库。我肯定有偏见,但4年来,成千上万的快乐用户证明了我的偏见:

您不应该调整.ASPX页面中的图像大小,也不应该为它们提供服务。图像应该由HttpModule在单独的请求中处理,这样响应性就不会受到影响

如果您在SQL中为每个图像都有某种ID,那么可以使用VirtualPathProvider通过URL(如/sqlimages/ID)访问它

再加上这个,你就准备好了

您只需从HTML中引用这样的图像,甚至不必编写一行C

如果您编写自己的解决方案,则不会导致服务器崩溃


希望这有帮助

对不起,我想我应该解释一下我动态调整尺寸的动机。我编辑了我的问题。你有代码吗?我不是ASP.Net方面的专家,我想看看我是否能够从您使用的类中编写一个文件。您的情况很常见。是的。事实上,甚至还有一个SQL插件。给我发电子邮件support@imageresizing.net我很乐意帮助你。