Posted on 17th February 2009 by admin in Computers | Web Development
class, ico, image, PHP, png, rgb
A few posts ago I wrote about using a PHP class to convert an ICO image to a PNG (or GIF or JPG). I just discovered a bug in the class.
I ran into a problem where some red and orange ICO images turned blue during the conversion. Reading this forum post made me realize that the red and blue values were switched somewhere in class.ico.php. With some experimentation I found it:
In class.ico.php, lines 264-267 need to be changed from
$c[$i] = $this->AllocateColor($im, $this->formats[$index]['colors'][$i]['red'],
$this->formats[$index]['colors'][$i]['green'],
$this->formats[$index]['colors'][$i]['blue'],
round($this->formats[$index]['colors'][$i]['reserved'] / 255 * 127));
to
$c[$i] = $this->AllocateColor($im, $this->formats[$index]['colors'][$i]['blue'],
$this->formats[$index]['colors'][$i]['green'],
$this->formats[$index]['colors'][$i]['red'],
round($this->formats[$index]['colors'][$i]['reserved'] / 255 * 127));
(Note that the blue and red values are indeed switched.) After changing this, it works like a charm for me.
Posted on 9th February 2009 by admin in Computers | Web Development
box, facebook, gif, ico, icon, image, jpg, png, profile
So I’ve been developing a FaceBook application, My Sites. It let’s you bookmark websites you like and share them with your friends.
The Problem
When a FaceBook application tries to add HTML to someone’s profile box, it can add images, but only in JPG, GIF, or PNG formats. For most uses this is fine, but I needed to add a favicon next to each website in a list, and ICO format isn’t allowed.
The Solution
Using a free php class that can import ICO images to a GD image resource, I converted the favicons to PNGs. Now FaceBook is all happy. Download a ZIP of the icon class here, or directly from PHPclasses.org.
[EDIT: please see my post on the important bug fix]
The Code
Here’s how you use the class:
<?php
error_reporting(0);
require("ico.class.php");
$f = "http://www.google.com/favicon.ico";
$i = new Ico($f);
if(!($r=$i->GetIcon(0))) die("Could not load ICO.");
else {
header("Content-Type: image/png");
imagepng($r);
}
?>