1

我在 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,但他们的网站似乎没有提供太多关于它的使用信息,而且我也不精通图像处理。任何想法,将不胜感激。

4

1 回答 1

2

前几个字符表明响应可能是一个解释为 ASCII 文本的 jpeg 文件。我猜Content-TypeHTTP 响应中的标头有错误的值,可能类似于text/plainortext/html而不是image\jpeg. 这使得 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编码文本显示时的开头。

于 2013-04-27T20:12:19.897 回答