Sono alcune domande diverse. Alcune hanno risposta lato server, per altre devi farlo lato client.
In effetti, non puoi fare nulla con un'immagine lato server finche` non hai l'immagine.
Per il controllo dell'estensione del file, il problema e` di semplice soluzione: devi fare una valutazione della stringa prima dell'upload.
Per il controllo del tipo di file (quindi il tipo vero, che non venga imbrogliato se l'utente cambia estensione), invece il problema e` piu` complesso, e la soluzione dipende dal tipo di file.
Dato che i file grafici hanno qualche byte in cui ci sono metainformazioni all'inizio del file, puoi iniziare l'upload, testare quei byte, ed eventualmetne interrompere (abortire) il processo. Non ti so dare info piu` dettagliate su come sono fatti i file, ma credo che le puoi trovare nei siti di grafica (o chiedere nel forum di grafica). Ricordo solo che i bmp hanno due word all'inizio che dicono le dimensioni in px in orizz e verticale.
Invece per la stampa, devi chiarire cosa vuoi fare.
Hai un'immagine sul computer del client e la vuoi stampare dallo stesso computer?
Si puo` fare senza scomodare i CGI, ma se proprio vuoi gestire la cosa dall'interfaccia utente (browser) senza dover cambiare programma, qualcosa si puo` fare in JS, ma non per tutti i browser. Ma questo e` meglio che lo chiedi nel forum JS.