【问题标题】:How can I convert image url to system.drawing.image如何将图像 url 转换为 system.drawing.image
【发布时间】:2012-08-01 20:25:21
【问题描述】:

我正在使用VB.Net 我有一个图片的网址,比如说http://localhost/image.gif

我需要从该文件创建一个 System.Drawing.Image 对象。

注意将此保存到文件然后打开它不是我的选择之一 我也在使用ItextSharp

这是我的代码:

Dim rect As iTextSharp.text.Rectangle
        rect = iTextSharp.text.PageSize.LETTER
        Dim x As PDFDocument = New PDFDocument("chart", rect, 1, 1, 1, 1)

        x.UserName = objCurrentUser.FullName
        x.WritePageHeader(1)
        For i = 0 To chartObj.Count - 1
            Dim chartLink as string = "http://localhost/image.gif"
            x.writechart( ** it only accept system.darwing.image ** ) 

        Next

        x.WritePageFooter()
        x.Finish(False)

【问题讨论】:

    标签: c# asp.net .net vb.net itextsharp


    【解决方案1】:

    您可以使用 WebClient 类下载图像,然后使用 MemoryStream 读取它:

    C#

    WebClient wc = new WebClient();
    byte[] bytes = wc.DownloadData("http://localhost/image.gif");
    MemoryStream ms = new MemoryStream(bytes);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    

    VB

    Dim wc As New WebClient()
    Dim bytes As Byte() = wc.DownloadData("http://localhost/image.gif")
    Dim ms As New MemoryStream(bytes)
    Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
    

    【讨论】:

    • 如果您担心图像不存在,您会将 MemoryStream 部分放在 using 语句中吗?
    • 如果您同时为 C# 路由提供 ASP.Net MVC 和 ASP.Net Core 解决方案,我会支持这个 SO HARD -(ASP.Net Core 不能使用 WebClient
    【解决方案2】:

    其他答案也是正确的,但是看到 Webclient 和 MemoryStream 没有被处理会很痛苦,我建议将您的代码放在 using 中。

    示例代码:

    using (var wc = new WebClient())
    {
        using (var imgStream = new MemoryStream(wc.DownloadData(imgUrl)))
        {
            using (var objImage = Image.FromStream(imgStream))
            {
                //do stuff with the image
            }
        }
    }
    

    文件顶部所需的导入是System.IOSystem.NetSystem.Drawing

    在 VB.net 中,语法是 using wc as WebClient = new WebClient() {

    【讨论】:

      【解决方案3】:

      您可以使用 HttpClient 并通过几行代码异步完成此任务。

      public async Task<Bitmap> GetImageFromUrl(string url)
          {
              var httpClient = new HttpClient();
              var stream = await httpClient.GetStreamAsync(url);
              return new Bitmap(stream);
          }
      

      【讨论】:

      • 请考虑在您的答案中添加一些解释或细节。虽然它可能会回答问题,但只是添加一段代码作为答案,并不能帮助 OP 或未来的社区成员理解问题或建议的解决方案。
      【解决方案4】:

      你可以试试这个来获取图片

      Dim req As System.Net.WebRequest = System.Net.WebRequest.Create("[URL here]")
      Dim response As System.Net.WebResponse = req.GetResponse()
      Dim stream As Stream = response.GetResponseStream()
      
      Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(stream)
      stream.Close()
      

      【讨论】:

      • 你能告诉我我怎样才能对Response.ContentType = "image/png"我非常欣赏的页面做同样的想法
      • 我可以这样做,就像任何图像一样,response.GetResponseStream() 必须可以正常工作。
      【解决方案5】:

      iTextSharp 能够接受 Uri 的:

      Image.GetInstance(uri)
      

      【讨论】:

        【解决方案6】:
        Dim c As New System.Net.WebClient
        Dim FileName As String = "c:\StackOverflow.png"
        c.DownloadFile(New System.Uri("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=5"), FileName)
        Dim img As System.Drawing.Image
        img = System.Drawing.Image.FromFile(FileName)
        

        【讨论】:

        • 其实我更喜欢他的^我急着要第一。
        • 不需要保存文件(您可以使用内存流解决),只需添加潜在问题(假设您在无法在指定路径中写入的 Web 应用程序中)
        猜你喜欢
        • 2021-09-07
        • 2011-10-25
        • 2012-02-14
        • 1970-01-01
        • 2021-07-27
        • 2023-03-26
        • 2011-04-14
        • 2011-01-25
        相关资源
        最近更新 更多