J'ai trouvé des questions similaires sur SO et ailleurs, mais rien qui ne corresponde exactement à ce que je recherche (ou peut-être suis-je trop bête pour relier les points entre eux !)
Je cherche à retourner une image miniature à partir d'une image pleine taille stockée en tant que varbinary(max) dans la base de données. Je vais utiliser les vignettes dans une vue de type galerie, donc la petite taille et le chargement efficace sont cruciaux. J'ai utilisé un .ashx pour retourner l'image en taille réelle dans un contrôle asp.net Image, avec le code suivant :
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim conn As New SqlConnection()
conn.ConnectionString = *connectionstring*
Dim cmd As New SqlCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "GetEmplHeadShot"
Dim emplID As New SqlParameter("@emplID", context.Request.QueryString("emplid"))
cmd.Parameters.Add(emplID)
conn.Open()
Dim myReader As SqlDataReader = cmd.ExecuteReader
If myReader.Read Then
context.Response.BinaryWrite(myReader("HeadShot"))
context.Response.ContentType = "image/jpeg"
End If
myReader.Close()
conn.Close()
End Sub
Je me rends compte qu'il est probablement préférable de traiter le redimensionnement lors du téléchargement, et de stocker l'image plus petite dans une colonne distincte. Mais en attendant, est-il possible de programmer le gestionnaire pour qu'il redimensionne l'image à la volée ? L'idéal serait de pouvoir passer un paramètre de chaîne de requête supplémentaire, quelque chose comme isResized à partir de la liaison de l'image, ce qui permettrait d'utiliser le même gestionnaire pour les images de taille normale et les images redimensionnées.
Tout conseil ou assistance serait grandement apprécié. Des idées sur des approches alternatives (c'est-à-dire "vous vous y prenez mal") seraient également les bienvenues.