In a new post to his blog Philip Norton shows how to desturate images with PHP using the already built-in GD libraries and the imagecopymergegray function.
To desaturate an image means to remove all non-greyscale colours from it, essentially creating a black and white version. To do this you can use the function imagecopymergegray(), which is part of the GD image library. This function is a little difficult to figure out, but what is does is sample one image into another and optionally changing the amount of colours that are kept during the sampling process. The function can be made to sample just a section of the image, or the whole thing.
He also offers an alternative method that uses imagefilter instead, passing it the IMG_FILTER_GRAYSCALE flag. Included is a full block of code for a method he recently included in a WordPress site to dynamically create thumbnails.