powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Трудности с выводом разных изображений в одинаковом размере.
15 сообщений из 15, страница 1 из 1
Трудности с выводом разных изображений в одинаковом размере.
    #38836609
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Наверное многие сталкивались с подобными сложностями т.к. в интернете много касающегося данной тематики, но только всё как-то по разному(или оч. сложно, или оч. критикуют) и я не могу разобраться, поэтому прошу ваших подсказок.
Из базы беру изображения обработчиком .ashx вот так
Код: plaintext
1.
<img src="<%# ResolveUrl("~/Pages/ImageDB.ashx?id="+Eval("Код")) %>" />


Задача: в базе разные изображения , но на странице их надо выводить, то 300х200, то 500х300 и как-то чтобы они не искажались визуально(css-ом сплюснуто или растянуто получается). Может как то заготовить белые картинки нужных размеров а потом на них по центру накладывать свои изображения ? Эх если-бы мой обработчик мог отдавать нужный прямоугольник....
Код обработчика(в книге вычитал):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Routing;

namespace Gidro.Pages
{
    
    public class ImageDB : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string id = context.Request.QueryString["id"];
            if (id == null) throw new ApplicationException("Должен быть указан код");

            string strcon = WebConfigurationManager.ConnectionStrings["Gidro"].ConnectionString;
            SqlConnection con = new SqlConnection(strcon);
            string sql = "SELECT ОсновноеИзображение FROM Products WHERE Код = @Код";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.AddWithValue("@Код", id);
            try
            {
                con.Open();
                SqlDataReader r = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
                if (r.Read())
                {
                    int bufferSize = 100;
                    byte[] bytes = new byte[bufferSize];
                    long bytesRead;
                    long readFrom = 0;
                    do
                    {
                        bytesRead = r.GetBytes(0, readFrom, bytes, 0, bufferSize);
                        context.Response.BinaryWrite(bytes);
                        context.Response.ContentType = "image/png";
                        readFrom += bufferSize;

                    } while (bytesRead == bufferSize);
                }
                r.Close();
            }
            finally
            {
                con.Close();
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38836649
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUser,

держи!

http://imageprocessor.org/

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

попробуй разобраться самостоятельно, там примеры осилит ребёнок.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837023
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! классная штука! Установил проверил что к картинкам которые лежат в проекте все срабатывает, т.е. ImageProcessor.Web установлен и работает! А вот к моему обработчику не понимаю как применить.
http://localhost:27514/img/catalog/1.png?width=600&height=250 вот так работает!
как к такой ссылке http://localhost:27514/Pages/ImageDB.ashx?id=494 применить ?
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837156
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUser,

Смотри http://imageprocessor.org/imageprocessor-web/#extending

следующий раздел:

IImageService

The IImageService defines methods and properties which allow developers to extend ImageProcessor to retrieve images from alternate locations to process. View the source code to see examples.


позволяет расширить веб-процессор для того, чтобы забирать картинки из базы данных. кстати, очень удобно, так как либо делает большую часть работы по кешированию.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837292
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините конечно что дальше выношу вам мозг, но чайник видать я полный. Понимаю что надо реализовать интерфейс IImageService чтобы как-то воспользоваться/реализовать метод Task<byte[]> GetImage(object id); но не понимаю как правильно или где правильно его реализовать , то-ли в своем обработчике public class ImageDB : IHttpHandler, IImageService , то-ли мне отдельный класс надо делать , могу конечно получить byte[]-картинки с базы данных, но не понимаю как я потом должен запрашивать <img src="" /> что-бы получить картинку с нужными width=600&height=250 ? Может вам не трудно подсказать как будет примерно выглядеть <img src="" /> и я пойму как надо реализовывать ? или может просто на словах теорию подскажите ?
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837324
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUser,

Вот живой пример

https://github.com/JimBobSquarePants/ImageProcessor/blob/master/src/TestWebsites/MVC/TestImageService.cs

Скачай весь проект (TestWebsites/MVC), и посмотри как там устроено, если что-то будет непонятно, спрашивай.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837326
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джим Боб Квадратные Штаны плохого не посоветует ))
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837608
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбирался долго, но так и не понял как из БД указать картинку <img src="??" /> что бы пользоваться удобствами ImageProcessor ...
хоть бери да перегоняй все изображения в каталог проекта....
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837619
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUser,

