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