molto banale
DD
devi leggere 3 byte per volta...e poi stampare il punto ^^
magari i primi due byte indicano l'altezza e la larghezza della matrice
[ovviamente al max cosi vengono 255 pixel x 255 pixel, ma con facilità si può cambiare questo...)
codice:
<?php
$file = fopen('img.img');
// Leggo larghezza ed altezza
$w = ord(fread($file, 1));
$h = ord(fread($file, 1));
// Inizializzo le coordinate X e Y dei punti
$x = 0; $y = 0;
// Creo un immagine truecolor dato che uso un format a 24 bit (ovvero 3 byte(
$image = imagecreatetruecolor($w, $h);
// Entro in un while e leggo a blocchi di 3 byte il file
while(feof($file)) {
// Leggo 3 byte
$cPixel = fread($file, 3);
// Imposto il colore partendo dai miei 3 byte
$gdColor = imagecolorallocate($image, ord($cPixel{0}), ord($cPixel{1}), ord($cPixel{2}));
// Imposto il pixel
imagesetpixel($x, $y, $gdColor);
// Mi sposto avanti di un punto nella riga
$x++;
// Se ho superato la larghezza, vado a capo
if ($x > $w) { $x = 1; $y++; }
}
// Chiudo il file
fclose($file);
// Stampo a video l'immagine
imagejpeg($image);
?>
il codice non l'ho provato, ma a livello logico è corretto, se ti da errori prova a risolverli ed in caso posta qui 
può essere fatto in TANTI altri modi cmq