ну как же, по ссыльке

https://github.com/JimBobSquarePants/ImageProcessor/blob/master/src/TestWebsites/MVC/TestImageService.cs

реализация хендлера для картинок

вот в этом кусочке

Код: c#
1.
2.
3.
4.
 /// <summary>
/// The prefix for the given implementation.
/// </summary>
private string prefix = "testprovider.axd";



задаётся имя хендлера, можешь поменять на что-нибудь своё, даже хоть на ImageDB.ashx

фунцию GetImage(object id) пишешь свою, ну там достаёшь из базы изображение и возвращаешь в виде массива байт.

ну и всё. не забудь в веб конфиге подключить модуль, изображения получай так:

http://localhost:27514/ testprovider.axd ? id=1 &width=600&height=250

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

проще ну прям некуда.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837621
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttпроще ну прям некуда. Спасибо это блин я просто чайник полный. У меня опять есть надежда . А для WebForms тоже все должно получиться ?
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837623
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может кому нада, матрица для правильного оверлея, ибо который в библиотеке -- кривой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
            float[][] colorMatrixElements =
            {
                new[] { 1.0f, 0.0f, 0.0f,    0.0f, 0.0f },
                new[] { 0.0f, 1.0f, 0.0f,    0.0f, 0.0f },
                new[] { 0.0f, 0.0f, 1.0f,    0.0f, 0.0f },
                new[] { 0, 0, 0,    opacity, 0 },
                new[] { 0.0f, 0.0f, 0.0f,    0.0f, 1.0f }
            };



opacity -- ето прозрачность. типерь можно накладывать полупрозрачные PNG и получать на выходе качественное изображение
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837624
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUserhVosttпроще ну прям некуда. Спасибо это блин я просто чайник полный. У меня опять есть надежда . А для WebForms тоже все должно получиться ?

да, без проблем.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837700
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspUserМожет как то заготовить белые картинки нужных размеров а потом на них по центру накладывать свои изображения ?

А какой практический смысл в заготовленных белых картинках? Можно на html-странице сделать обычный div с белым фоном и в него ложить рисунок, вписаный в те самые 300х200, при запросе ресайзя единожды на сервере оригинал каким-нить GetThumbnailImage() и пихая полученый thumb в вечный кэш.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38837709
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s. imageprocessor избавляет от кучи своей писанины кода по всем этим вписываниям, паддингам, кропам, растяжениям и прочих вариантах к примеру при том же ресайзе, что весьма экономит время.
...
Рейтинг: 0 / 0
Трудности с выводом разных изображений в одинаковом размере.
    #38838529
AspUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Застрял на шаг дальше. Реализовал метод, по url попадаю, отладчиком видно что возвращается(return buffer;) правильное количество байтов(так же как и ImageDB.ashx),но картинка не выводится и только в кеше(\app_data\cache\5\3\b\a\e\1) кусок какого-то рваного jpeg появляется(маленький размер и не открывается). Теперь гадаю то-ли метод GetImage неправильно реализован, то-ли где-то в настройках ImageProcessor что-то надо?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        private string prefix = "testprovider.axd";
        public async Task<byte[]> GetImage(object id)
        {
            byte[] buffer = new byte[4096];
            if (id == null) throw new ApplicationException("Должен быть указан код");
            id = 494;//для теста указываю фиксировано, точно есть в базе
            string strcon = WebConfigurationManager.ConnectionStrings["Gidro"].ConnectionString;
            SqlConnection con = new SqlConnection(strcon);
            string sql = "SELECT ОсновноеИзображение FROM Products WHERE Код = @Код";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.AddWithValue("@Код", id);
            con.Open();
            using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
            {
                if (await reader.ReadAsync())
                {
                    buffer = (byte[])reader["ОсновноеИзображение"];
                }
            }

            return buffer;
        }
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Трудности с выводом разных изображений в одинаковом размере.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]