Buenas,
Tu mismo lo dices, hay un choque con el header. Eso sucede porque estas enviando primero los datos y luego el header o cabecera.
Por tanto, antes de enviar cualquier cosa, debes de colocar primero el header
header('Content-Type: image/png');
y luego todo lo demás.
Saludos,