Целесообразно ли использовать .ashx при отображении изображений? - PullRequest
2 голосов
/ 11 ноября 2011

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

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

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

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

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

  • Значок
  • Обрезанное изображение
  • Эффект «Отражение» (как будто он был над блестящей поверхностью)
  • Различные галереи

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

РЕДАКТИРОВАТЬ: Что касается сохранения изображений, я могу сделать это нормально в моем, если я заставлю расширение .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
1 голос
/ 11 ноября 2011

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

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

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

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

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

...