none
Crear nueva imagen con un tamaño diferente y guardarla en un ubicación diferente

    Pregunta

  • Guardo una imagen en mi servidor web , esa misma imagen la mando a llamar y cambio el tamaño para guardarla en otra ubicación con el siguiente código:

            Session("rutafoto") = "casa1.jpg"
    
            Dim filename As String = "~/imagenes/" + Session("rutafoto")
            ' Cree un mapa de bits del contenido del control de fileUpload en la memoria
            Dim originalBMP As Bitmap = New Bitmap(filename)
            ' Calcule las nuevas dimensiones de imagen
            Dim origWidth As Integer = originalBMP.Width
            Dim origHeight As Integer = originalBMP.Height
            Dim sngRatio As Integer = origWidth \ origHeight
            Dim newWidth As Integer = 100
            Dim newHeight As Integer = newWidth \ sngRatio
            ' Cree un nuevo mapa de bits que sostendrá el mapa de bits anterior redimensionado
            Dim newBMP As New Bitmap(originalBMP, newWidth, newHeight)
            ' Cree un gráfico basado en el nuevo mapa de bits
            Dim oGraphics As Graphics = Graphics.FromImage(newBMP)
            ' Ponga las propiedades para el nuevo archivo gráfico
            oGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
            oGraphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            ' Dibuje el nuevo gráfico basado en el mapa de bits redimensionado
            oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight)
            ' Guearde el nuevo archivo gráfico al servidor
            Dim imagePath As String = String.Format("~/imagenes/nuevas/" + Session("rutafoto"))
            newBMP.Save(Server.MapPath(imagePath), System.Drawing.Imaging.ImageFormat.Jpeg)
            ' Una vez terminado con los objetos de mapa de bits, los desasignamos.
            originalBMP.Dispose()
            newBMP.Dispose()
            oGraphics.Dispose()

    Al ejecutarlo en local me funciona bien ya que crea la nueva imagen con el mismo nombre pero diferente tamaño,  pero al pasarlo el servidor web me aparece el error:

    URI formats are not supported.

    en la línea:

    newBMP.Save(Server.MapPath(imagePath), System.Drawing.Imaging.ImageFormat.Jpeg)

    miércoles, 18 de enero de 2017 23:15

Respuestas

  • No deberías poner el Server.MapPath en esta línea:

    newBMP.Save(Server.MapPath(imagePath), System.Drawing.Imaging.ImageFormat.Jpeg)

    Esa instrucción se usa cuando tienes una ruta de archivo en disco y quieres convertirla a una URL para saber cómo se accedería desde web a ese archivo. Pero en el caso del newBMP.Save lo que quieres es salvarlo en el disco local, luego no tienes que convertir esa ruta del disco local a ruta web:

    newBMP.Save(imagePath, System.Drawing.Imaging.ImageFormat.Jpeg)

    O en otras palabras, para llamar al .Save el argumento que le tienes que pasar debe ser "C:\algo" en lugar de "http:\\algo".

    jueves, 19 de enero de 2017 7:54