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