Закомментировать код в .aspx

<%-- код --%>

Полезно :)

Обрезаем изображение (crop) в ASP.NET+JavaScript

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

Берем библиотеку «JavaScript Image Cropper UI», которая тянет с собой еще две. В общей сложности в не запакованном виде оно обьемом 258Kb. Я думаю, что возможно сократить раза в три-четыре.
Подключаем к своей странице

<script src="/javascripts/prototype.js" type="text/javascript"></script>

    <script src="/javascripts/scriptaculous.js" type="text/javascript"></script>

    <script src="/javascripts/cropper.js" type="text/javascript"></script>

    <link rel="stylesheet" type="text/css" href="/cropper.css" media="all" />

    <script type="text/javascript" charset="utf-8">
        
        // setup the callback function
        function onEndCrop( coords, dimensions ) {
       
            $( 'hfX1' ).value = coords.x1;
            $( 'hfY1' ).value = coords.y1;
            $( 'hfX2' ).value = coords.x2;
            $( 'hfY2' ).value = coords.y2;
            $( 'hfW' ).value = dimensions.width;
            $( 'hfH' ).value = dimensions.height;
        }
       
        // basic example
        Event.observe(
            window,
            'load',
            function() {
                new Cropper.Img(
                    'imgPhoto',
                    {
                        minWidth: 70,
                        minHeight: 50,
                        displayOnInit: true,
                        onEndCrop: onEndCrop
                    }
                )
            }
        );        
       
    </script>

На самой странице размещаем нужную нам фотографию и несколько TextBox чтоб визуально видеть координаты.

        <p>
            <img src="dyavolenok.jpg" id="imgPhoto" alt="" runat="server" />
        </p>
        <p>
            x1:
            <asp:TextBox ID="hfX1" runat="server" Text="0" />
        </p>
        <p>
            x2:
            <asp:TextBox ID="hfX2" runat="server" Text="600" />
        </p>
        <p>
            y1:
            <asp:TextBox ID="hfY1" runat="server" Text="0" />
        </p>
        <p>
            y2:
            <asp:TextBox ID="hfY2" runat="server" Text="450" />
        </p>
        <p>
            w:
            <asp:TextBox ID="hfW" runat="server" Text="600" />
        </p>
        <p>
            h:
            <asp:TextBox ID="hfH" runat="server" Text="450" />
        </p>
        <p>
            <asp:Button runat="server" ID="btEnter" OnClick="btEnter_Click" Text="Сохранить" />
        </p>

Обрабатывая событие OnClick по Button мы обрезаем картинку по заданым координатам и отдаем ее обратно(чтоб посмотреть что получилось).

protected void btEnter_Click(object sender, EventArgs e)
        {
            int x = Convert.ToInt32(hfX1.Text);
            int y = Convert.ToInt32(hfY1.Text);
            int w = Convert.ToInt32(hfW.Text);
            int h = Convert.ToInt32(hfH.Text);
            Rectangle rectangle = new Rectangle(x, y, w, h);
            int width = w;
            int height = h;

            string newImageName = CropAndSave(
                rectangle, width, height, imgPhoto.Src);

            imgPhoto.Src = «/temp/" + newImageName+".jpg";
        }

Сам метод обработки иллюстрации выглядит примерно вот так:

public string CropAndSave(System.Drawing.Rectangle rectangle,
           int width, int height, string imgName)
        {
            Rectangle dest = new Rectangle(0, 0, width, height);

            string newGuid = Guid.NewGuid().ToString();

            string newImageName = HttpContext.Current.Server.MapPath("/temp/" + newGuid);

            using (Image rawImg = Image.FromFile(Server.MapPath(imgName)))
            {
                using (Bitmap webImage = new Bitmap(width, height, PixelFormat.Format24bppRgb))
                {
                    using (Graphics g = Graphics.FromImage(webImage))
                    {
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

                        g.DrawImage(rawImg, dest, rectangle, GraphicsUnit.Pixel);

                        webImage.Save(newImageName, ImageFormat.Jpeg);
                    }
                }
            }

            return newGuid;
        }

К сожалению даже задав максимальное качество, мы получаем артефакты на новом изображении. Пока не понял, можно ли еще больше поднять качество…

Живой пример можно посмотреть вот тут:

http://web2skill.com/aspnetcropper/

Цветовая схема для Visual Studio

Всем кто долгое время работает в Visual Studio, хочу порекомендовать цветовую схему. Глаза напрягаются намного меньше... 

А Вы изменяете настройки по умолчанию?

Создание RSS и Atom ленты в .NET 3.5

Это стало еще проще, в .NET 3.5 появился namespace System.ServiceModel.Syndication

Простой пример:

