【问题标题】:Getting image height and width when image is saved in database将图像保存在数据库中时获取图像的高度和宽度
【发布时间】:2009-03-19 16:52:54
【问题描述】:

我使用 ASP.NET(2.0) 将图像保存到我的 SQL Server 数据库中。

(imageData -> image) (imageType -> varchar) (imageLength -> bigint)

因此,imageData 将是“二进制数据”,imageType 将类似于“image/gif”,imageLength 将类似于“6458”......

是否可以从我的 ASP.NET 中的 VB.NET 代码中获取图像的高度和宽度? 我想让我的 web 表单上的图片框与保存在我的数据库中的实际图像的大小相同。

问候 艾蒂安

【问题讨论】:

    标签: asp.net sql sql-server vb.net


    【解决方案1】:

    假设您在流中拥有数据:

    System.Drawing.Image.FromStream(yourStream).Height

    当您将图像保存到数据库时,这样做可能会更好,因为我确信加载图像对象不会很便宜。

    编辑

    如果我们将此发送到电子邮件,那么下一个遇到此问题的人将不会记录我们的解决方案。让我们暂时将其保留在论坛中。

    我们知道,我是一名 C# 开发人员,所以如果这是一个问题,我不会尝试记住 vb.net 语法,并且您需要帮助转换让我知道。

    我假设您有一个 IDataReader,它正在从您的数据库中提取图像或二进制 varbinary 等字段。您需要将其加载到派生自 System.IO.Stream 的对象中。对于我们的目的,MemoryStream 是完美的选择,因为它不需要磁盘等后备存储。

    System.IO.MemoryStream yourStream = new System.IO.MemoryStream(dr["imgLength"] as byte[]);
    System.Drawing.Image yourImage=System.Drawing.Image.FromStream(yourStream);
    
    yourImage.Height;
    yourImage.width
    

    【讨论】:

      【解决方案2】:

      当您最初将图像保存到数据库时,我会将图像的高度和宽度保存在单独的列中。然后,当您执行 select 语句从数据库中读取图像时,您还可以访问数据库中的高度和宽度字段。

      或者,您可以在从数据库中加载图像时访问高度和宽度信息,然后在将图像分配给图片框之前设置高度和宽度属性。

      【讨论】:

        【解决方案3】:

        您可以获取高度和宽度,但每次需要该信息时,您都必须使用 system.drawing.image 库将整个图像加载到内存中。

        第一次将其保存到数据库时最好将其保存为单独的字段,这通常是我所做的。

        【讨论】:

          【解决方案4】:

          听起来您的数据库中还需要 2 个字段,即高度和宽度。

          【讨论】:

          • 好吧,如果你重建图像,它上面有 Height 和 Width 属性。我想我假设不是这样。
          【解决方案5】:

          我坚信,经过几百 GB 的图像后,您会发现自己认为文件系统和静态文件 http 服务器比数据库更适合存储图像。它还允许您使用数千种现有的免费工具来处理、移动、托管等图像。您的数据库可能会很忙,并且不容易集群。

          【讨论】:

            【解决方案6】:
            Dim mobj_wc As New System.Net.WebClient
            Dim obj_BookOriginalImage As System.Drawing.Bitmap
            Dim ImageInBytes() As Byte = mobj_wc.DownloadData(mstr_BookURL & mds_BookDetails.Tables(0).Rows(0).Item("BookImage"))
            
            'CREATE A MEMORY STREAM USING THE BYTES
            Dim ImageStream As New IO.MemoryStream(ImageInBytes)
            obj_BookOriginalImage = New System.Drawing.Bitmap(ImageStream)
            mint_ImageWidth = obj_BookOriginalImage.Width
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-11-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-23
              • 2011-11-26
              • 2012-06-02
              • 2011-01-02
              相关资源
              最近更新 更多