Целесообразно ли его использовать.ashx при отображении изображений?


Целесообразно ли использовать обработчик для отображения изображений ? проблема в том, что я не могу щелкнуть правой кнопкой мыши и сохранить эти изображения. Asp.net универсальный обработчик как тип сохранения, поэтому я не могу сохранить изображение, но изображение GUI потрясающее по качеству.Я показываю одно изображение в разных размерах, используя 2 обработчика, и код работает нормально, но если потом, если я не использую обработчик, я должен изменить их размер по отдельности, а затем сохранить их в разных папках.

2 2

2 ответа:

Я успешно использовал этот метод на сайтах и раньше, но он полезен только в том случае, если подходит ваш конкретный случай. Если вы можете сделать это с помощью HTML и ваши изображения имеют правильный размер на сервере, то это, вероятно, излишне.

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

В моем сценарии, используя a .обработчик ashx позволил мне загрузить только одно большое изображение hi-res на объект, а затем преобразовать его для использования в несколько различных способов:

  • миниатюра
  • обрезанное изображение
  • эффекты "отражения" (как будто это было над блестящей поверхностью)
  • различные галереи

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

Редактировать: Что касается сохранения изображений, я могу сделать это прекрасно в моем, пока я заставляю .расширение ashx, которое браузер пытается дать ему, чтобы быть JPEG (или что-то еще).

Я не могу дать вам полную работу .пример ashx, и есть так много подтем, которые вам нужно рассмотреть:

  • безопасность-только чтение из определенных мест
  • форматы-собираетесь ли вы выводить все изображения, скажем, в формате JPEG, независимо от исходного формата?
  • HttpHandlers - как создавать и использовать их (не только для изображений)
  • графические манипуляции-познакомьтесь с объектом Graphics в .NET
  • потоки памяти

В качестве небольшого примера (в VB.NET), вот простой способ изменить размер изображения с учетом новой ширины и высоты:

Imports System
Imports System.Web
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports CustomImaging
Imports System.Collections.Generic

Public Class ImgHandler : Implements IHttpHandler


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

    'Process the image and output it as a stream from memory

  End Sub

  Public Shared Function ResizeImage(ByVal image As System.Drawing.Image, ByVal width As Integer, ByVal height As Integer) As System.Drawing.Bitmap
        'a holder for the result
        Dim result As New Bitmap(width, height)
        'use a graphics object to draw the resized image into the bitmap
        Dim g As Graphics = Graphics.FromImage(result)
        Try
            'set the resize quality modes to high quality
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
            'draw the image into the target bitmap
            g.DrawImage(image, 0, 0, result.Width, result.Height)
        Catch ex As Exception

        Finally 'clean up resources
            If Not g Is Nothing Then g.Dispose()

        End Try
        'return the resulting image
        Return result
   End Function

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

End Class

Я бы не рекомендовал использовать универсальные обработчики для отображения изображений.

Я использовал этот подход, но если изображение не меняется достаточно часто, я думаю, что это пустая трата ресурсов.

Каждый раз, когда пользователь переходит на страницу, содержащую ваше изображение в элементе управления img, браузер должен сделать запрос HTTP к этому файлу, запустить код и вернуть потоковое изображение.

Если вы делаете это только для миниатюр изображений, например, я бы рекомендовал сохранить физические версии эскиза изображения всякий раз, когда изображение загружается по всему приложению.

Еще одно преимущество этого заключается в том, что изображения не так сильно ошибаются, как код!