private void WriteRss(List<Doc> docList)
    {

        Response.Buffer = false;
        Response.Clear();
        Response.ContentType = "application/xml";

        using (XmlWriter writer = XmlWriter.Create(Response.OutputStream))
        {
            SyndicationFeed feed = new SyndicationFeed
                ("Название",
                "Описание",
                new Uri(http://урл));

            feed.Copyright = new TextSyndicationContent
                ("© Copyright");

            feed.Generator = "FlashEngine";

            feed.Language = "ru-RU";

            List<SyndicationItem> items = new List<SyndicationItem>();

            foreach (Doc doc in docList)
            {
                SyndicationItem item = new SyndicationItem();

                item.AddPermalink(new Uri("http://url" + doc.Url));
                item.Title = TextSyndicationContent.CreatePlaintextContent(doc.Title);
                item.Content = SyndicationContent.CreateXhtmlContent(doc.Text);
                item.PublishDate = doc.PublishDateTime;
                items.Add(item);

            }
            feed.Items = items;

            Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
            rssFormatter.WriteTo(writer);
            writer.Flush();
        }

        Response.End();
    }

Пропажа закладки ASP.NET в оснастке IIS

Размешая новый сайт на сервере я обнаружил что в настройках сайта нет больше закладки «ASP.NET». Точно так, как это было до выхода версии .NET Framework 2.0

Погуглив я понял в чем причина. Я недавно установил vmware serverи на эту машину, и это чудным образом так влияет на оснастку IIS. Решение проблемы:

  • NET STOP IISADMIN /Y
  • NotePad C:\WINDOWS\system32\inetsrv\MetaBase.xml
    Находим строку где написано «Enable32BitAppOnWin64=TRUE» и просто её удаляем
  • iisreset

ASP.NET MVC Framework

Скот Гутри(Scott Guthrie) написал первый большой пост о ASP.NET MVC Framework, как он пишет, сейчас он над ним работает и его можно будет увидеть через пару недель.

MVC Framework это правила, которые придется соблюдать даже если этого не хочется. Я считаю это правильно, это не даст испортить приложение еще на этапе проектирования. Одно из достоинств Ruby on Rails это эти самые правила(модель MVC). В противовес идут такие платформы как PHP, когда ты пишешь как хочешь, в итоге куча проектов написанных далеко не профессионалами с ужасным кодом и архитектурой.

Ждем…

Пространство имен и типы в .Net Framework 3.5

Полная версия лежит здесь

Мои новости

  • Проект над которым работали последний год - провалился.
  • Вышел из отпуска, это был самый большой отпуск в моей жизни.
  • В отпуске поднимал бизнес, пока отдачи нет, но надеюсь будет.
  • Друг продал mac-mini, интересная штука. Но в двух словах не расскажешь...
  • Восстанавливаю документы и надеюсь скоро буду на машине, у нас уже оч холодно.
  • Не писал сюда 2 месяца, сейчас буду, не отписывайтесь ;)

Проблемы в Vista с сетью

У некоторых пользователей Windows Vista возникают проблемы с работой сети. Выражается это по разному, иногда очень медленно работает браузер или сеть. У меня была проблема с подключением к серверам в другом офисе, через RDP, просто не мог подключиться. Связь между офисами через VPN, в обоих офисах на шлюзах FreeBSD.

Оказывается в новой версии набора протоколов TCP/IP MS Vista(а также будущем Windows Server Longhorn) реализована поддержка автоматической настройки размера фреймов(окна, по терминалогии Microsoft). Сделано это для повышения производительности сети. На сколько это эффективно - незнаю, но часто шлюзы такие пакеты не пропускают... Но чтобы избавится от этого глюка - надо выключить этот "тюнинг" в системе.

netsh interface tcp set global autotuninglevel=disabled

 

Недавно перешел на Vista, до этого везде использовал только Server 2003. В целом мне нравится, по началу надо понять что теперь как и где;). Очень нравится Aero...

 

Удаление страниц из кэша в ASP.NET

Для меня стало открытием возможность удалять из кэша страницы таким способом.

private void RemoveCacheButton_Click(object sender, System.EventArgs e)
{
    HttpResponse.RemoveOutputCacheItem("/page/Cache.aspx");
}

Защита от Cross-Site Scripting атаки в ASP.NET

Небольшой набор правил, соблюдая которые возможность XSS атаки на ваш сайт сведется к минимуму. Цель Cross-Site-Scripting атаки - выполнение клиентского кода в пределах вашего web-приложения. Статья эта относится именно к ASP.NET, другие платформы и языки имеют другие возможности.

Поисковик для .NET программистов

Searchdotnet.com - проект который собрал список всех сайтов относящихся к .NET разработке и через персональный поиск Google позволяет легко искать по всем этим сайтам. Также есть поиск по компонентам... Удобно!

Copyright © Антон Ковалев