Vad är speciellt med svd.se:s favicon?

Permalänk
Medlem

Vad är speciellt med svd.se:s favicon?

Jag håller på med ett program som har en funktion där det laddar ner webbplatsers favicon. Det funkar bra på exempelvis dn.se, sr.se, aftonbladet.se, men faviconen på svd.se verkar vara annorlunda. När jag laddar ner filen manuellt och tittar på egenskaper för den så kan inte Windows visa någon information på sammanfattningsfliken.
Någon som har någon aning om vad som gör just svd.se faviconen annorlunda?

Visa signatur

I am Thon, eat my spread!

Permalänk
Vila i frid

Jag kan iaf se info om http://www.svd.se/favicon.ico som vilken annan favicon.ico som helst dvs att den är 16x16 med bit-depth 32.

Permalänk
Medlem
Skrivet av Xellofan:

Jag håller på med ett program som har en funktion där det laddar ner webbplatsers favicon. Det funkar bra på exempelvis dn.se, sr.se, aftonbladet.se, men faviconen på svd.se verkar vara annorlunda. När jag laddar ner filen manuellt och tittar på egenskaper för den så kan inte Windows visa någon information på sammanfattningsfliken.
Någon som har någon aning om vad som gör just svd.se faviconen annorlunda?

Skriver sökvägen först sen rel="shortcut icon"?

Det kanske är din kod som gör de fel.

Visa signatur

Wow. PIII och Voodoo. Back to old days

Permalänk
Medlem

I Vista så kan jag se infon om filen, den har samma egenskapers som t.ex dn.se och sr.se. Den enda skillnad jag kan se är att svd.se är mindre (i byte) än de andra.

Något problem är det med min kod. Det jag gör är att jag hämtar ikonen som en ström och sedan omvandlar den till en bitmap. Det kanske bara är så att jag har tur att det fungerar ibland men att man egentligen inte kan göra så.

Koden är i C#:

WebClient ikonhämtare = new WebClient(); String icoUrl = null; rubrik = inUri.Host.ToString(); sökväg = inUri; Stream hämtadStröm; try { icoUrl = inUri.Scheme.ToString() + "://" + inUri.Host.ToString() + "/favicon.ico"; hämtadStröm = ikonhämtare.OpenRead(icoUrl); favoritbild = new Bitmap(new Bitmap(hämtadStröm), 40, 40); hämtadStröm.Flush(); hämtadStröm.Close(); } catch (WebException) { favoritbild = null; } catch (ArgumentException) { favoritbild = null; }

Någon som någon idé?

Visa signatur

I am Thon, eat my spread!

Permalänk
Testpilot

En ikon-fil är egentligen en container som kan innehålla en eller flera BMP- eller PNG-filer, vad jag kan se utifrån din kod försöker du läsa in ICO-filerna som rena bitmappar vilket man inte alltid lyckas med då det beror på hur ikon-filen är utformad och vilka filtyper som finns i den.

Hittar inget program där jag kan se om det är BMP- eller PNG-filer i ikonerna men jag kan iallafall se att både SR och DN har 8-bitars bilder (DN har två, en 16x16 och en 32x32) medan SVD har en 24-bitars bild i sin. Eventuellt är SvD:s bild i PNG-format och det är därför du inte lyckas läsa in den eller så är det färgdjupet som ställer till det.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Låter mycket troligt! (Duktig hund )

På Wikipedia står det att från och med Vista så stödjer Windows PNG-format, det skulle också förklara varför min XP-maskin inte kan visa info för svd.se ikonen.
Får se om jag kan implementera ikonhämtningen annorlunda.

Visa signatur

I am Thon, eat my spread!

Permalänk
Testpilot

Kom på att jag har XP på datorn på jobbet där jag kollade och eftersom ikonen funkar att kolla på nerladdad så borde det inte vara PNG-format på den eftersom XP inte stödjer det. Var samma sak för mig som du nämner dock att det inte går att se information om filen så det borde rimligtvis vara färgdjupet som är boven.

Det står även på Wikipedia att en ICO-fil som innehåller bitmapar ska ha dessa sparade utan nån form av header, kan hända att om man sparat ikonen felaktigt (exempelvis döpt om en BMP-fil) så ligger headern kvar och då funkar ICO-filen som en bitmap men om den är sparad korrekt så saknas headern.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Jag blir faktiskt inte klok på var exakt problemet ligger. Jag upptäckte att Visual Studio kan läsa .ico och visar formaten på de olika bilderna i ico-filen. Svd.se och de andra är alla BMP, inga PNG alls.
Efter experimenterande verkar det som att jag bara får konstatera att det inte går att skapa bitmappar från ikoner som kör med 24-bitars färger, men färre färger går bra. Av någon anledning vägrar Paint också att läsa svd.se faviconen och XnView informerar att den kommer att konvertera bilden till RGB innan den visas. Något skumt är det med färgkodningen.

En lösning på problemet är att läsa in ikoner som Icon och sedan konvertera dem till Bitmap. Det medför dock ett annat problem, det går bra att skapa Bitmap från en ström från internet men det går inte att göra det med Icon. Lösningen jag kom fram till för det problemet var att laddar ner faviconen som en byte[] som jag sedan skapade en MemoryStream ifrån som jag skapar en Icon ifrån som sen konverteras till Bitmap för att visa den. Jäkla omväg.

Visa signatur

I am Thon, eat my spread!