Целесообразно ли использовать обработчик для отображения изображений? проблема в том, что я не могу щелкнуть правой кнопкой мыши и сохранить эти изображения. Он показывает имя обработчика и универсальный обработчик Asp.net в качестве типа сохранения, поэтому я не могу сохранить изображение, но изображение с графическим интерфейсом потрясающее по качеству. Я показываю одно изображение разных размеров. используя 2 обработчика, и код работает нормально, но если я не использую обработчик, мне нужно изменить их размер по отдельности, а затем сохранить в разных папках.
Целесообразно ли использовать .ashx при отображении изображений?
Ответы (2)
Я успешно использовал этот метод на сайтах раньше, но он полезен только в том случае, если подходит ваш конкретный случай. Если вы можете сделать это с помощью 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
Я бы не рекомендовал использовать общие обработчики для отображения изображений.
Раньше я использовал этот подход, но если изображение не меняется довольно часто, я думаю, что это пустая трата ресурсов.
Каждый раз, когда пользователь переходит на страницу, содержащую ваше изображение в элементе управления img
, браузеру приходится делать HTTP-запрос к этому файлу, запускать код и возвращать потоковое изображение.
Например, если вы делаете это только для миниатюр изображений, я бы рекомендовал сохранять физические версии миниатюры всякий раз, когда изображение загружается в приложение.
Еще одним преимуществом этого является то, что изображения не так сильно ошибаются, как код!