我读了几篇关于StackOverflow的文章,但似乎没有一篇适合我,所以情况是这样的。
我有一个网页,是不受我的控制。它包含一个在标记中被引用为类似<img src="getimage.asp?pic=4c54aae0ea..." />
的图像。给定该图像的URL,我想下载它,将其保存到磁盘并对其进行处理。
当我直接在浏览器中输入URL时,我得到一个二进制流。这是第一批字符。
ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„ÿÄ¢ }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #
如何使用c#或任何其他语言将数据转换为图像?由于我不控制页面,我不知道数据是如何编码的-所以我仍然可以解码吗?
从前两个字符可以看出,字符串"LEAD Technologies Inc."包含在数据中,所以我猜它不是所有的图像数据。但至少,Chrome显然知道如何解码它。在谷歌上查了一下,发现"LEAD技术"是一个成像SDK,但他们的网站似乎没有提供太多关于它的使用信息,我也不精通图像处理。
前两个字符表明响应可能是一个被解释为ASCII文本的jpeg文件。我猜HTTP响应中的Content-Type
标头有错误的值,可能是text/plain
或text/html
而不是imagejpeg
。这使得Chrome将图像显示为纯文本。
我认为你不需要转换数据。只需将响应流保存到一个文件中,您就会得到一个合适的jpeg文件:
string url = "http://my-domain/getimage.asp?pic=4c54aae0ea...";
string fileLocation = @"C:MyImage.jpg";
var client = new WebClient();
client.DownloadFile(url, fileLocation);
我认为响应可能是jpeg的原因是,jpeg文件以0xFFD8FFE0
开始,当显示为ISO 8859-1
编码文本时,看起来像ÿØÿà
。