ASP.NET и .NET Framework делают задачу создания изображений на лету очень простой. В классическом ASP разработчики были вынуждены использовать сторонние компоненты, такие как ASPImage и ASPPicture, для динамической обработки изображений. К счастью, с ASP.NET эти дни прошли. Различные возможности манипулирования изображениями теперь встроены непосредственно в классы .NET Framework.
.NET Framework предлагает несколько классов для генерации и обработки изображений. Разработчики ASP.NET могут использовать эти классы для рисования различных фигур, создания текста и создания изображений во многих различных форматах, включая GIF, JPEG, PNG и т. Д.
Теперь о неизбежном вопросе: зачем вам на лету создавать изображения для ваших веб-страниц ASP.NET? Вот несколько практических применений динамической генерации изображений:
- Создать галерею миниатюр из ваших полноразмерных изображений галереи.
- Создавайте динамические диаграммы на основе динамического пользовательского ввода или данных базы данных.
- Создавайте изображения со случайным текстом (кодом доступа) для использования со страницами регистрации пользователей, чтобы предотвратить автоматическую регистрацию.
Создать текстовое изображение на лету
Давайте используем два класса .NET, расположенных в пространстве имен System.Drawing, чтобы проиллюстрировать, как создавать изображения на лету с ASP.NET. Двумя базовыми классами являются System.Drawing.Bitmap и System.Drawing.Graphics.
Чтобы продемонстрировать простое динамическое создание изображений ASP.NET, мы создадим веб-страницу ASP.NET с двумя раскрывающимися списками, одним текстовым полем и кнопкой. Первый выпадающий список позволяет нам выбрать цвет фона нашего изображения, а второй позволяет нам выбрать шрифт. Текстовое поле получит текст, который будет отображаться на изображении, а кнопка сгенерирует изображение. Вот код, который отображает эти элементы формы:
<form runat="server"> <asp:TextBox runat="server" id="Text" /> <br><br> <asp:dropdownlist runat="server" id="BackgroundColor"> <asp:ListItem Value="red">Red</asp:ListItem> <asp:ListItem Value="green">Green</asp:ListItem> <asp:ListItem Value="navy">Navy</asp:ListItem> <asp:ListItem Value="orange">Orange</asp:ListItem> </asp:dropdownlist> <asp:dropdownlist runat="server" id="Font"> <asp:ListItem Value="Arial">Arial</asp:ListItem> <asp:ListItem Value="Verdana">Verdana</asp:ListItem> <asp:ListItem Value="Courier">Courier</asp:ListItem> <asp:ListItem Value="Times New Roman">Times New Roman</asp:ListItem> </asp:dropdownlist> <br><br> <asp:Button runat="Server" id="SubmitButton" Text="Generate Image" /> </form>
Каждый раз, когда вы запрашиваете страницу ASP.NET, на сервере запускается событие Page_Load
и вызывается подпрограмма Page_Load
. В рамках этой подпрограммы вы можете проверить, был ли запрос на страницу сгенерирован посредством обратной передачи данных (например, пользователь нажал на кнопку отправки), пришел ли пользователь на эту страницу с другой страницы, или был ли Пользователь просто набрал URL страницы в адресной строке браузера.
В этом примере важно знать, была ли страница опубликована обратно или нет, потому что мы хотим генерировать динамическое изображение только тогда, когда пользователь нажимает кнопку отправки, а не когда он впервые загружает страницу. Свойство Page.IsPostBack
имеет значение true
если страница APS.NET загружена в ответ на обратную передачу клиента; в противном случае это false
. Поэтому первое, что мы делаем в подпрограмме Page_Load, это проверяем значение Page.IsPostBack
:
If Page.IsPostBack Then
Если значение равно false
, мы ничего не делаем, и на странице просто отображаются элементы управления ASP.NET, которые мы объявили выше. Если значение true
, мы должны сгенерировать изображение. Вот как это делается.
Первым шагом в создании нашего динамически генерируемого изображения является создание нового объекта Bitmap
и указание ширины и высоты генерируемого изображения:
Dim oBitmap As Bitmap = New Bitmap(468, 60)
Следующим шагом является создание нового объекта Graphics
, который позволит нам рисовать на нашем растровом изображении:
Dim oGraphic As Graphics = Graphics.FromImage(oBitmap)
Затем мы объявляем структуру типа System.Drawing.Color
(представляет цвет RGB), которая будет определять цвет фона нашего динамического изображения:
Dim oColor As System.Drawing.Color
Теперь нам нужно получить значения, которые были отправлены обратно на страницу, из двух выпадающих окон и текстового поля:
Dim sColor As String = Request("BackgroundColor") Dim sText As String = Request("Text") Dim sFont As String = Request("Font")
Мы запускаем оператор Select Case, чтобы установить значение oColor
(цвет фона нашего изображения), в зависимости от значения sColor
:
Select Case sColor Case "red" oColor = Color.Red Case "green" oColor = Color.Green Case "navy" oColor = Color.Navy Case "orange" oColor = Color.Orange Case Else oColor = Color.Gray End Select
Далее мы создаем две кисти, которые помогут нам нарисовать наше изображение. Первый, oBrush
, будет использован для рисования фона изображения: