Pues .. la diferncia entre crear una imagen (con las funciones de la libreria GD) "al vuelo" y al "disco" es el 2º o 3er parámetro de cada función de la familia imagecreate(), imageJPG() .. imagePNG() .. etc ...
A todo esto NO se usan las cabeceras HTTP que indican al "navegador" que el dato que genera tu rutina y esas funciones entregan al buffer de salida de PHP són del tal tipo .. Es decir .. no se usan los header("content-type" ..) y otros header() para ese propósito que puedas tener.
Y si dices que guardas en tu BD esa imagen en formato binario (no referencia > link) ... aplica tu proceso como ya lo haces para la versión "al vuelo" .. pero como ya comenté no uses los header() (quitalos) ..
No recuerdo si con la típica variable $im ($im=create_image(......) que se usa para todo imagecreate() .. o imageJPG() etc...) será suficiente para guardarlo en tu BD .. pero si eso no resultase, gestionando el buffer de salida de PHP también se podría hacer..
Código PHP:
<?
ob_start();
// tu actual rutina ... sin el header() ...
$imagen=ob_get_contents();
ob_end_clean();
// $imagen ya lo puedes ingresar a tu BD (INSERT/UPDATE en el campo que corresponda ..)
// No sé si hará falta aplicar algún addslashes() .. pruebalo.
?>
Pero, recuerda que si lo que necesitas es guardar esa imagen procesada desde PHP al "disco" .. usa el 2º o 3er parámetro de esas funciones que ya lo hacen directamente.
Un saludo,