$ img в вашем примере это не дескриптор файла, это дескриптор ресурса изображения GD в памяти.
Вы можете использовать imagecreatefromstring для загрузки изображения следующим образом:
$file=fopen($fileName,"r+b");
flock($file,LOCK_EX);
$imageBinary=stream_get_contents($file);
$img=imagecreatefromstring($imageBinary);
unset($imageBinary); // we don't need this anymore - it saves a lot of memory
Если вы хотите сохранить измененную версию изображения в открытом потоке, вы должны использовать выходную буферизацию :
ob_start();
imagepng($img);
$imageBinary=ob_get_clean();
ftruncate($file,0);
fseek($file,0);
fwrite($file,$imageBinary);
unset($imageBinary);
flock($file,LOCK_UN);
fclose($file);