Мобильное веб-приложение - обработка файлов изображений различных размеров - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть вопрос о том, как мне обрабатывать файлы изображений различных размеров (<1 МБ до 15 МБ) в мобильном приложении, которое я разрабатываю? В настоящее время я отображаю изображение в полном размере, используя ASHX-файл внутри ASP Win Form, используя ASP Image Class. </p>

Так что, в основном, я хотел бы знать, как мне поступить с этими порой совершенно разными размерами изображений.

Заранее спасибо!

Обновление

Хорошо, после очень полезных комментариев вчера я провел дополнительное исследование и думаю, что, возможно, разработал план действий, но я все еще не на 100%. Будет ли копирование изображения, которое будет отображаться, а затем масштабирование его на сервере до любых размеров, которые я выберу, а затем отображение его в браузере, лучшим способом «обработки» изображений, особенно в мобильном браузере?

Спасибо всем заранее за ваши КОНСТРУКТИВНЫЕ ответы!

1 Ответ

0 голосов
/ 30 декабря 2011

Хорошо, я нашел возможное решение здесь

Вот код моего файла ASHX:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Web

Namespace WebApplication2
    ''' <summary>
    ''' Summary description for ImageDisplay
    ''' </summary>
    Public Class ImageDisplay
        Implements IHttpHandler

        Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest

            context.Response.ContentType = "image/jpeg"

            Dim bmp As New Bitmap(HttpContext.Current.Server.MapPath("~/Images/DSC_0165.jpg"))

            Dim i As Image = FixedSize(bmp, 300, 300)
            i.Save(HttpContext.Current.Server.MapPath("~/Images/DSC_0165-r.jpg"), ImageFormat.Jpeg)
            i.Dispose()

            context.Response.WriteFile("~/Images/DSC_0165-r.jpg")
        End Sub

        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property

        Private Shared Function FixedSize(imgPhoto As Image, Width As Integer, Height As Integer) As Image
            Dim sourceWidth As Integer = imgPhoto.Width
            Dim sourceHeight As Integer = imgPhoto.Height
            Dim sourceX As Integer = 0
            Dim sourceY As Integer = 0
            Dim destX As Integer = 0
            Dim destY As Integer = 0

            Dim nPercent As Single = 0
            Dim nPercentW As Single = 0
            Dim nPercentH As Single = 0

            nPercentW = (CSng(Width) / CSng(sourceWidth))
            nPercentH = (CSng(Height) / CSng(sourceHeight))
            If nPercentH < nPercentW Then
                nPercent = nPercentH
                destX = System.Convert.ToInt16((Width - (sourceWidth * nPercent)) / 2)
            Else
                nPercent = nPercentW
                destY = System.Convert.ToInt16((Height - (sourceHeight * nPercent)) / 2)
            End If

            Dim destWidth As Integer = CInt(Math.Truncate(sourceWidth * nPercent))
            Dim destHeight As Integer = CInt(Math.Truncate(sourceHeight * nPercent))

            Dim bmPhoto As New Bitmap(Width, Height, PixelFormat.Format24bppRgb)
            bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution)

            Dim grPhoto As Graphics = Graphics.FromImage(bmPhoto)
            grPhoto.Clear(Color.White)
            grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic

            grPhoto.DrawImage(imgPhoto, New Rectangle(destX, destY, destWidth, destHeight), New Rectangle(sourceX, sourceY, sourceWidth, sourceHeight), GraphicsUnit.Pixel)

            grPhoto.Dispose()
            Return bmPhoto
        End Function

    End Class
End Namespace

и код в моей форме Default.aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
    </p>


    <asp:Image ID="MainImage" runat="server" ImageUrl="~/ImageDisplay.ashx" />


    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

и вот как отображается изображение размером 9 МБ (2848x4288):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...