Ранее я успешно использовал этот метод на сайтах, но он полезен только в том случае, если подходит ваш конкретный случай. Если вы можете сделать это, используя 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