【发布时间】:2019-08-06 23:27:56
【问题描述】:
我无法从 url 检索图像。以前,在设置 HttpClient 标头之前,我根本无法连接到该站点。我能够从其他来源检索图像,但不能从这个特定来源检索。
获取图片的代码:
var img = new BitmapImage();
img.BeginInit();
img.UriSource = new Uri("https://i1.adis.ws/i/jpl/jd_083285_a?qlt=80&w=600&h=425&v=1&fmt=webp", UriKind.RelativeOrAbsolute);
img.EndInit();
Console.Out.WriteLine();
ImageShoe.Source = img;
如果我尝试使用不同的 url 检索不同的图像,例如 https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png,它可以正常工作。
更新:
似乎使用字节数组是可行的方法,但我仍然不确定这里有什么问题。
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
var url = "https://i1.adis.ws/i/jpl/jd_083285_a?qlt=80&w=600&h=425&v=1&fmt=webp";//baseUrl + productUrl;
var result = await client.GetByteArrayAsync(new Uri(
MemoryStream buf = new MemoryStream(result);
var image = new BitmapImage();
image.StreamSource = buf;
this.ImageShoe.Source = image;
【问题讨论】:
-
它最后没有 .fileformat,因此您无法解析它,因为 WPF 不知道如何处理数据。试试这个:img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/…
-
我认为这可能是个问题,但使用img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/… 之类的网址就可以了。你知道我如何得到图像吗?
-
下载它并将其添加到您的项目资源中?还是需要动态加载?
-
@DenisSchaf 虽然 WPF 确实无法解码 WebP,但在没有适当的扩展。编码格式由帧缓冲区前几个字节中的幻数确定。这就是为什么您可以将任何支持的图像格式的编码帧作为 MemoryStream 中的字节数组传递给 WPF BitmapImage 的 StreamSource 属性,而无需显式指定编码格式。您可以通过重命名来尝试此操作,例如将 .png 文件转换为 .jpg。它仍然被解码为 PNG。
标签: c# wpf url web-scraping webp