1,105,427 Community Members

diff b/w favicons downloaded using java code and those normally downloaded ?

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

I downloaded data from google.com/favicon.ico and saved it in a file "icon.png" using the following:

URL url=new URL("http://www.google.com/favicon.ico");
InputStream ss=url.openStream();
byte bytes[]=new byte[100000];
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=ss.read(bytes, offset, bytes.length-offset)) >= 0) {
   offset += numRead;
}
FileOutputStream out=new FileOutputStream("icon.png");
out.write(bytes);

Now, icon.png opens normally and shows the google icon. The catch is that when I try to set it as an icon in Qt Jambi, it fails to show up, whereas if I download some icons the normal way, they get loaded properly. My question is that is there any difference between the two ?

Member Avatar
~s.o.s~
Failure as a human
10,399 posts since Jun 2006
Reputation Points: 2,496 [?]
Q&As Helped to Solve: 992 [?]
Skill Endorsements: 72 [?]
Administrator
Featured
 
0
 

The problem is in your assumption that a favicon for a site is always a PNG image, which isn't the case. Normally sites use a ICO image format, which is a different image format than PNG or BMP. Read more here.

To confirm this, try downloading the Daniweb favicon and setting it up in Qt Jambi, it should work (assuming Jambi supports BMP). The same shouldn't work with Yahoo, Microsoft or any other sites' favicon.

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

Thanks.

I found a favicon at the url : http://www.daniweb.com/favicon.ico The extension suggests that it also is an ico image. I tried ..../favicon.jpeg and ..../favicon.png but tha pages don't exist.

In the plugins directory of QtJambi, inside the iamgeformats folder, I found th following:

1. libqgif.so
2. libqico.so
3. libqjpeg.so
4. libqmng.so
5. libqsvg.so
6. libqtiff.so

So, perhaps support for the ico format is there, I think. I think, I found a link which says that this may be a bug : http://www.listware.net/201005/qt-interest/48382-qt-interest-qwebview-and-qt-image-plugins.html
Any way in which I can get png format of favicons and display them. Any java library that does that ?

Member Avatar
~s.o.s~
Failure as a human
10,399 posts since Jun 2006
Reputation Points: 2,496 [?]
Q&As Helped to Solve: 992 [?]
Skill Endorsements: 72 [?]
Administrator
Featured
 
0
 

The extension suggests that it also is an ico image

Codecs don't work based on extensions, I can very well have a PNG with extension WTH and it would open up just fine in applications which support PNG.

Anyways, I personally don't know of any converters but you can try picking up ideas from this thread.

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

Thanks. But favicons are dynamically loaded. I will need to convert them at the time the website is loading. Since the application is platform-independent, it will be difficult to utilize these tools to convert the images.

Perhaps, I can upload these images to a site like convertico.com and download the converted image from there. Is it possible to do that ? Any resources where I can learn the method ?

Member Avatar
~s.o.s~
Failure as a human
10,399 posts since Jun 2006
Reputation Points: 2,496 [?]
Q&As Helped to Solve: 992 [?]
Skill Endorsements: 72 [?]
Administrator
Featured
 
0
 

Would you be using favicons from existing domains or favicons stored locally? If you would be using existing favicons, use the google ICO to PNG converter. http://www.google.com/s2/favicons?domain=daniweb.com

If you want to convert local files, you would have to find some online service like the one you mentioned. Unless the site exposes a programmatic public API, directly using the service might be a bit of pain in the neck along with other implications like taking prior permission of the site owner.

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

Thanks a ton ! Really, it solved a great headache. I just wanted favicons for existing domains, the sites that I open in my browser. But this google ICO to PNG convertor, I didn't find any documentation,etc on the net. Any link where the entire gamut of google's image conversion facilities is documented.

Member Avatar
~s.o.s~
Failure as a human
10,399 posts since Jun 2006
Reputation Points: 2,496 [?]
Q&As Helped to Solve: 992 [?]
Skill Endorsements: 72 [?]
Administrator
Featured
 
0
 

I don't think there is any need for a documentation nor one exists I guess. You simply need to dynamically create a URL based on your requirement with a URL template like "http://www.google.com/s2/favicons?domain=" + yourDomain and read by the connection opened. Anyways, since I've a bit of free time, I've written a throw-away code which works; feel free to modify it as you see fit.

package pkg;

public class IcoConverterTest {

    public static void main(final String[] args) {
        if(args == null || args.length < 2) {
            System.out.println("pkg.IcoConverterTest <domain> <outdir> <optional-file-name>");
            return;
        }
        final String domain = args[0].trim();
        final String outdir = args[1].trim();
        final String fileName = args.length > 2 ? args[2].trim() : "favicon.png";
        new IcoConverter().convertFor(domain, outdir, fileName);
    }

}

class IcoConverter {

    public static final String CONVERTER_SERVICE = "http://www.google.com/s2/favicons?domain={0}";

    public void convertFor(final String domain, final String outdir, final String filename) {
        InputStream is = null;
        OutputStream os = null;
        try {
            try {
                final byte[] buf = new byte[4 * 1024]; // 4kB
                is = new URL(MessageFormat.format(CONVERTER_SERVICE, domain)).openStream();
                os = new FileOutputStream(new File(new File(outdir), filename));
                int size = -1;
                while((size = is.read(buf)) != -1) {
                    os.write(buf, 0, size);
                }
            } finally {
                if(is != null)  is.close();
                if(os != null)  os.close();
            }
        } catch(Exception e) {
            throw new RuntimeException("ICO to PNG conversion failed!", e);
        }
    }

}

There are a couple of gotachs when using this service, you can read about them in this discussion.

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

Thanks a lot for the code. I actually meant if there were any more such services that google offers (like ICO to other formats apart from PNG). I mean this is some kind of service that's not well publicized (doesn't show up on google). Where should one look for such services of google ? The link is also unintuitive (s2 ?)

Member Avatar
~s.o.s~
Failure as a human
10,399 posts since Jun 2006
Reputation Points: 2,496 [?]
Q&As Helped to Solve: 992 [?]
Skill Endorsements: 72 [?]
Administrator
Featured
 
0
 

I actually meant if there were any more such services that google offers (like ICO to other formats apart from PNG). I mean this is some kind of service that's not well publicized (doesn't show up on google). Where should one look for such services of google ?

Unfortunately I don't have an answer for that; I guess it's one of those "oooh, cool stuff" things.

Member Avatar
daudiam
Junior Poster
151 posts since Dec 2009
Reputation Points: -8 [?]
Q&As Helped to Solve: 2 [?]
Skill Endorsements: 0 [?]
 
0
 

thanks

Question Answered as of 3 Years Ago by ~s.o.s~
You
This question has already been solved: Start a new discussion instead
Post:
Start New Discussion
View similar articles that have also been tagged: