ti spiego come faccio io, per ottenere le immagini di sotto; vedi se ti può servire.
tipo_2
tipo_3

tipo_3, immagine fusa su un'altra

per prima cosa mi scarico le due dll all'indirizzo:
http://web.tiscali.it/archivio_esempi/zip/gdi.zip
e le copio nella directory "bin" del sito web
dopo di che ho la pagina a.asp
codice:
<% option explicit %>
<% Response.CharSet = "utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
[img]a.aspx?p_img=http://static.panoramio.com/photos/original/216697.jpg&p_width=400&p_opzione=3[/img]
</body>
</html>
L'elemento <img, ha come sorgente, una pagina aspx, a.aspx.
Manda tre parametri:
p_img -> nome immagine, che può essere o un percorso fisico (c:\immagini\img.jpg), o un percorso logico (../img.png), o un indirizzo remoto (http://www/xxx/img.tif)
p_width -> è la dimensione max dell'immagine che voglio ottenere
p_opzione -> valori 1, 2, 3, l'ho messo per fare vedere come funziona
pagina a.aspx
codice:
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="j=gdi.img" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
'---------------------------------------------------------------------------
'si debbono ricevere i seguenti parametri get
' p_img : percorso dell'immagine, fisico, logico, remoto
' p_width : dimensione max immagine
' p_opzione : 1=ridimensiono, 2 adatto, 3 fondo
'---------------------------------------------------------------------------
Dim p_img As String = Request.QueryString("p_img")
Dim p_width As String = Request.QueryString("p_width")
Dim p_opzione As String = Request.QueryString("p_opzione")
'messaggio in caso di errore
Dim result As String = ""
Dim bmp As Bitmap = Nothing
Try
'leggo i parametri p_img e p_width
p_img = Request.QueryString("p_img")
p_width = Request.QueryString("p_width")
'controllo che vengano ricevuti e che siano del tipo giusto
If String.IsNullOrEmpty(p_img) Then result &= "p_img non valorizzato" & vbNewLine
If String.IsNullOrEmpty(p_width) OrElse Integer.TryParse(p_width, Nothing) = False Then result &= "p_width non valorizzato o non numerico" & vbNewLine
If String.IsNullOrEmpty(p_opzione) Then p_opzione = "1"
'se il messaggio è valorizzato visualizzo il messaggio di errore
If result.Length > 0 Then Throw New Exception(result)
'leggo l'immagine
bmp = j.ImgLoad(p_img)
Select Case p_opzione
Case "1" 'ridimensiono senza adattarla al contenitore
j.ImgResize(bmp, CInt(p_width))
Case "2" 'adatto l'immagine ad un contenitore nero di date dimensioni
j.ImgFit(bmp, 400, 400, Color.Black)
Case "3" 'fondo l'immagine nel contenitore (che può essere un'altra immagine) centrandola
'ridimensiono l'immagine
j.ImgResize(bmp, CInt(p_width))
'creo una immagine di sottofondo oppure apro una immagine che faccia da sottofondo
Dim sfondo As Bitmap = j.ImgCreateBitmap(450, 450, Color.Black)
'fondo l'immagine nello sfondo
j.ImgMerge(sfondo, bmp)
'ricopio l'immagine finale, in bmp, che è quella che voglio
bmp.Dispose()
bmp = sfondo
End Select
'salvo l'immagine nel flusso di uscita, formato jpg, compressione predefinita
j.ImgSaveToResponseOutputStream(bmp)
Catch ex As Exception
Try
Using bmp1 As Bitmap = j.ImgFromText(ex.Message, Color.White, Brushes.Black, New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point))
j.ImgSaveToResponseOutputStream(bmp1)
End Using
Catch
End Try
Finally
If bmp IsNot Nothing Then bmp.Dispose()
End Try
End Sub
</script>