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

#asp.net #image #handler #image-resizing

#asp.net #изображение #обработчик #изменение размера изображения

Вопрос:

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

Комментарии:

1. Я написал imageresizing.net для решения всех проблем и подтем, которые Widor поднимает в ответе ниже. Вы должны взглянуть — это стало стандартом де-факто. Если вы делаете свое собственное, вам действительно следует прочитать этот список ошибок, которых следует избегать

Ответ №1:

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

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

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

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

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

РЕДАКТИРОВАТЬ: Что касается сохранения изображений, я могу сделать это нормально в моем, если я принудительно использую расширение .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. Это именно то, о чем я говорю, сэр! Я просто хочу загрузить одно изображение, а затем изменить его размер до разных размеров, но когда я захочу щелкнуть правой кнопкой мыши и сохранить его. можете ли вы помочь мне с образцом, если он у вас есть, если вы только не возражаете .. я совсем новичок в этом. огромное спасибо!

2. Мы создали оконный сервис с file watcher для создания копий изображений с измененным размером по мере их загрузки пользователем. Вы получаете изображения разных размеров, но без загрузки обработчика. Подходы, конечно, зависят от того, насколько хорошо вы контролируете свою живую среду

3. Братан, мне нужна помощь.. Скажите мне, что я должен делать на этом перекрестке? ether использует обработчик и изменяет размер 1 изображения, используя их, или использует изменение размера изображений, что, я думаю, потребует много работы в конце дня, но я готов к этому, если это будет полезно в конце дня.!

4. честно говоря — сервис не так уж сложен в использовании. Это заняло у нас, возможно, полдня. Большим предостережением было бы — можете ли вы установить это на свой текущий сервер. У вас есть такой контроль. Что касается меня — я бы и написал сервис. Это эффективнее, чем делать это на лету, и, ИМХО, не сложнее. Помогает ли это?

Ответ №2:

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

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

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

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

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

Комментарии:

1. Похоже, вам следует взглянуть на imageresizing.net Кэширование диска устраняет накладные расходы, хотя само изменение размера изображения в любом случае высоко оптимизировано.