Image 将二进制数据从URL转换为图像文件

Image 将二进制数据从URL转换为图像文件,image,binary-data,Image,Binary Data,我读了几篇关于StackOverflow的文章,但在我的案例中似乎没有一篇有效,所以情况如下 我有一个不受我控制的网页。它包含标记中引用的图像,类似于。给定该图像的URL,我想下载它,将其保存到磁盘并对其进行处理 当我直接在浏览器中输入URL时,我得到一个二进制流。这是第一批字符 ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„ÿÄ¢ }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTU

我读了几篇关于StackOverflow的文章,但在我的案例中似乎没有一篇有效,所以情况如下

我有一个不受我控制的网页。它包含标记中引用的图像,类似于
。给定该图像的URL,我想下载它,将其保存到磁盘并对其进行处理

当我直接在浏览器中输入URL时,我得到一个二进制流。这是第一批字符

ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„ÿÄ¢       }!1AQa"q2‘¡#B±ÁRÑð$3br‚     %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á   #
如何使用C#或任何其他语言将该数据转换为图像。因为我不控制页面,所以我不知道数据是如何编码的——所以我仍然可以解码它吗


从前两个字符可以看出,数据中包含字符串“LEAD Technologies Inc.”,因此我猜它不全是图像数据。但至少,Chrome显然知道如何解码。谷歌的一个快速检查显示,“领先技术”是一个成像SDK,但他们的网站似乎没有提供太多关于它的使用信息,而且Im也不擅长图像处理。任何想法都将不胜感激。

前两个字符表示响应可能是一个解释为ASCII文本的jpeg文件。我猜HTTP响应中的
Content-Type
头的值是错误的,可能是
text/plain
text/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
编码文本时,它看起来像
。JPEG文件中可以嵌入元数据,通常它们的内部结构非常混乱。因为开头有
JFIF
字母,所以可以判断它是JPEG。好的。这是有道理的,但是如何保存它呢?好的。知道了。但是,简单地下载并保存您的代码示例所建议的数据,只会保存一个带有灰色背景的小jpg文件以及上面写着“无可用照片”的文本。还有其他想法吗?我知道URL包含图像数据,因为我在浏览器中看到了:)顺便说一句,创建一个简单的HTML文档时,只需将href属性设置为URL的图像元素,即可直接呈现与上述代码下载的图像相同的图像。“无照片可用”。是否原始网页在幕后使用了某种编码?我还检查了在浏览器中直接打开URL时发送给服务器的请求,服务器返回MIME类型text/htmlUpdate:如果我打开拥有照片的页面的页面源,并在按住Chrome中的ALT键(下载文件)的同时单击href属性中的URL,Chrome会将URL作为htm文件下载。如果我将该文件从XX.htm重命名为XX.jpg,我会得到一幅完美的图片!但这与上面使用WebClient对象下载文件的代码有何不同?谢谢@凯文·约翰逊。有时,网站通过检查会话cookie或http referer头(是的,一个“r”)阻止您下载图像。您可以将referer头添加到
WebClient
对象的
Headers
集合中。