Как получить лучшее качество растрового изображения с измененным размером? - PullRequest
0 голосов
/ 04 февраля 2020

Доброе утро, я разрабатываю cms, и мои клиенты наверняка загрузят изображение, не обращая внимания на размеры, поэтому я хотел бы разработать способ изменения размера изображения для оптимизации страниц. Я работаю с VB, это первый раз, когда я использую растровое изображение, и я совсем не уверен, что выбрал лучшее решение, которое мне нужно. Я понял, что для изменения размера изображения, которое у меня было до того, как преобразовать его в растровое изображение, я могу изменить его с помощью параметра widht, height и в конце, чтобы показать в моем теге 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">
...