<%-- код --%>
Полезно :)
Возникла задача сделать простой способ заливки изображений и их редактирование. Самое интересно для меня это кадрирование, расскажу как это можно сделать.
Берем библиотеку «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, хочу порекомендовать цветовую схему. Глаза напрягаются намного меньше...
А Вы изменяете настройки по умолчанию?
Это стало еще проще, в .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». Точно так, как это было до выхода версии .NET Framework 2.0
Погуглив я понял в чем причина. Я недавно установил vmware serverи на эту машину, и это чудным образом так влияет на оснастку IIS. Решение проблемы:
- NET STOP IISADMIN /Y
- NotePad C:\WINDOWS\system32\inetsrv\MetaBase.xml
Находим строку где написано «Enable32BitAppOnWin64=TRUE» и просто её удаляем
- iisreset
Скот Гутри(Scott Guthrie) написал первый большой пост о ASP.NET MVC Framework, как он пишет, сейчас он над ним работает и его можно будет увидеть через пару недель.
MVC Framework это правила, которые придется соблюдать даже если этого не хочется. Я считаю это правильно, это не даст испортить приложение еще на этапе проектирования. Одно из достоинств Ruby on Rails это эти самые правила(модель MVC). В противовес идут такие платформы как PHP, когда ты пишешь как хочешь, в итоге куча проектов написанных далеко не профессионалами с ужасным кодом и архитектурой.
Ждем…

Полная версия лежит здесь
- Проект над которым работали последний год - провалился.
- Вышел из отпуска, это был самый большой отпуск в моей жизни.
- В отпуске поднимал бизнес, пока отдачи нет, но надеюсь будет.
- Друг продал mac-mini, интересная штука. Но в двух словах не расскажешь...
- Восстанавливаю документы и надеюсь скоро буду на машине, у нас уже оч холодно.
- Не писал сюда 2 месяца, сейчас буду, не отписывайтесь ;)
У некоторых пользователей Windows Vista возникают проблемы с работой сети. Выражается это по разному, иногда очень медленно работает браузер или сеть. У меня была проблема с подключением к серверам в другом офисе, через RDP, просто не мог подключиться. Связь между офисами через VPN, в обоих офисах на шлюзах FreeBSD.
Оказывается в новой версии набора протоколов TCP/IP MS Vista(а также будущем Windows Server Longhorn) реализована поддержка автоматической настройки размера фреймов(окна, по терминалогии Microsoft). Сделано это для повышения производительности сети. На сколько это эффективно - незнаю, но часто шлюзы такие пакеты не пропускают... Но чтобы избавится от этого глюка - надо выключить этот "тюнинг" в системе.
netsh interface tcp set global autotuninglevel=disabled
Недавно перешел на Vista, до этого везде использовал только Server 2003. В целом мне нравится, по началу надо понять что теперь как и где;). Очень нравится Aero...
Для меня стало открытием возможность удалять из кэша страницы таким способом.
private void RemoveCacheButton_Click(object sender, System.EventArgs e)
{
HttpResponse.RemoveOutputCacheItem("/page/Cache.aspx");
}
Небольшой набор правил, соблюдая которые возможность XSS атаки на ваш сайт сведется к минимуму. Цель Cross-Site-Scripting атаки - выполнение клиентского кода в пределах вашего web-приложения. Статья эта относится именно к ASP.NET, другие платформы и языки имеют другие возможности.
Searchdotnet.com - проект который собрал список всех сайтов относящихся к .NET разработке и через персональный поиск Google позволяет легко искать по всем этим сайтам. Также есть поиск по компонентам... Удобно!