C# 如何将图像url转换为system.drawing.image

C# 如何将图像url转换为system.drawing.image,c#,asp.net,.net,vb.net,itextsharp,C#,Asp.net,.net,Vb.net,Itextsharp,我使用的是VB.Net我有一个图像的url,比如说http://localhost/image.gif 我需要从该文件创建System.Drawing.Image对象 请注意,将此保存到文件,然后打开它不是我的选项之一 我还使用了ItextSharp 这是我的密码: Dim rect As iTextSharp.text.Rectangle rect = iTextSharp.text.PageSize.LETTER Dim x As PDFDocument =

我使用的是
VB.Net
我有一个图像的url,比如说
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)

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

C#

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)

你可以试试这个来获得图像

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()

iTextSharp能够接受Uri的:

Image.GetInstance(uri)

其他答案也都是正确的,但是看到Webclient和MemoryStream没有得到处理会很痛苦,我建议您使用将代码放入

示例代码:

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.IO
System.Net
&
System.Drawing


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

您可以使用HttpClient,用几行代码异步完成此任务

public async Task<Bitmap> GetImageFromUrl(string url)
    {
        var httpClient = new HttpClient();
        var stream = await httpClient.GetStreamAsync(url);
        return new Bitmap(stream);
    }
公共异步任务GetImageFromUrl(字符串url)
{
var httpClient=新的httpClient();
var stream=await httpClient.GetStreamAsync(url);
返回新位图(流);
}

事实上,我更喜欢他的^I我正赶在第一位。不需要保存文件(您可以使用内存流解决),只需添加潜在问题(例如您在一个无法在指定路径中写入的web应用程序中)您能告诉我如何对
Response.ContentType=“image/png”的页面进行同样的思考吗
我真的很感激我可以用与任何映像相同的方法来实现它,
response.GetResponseStream()
必须工作良好。如果您担心映像不在那里,您会将MemoryStream部分放在using语句中吗?如果您同时为C路由提供ASP.Net MVC和ASP.Net核心解决方案,我会非常努力地支持这一点(ASP.NET核心不能使用<代码> WebClient < /代码>)请考虑向您的答案添加一些解释或细节。虽然它可能回答问题,只是添加一段代码作为答案,但并不是说帮助OP或未来的社区成员理解该问题或建议的解决方案。
using (var wc = new WebClient())
{
    using (var imgStream = new MemoryStream(wc.DownloadData(imgUrl)))
    {
        using (var objImage = Image.FromStream(imgStream))
        {
            //do stuff with the image
        }
    }
}
public async Task<Bitmap> GetImageFromUrl(string url)
    {
        var httpClient = new HttpClient();
        var stream = await httpClient.GetStreamAsync(url);
        return new Bitmap(stream);
    }