如何从位图调整大小的图像中获得更好的质量?

时间:2020-02-04 12:31:41

标签: vb.net image bitmap resize

早安, 我正在开发一个cms,我的客户要上传肯定的图像,而又不遵守尺寸提示,因此我想开发一种调整图像大小的方法来优化页面。 我正在使用VB进行开发,这是我第一次使用位图,而且我不确定我是否已选择所需的最佳解决方案。 我已经了解到要调整图像大小,然后将其转换为位图,然后可以使用自己的宽度,高度参数进行调整,最后在html标签img中显示以将其转换为64位字符串。 这是对我最好的解决方案吗? 关键是我的图片质量下降了,如果我将调整过的尺寸与具有相同尺寸的CSS的“调整过的尺寸”图像进行比较,那是完全不同的。 我希望保持相同的质量,谢谢。

这是我的resize.aspx页面

<%@ Page Language="VB" Trace="false" Debug="true" aspcompat=true%>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Runtime.InteropServices" %>

<script runat="server">
    Private Function CopyTo32BitArgb(image As System.Drawing.Image) As Bitmap
        Dim imageCopy = New Bitmap(img, CInt(newWidth), CInt(maxHeight))
        imageCopy.SetResolution(300, 300)
        'if you want save and check Dpi imageCopy.Save("C:\inetpub\wwwroot\images\barber\prueba.jpg", ImageFormat.Jpeg)
        For Each propItem As PropertyItem In image.PropertyItems
            imageCopy.SetPropertyItem(propItem)
        Next
        Using g As Graphics = Graphics.FromImage(imageCopy)
            g.InterpolationMode = InterpolationMode.HighQualityBicubic
            g.DrawImage(image, New Rectangle(0, 0, 426, 284), New Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel)
            g.Flush()
        End Using
        Return imageCopy
    End Function
</script>

<%Dim original As System.Drawing.Image = System.Drawing.Image.FromFile("C:\inetpub\wwwroot\images\barber\1.jpeg", true)
Dim resized As System.Drawing.Image = CopyTo32BitArgb(original)
Dim memStream As MemoryStream = New MemoryStream()
resized.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim imgBytes as byte() = memStream.ToArray()
Dim imgString as string= Convert.ToBase64String(imgBytes)%>

<img style="display:block;" src="data:image/png;base64,<%=imgString%>"/>
<img style="height: 284px;" src="\images\barber\1.jpeg">

0 个答案:

没有答案