Быстрый поиск
Введите фрагмент названия статьи для поиска
Russian Tribute to Nightwish и Сольный концерт Xe-None
21.02.2009 | Категория: Жизнь в оффлайне | Автор: ManHunter
Russian Tribute to Nightwish
Сольный концерт Xe-None
Сегодня сходил на двойной концерт в клуб "Релакс", давно там не был. Тем более впереди целых два выходных дня, можно спокойно отоспаться.
Читать статью целиком »
Просмотров: 5090 | Комментариев: 4
Увеличение количества одновременных TCP/IP соединений
20.02.2009 | Категория: Темная сторона Силы | Автор: ManHunter
После установки новых ServicePack'ов для Windows XP различные программы для p2p-сетей типа eMule или uTorrent начинают дико тормозить. Это связано с тем, что количество активных соединений в сетевом драйвере TCPIP.SYS после установки ServicePack'ов принудительно ограничивается до 10. Даже на самодельных пропатченных сборках Windows с увеличенным количеством соединений такая проблема может возникнуть, если будет скачано и установлено обновление KB951748, заменяющее драйвер TCPIP.SYS на новый с прежним количеством соединений. По неофициальной информации такое ограничение введено с целью замедления распространения сетевых червей. Не исключено, что этот драйвер будет заменяться и с какими-нибудь другими очередными обновлениями. Для изменения количества соединений рекомендую воспользоваться утилитой Intelligent TCPIP.SYS patcher от немецкого программиста LvlLord. Последняя версия утилиты 2.23d от 2005 года. Пользоваться ей очень легко. Сразу после запуска вам будет показано текущее количество одновременных подключений, установленных в системе.Скриншот программы Intelligent TCPIP.SYS patcher
Нажмите кнопку "C", введите желаемое количество соединений. Если количество будет более 100, то программа выдаст предупреждение, подтвердите выбранное количество кнопкой "Y".
Читать статью целиком »
Просмотров: 208579 | Комментариев: 60
Нанесение текстовых водяных знаков на изображение
16.02.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Для предотвращения воровства контента часто используются водяные знаки на изображениях. Это может быть логотип сайта, надпись об авторских правах или, например, ссылка на ваш сайт. Для нанесения водяных знаков создано множество различных программ, но при наполнении сайта гораздо удобнее использовать скрипт, который будет маркировать картинки сразу при загрузке на сервер. Я написал такую функцию, наносящую нужный текст в указанное место изображения. Ее особенностью является то, что перед нанесением надписи анализируется цвет картинки в месте, где будет расположен текст. Для темных картинок будет выбран белый цвет надписи с черной рамкой, а для светлых наоборот, будет выбран черный цвет надписи с белой рамкой.Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Функция нанесения текстового водяного знака на изображение
- // Copyright (C) ManHunter / PCL
- // http://www.manhunter.ru
- //-------------------------------------------------------------------
- // Параметры вызова:
- // $picture - путь к файлу картинки на сервере
- // $font - путь к файлу с TrueType-шрифтом на сервере
- // $font_size - размер шрифта
- // $marker - текст водяного знака
- // $watermark_position - положение водяного знака на картинке
- //-------------------------------------------------------------------
- // Константы положения водяного знака на картинке
- define ("WATERMARK_LEFT_BOTTOM",0);
- define ("WATERMARK_LEFT_TOP",1);
- define ("WATERMARK_RIGHT_BOTTOM",2);
- define ("WATERMARK_RIGHT_TOP",3);
- define ("WATERMARK_CENTER",4);
- function Watermark_Image($picture, $font, $font_size, $marker,
- $watermark_position=WATERMARK_LEFT_BOTTOM) {
- // Проверки на наличие файлов и допустимые параметры
- if (!file_exists($picture)) { return false; }
- if (!file_exists($font)) { return false; }
- if ($font_size<10) { return false; }
- if (($marker=trim($marker))=="") { return false; }
- // Получить размеры исходного изображения
- list ($sx,$sy)=GetImageSize($picture);
- if ($sx==0 || $sy==0) { return false; }
- $dst_im=imageCreatetruecolor($sx,$sy);
- // Определить цвета для нанесения водяных знаков
- $black=ImageColorAllocate($dst_im,0,0,0);
- $white=ImageColorAllocate($dst_im,255,255,255);
- // Если расширения нет, то выход с ошибкой
- $pocket=Array();
- eregi("\.([a-z]*)$",$picture,$pocket);
- if ($pocket[1]=="") { return false; }
- // На основании расширения создать картинку
- switch (strtolower($pocket[1])) {
- case "jpeg":
- case "jpg": {
- if (!$im=@ImageCreateFromJpeg($picture)) { return false; }
- break;
- }
- case "gif": {
- if (!$im=@ImageCreateFromGif($picture)) { return false; }
- break;
- }
- case "png": {
- if (!$im=@ImageCreateFromPng($picture)) { return false; }
- break;
- }
- default: { return false; }
- }
- ImageCopyResampled($dst_im, $im, 0, 0, 0, 0, $sx, $sy, $sx, $sy);
- imageDestroy($im);
- // Получить координаты блока под текст
- list($lnx,$lny,$rnx,$rny,$rvx,$rvy,$lvx,$lvy) =
- ImageTTFBBox($font_size,0,$font,$marker);
- // Вычислить размеры блока
- $text_width=$rnx-$lnx;
- $text_height=$rny-$rvy;
- // Получить координаты блока на картинке для нанесения надписи
- switch ($watermark_position) {
- case WATERMARK_LEFT_BOTTOM: {
- $pos_x=10;
- $pos_y=$sy-10;
- break;
- }
- case WATERMARK_RIGHT_BOTTOM: {
- $pos_x=$sx-$text_width-10;
- $pos_y=$sy-10;
- break;
- }
- case WATERMARK_LEFT_TOP: {
- $pos_x=10;
- $pos_y=$text_height+10;
- break;
- }
- case WATERMARK_RIGHT_TOP: {
- $pos_x=$sx-$text_width-10;
- $pos_y=$text_height+10;
- break;
- }
- case WATERMARK_CENTER: {
- $pos_x=intval($sx/2-$text_width/2);
- $pos_y=intval($sy/2+$text_height/2);
- break;
- }
- default: { return false; }
- }
- // Подсчитать количество светлых и темных пикселов в блоке
- $dark=0;
- $light=0;
- for ($x=0; $x<$text_width; $x++) {
- for ($y=0; $y<$text_height; $y++) {
- $color=imageColorAt($dst_im,($pos_x+$x),($pos_y+$y-$text_height));
- list($r,$g,$b)=array_values(imageColorsForIndex($dst_im,$color));
- if (($r+$g+$b)<(128*3)) { $dark++; } else { $light++; }
- }
- }
- // В зависимости от количества светлых и темных точек нанести
- // светлую или темную надпись
- if ($light>$dark) {
- // Темный текст со светлой рамкой
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y-1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y-1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y-1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y+1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y+1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y+1,$white,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y,$black,$font,$marker);
- }
- else {
- // Светлый текст с темной рамкой
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y-1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y-1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y-1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y+1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y+1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y+1,$black,$font,$marker);
- ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y,$white,$font,$marker);
- }
- // Записать измененный файл на место
- switch (strtolower($pocket[1])) {
- case "jpeg":
- case "jpg": {
- ImageJPEG($dst_im,$picture,90);
- break;
- }
- case "gif": {
- ImageGIF($dst_im,$picture);
- break;
- }
- case "png": {
- ImagePNG($dst_im,$picture);
- break;
- }
- }
- imageDestroy($dst_im);
- return true;
- }
Читать статью целиком »
Просмотров: 12653 | Комментариев: 10
Поздравляю с Днем святого Валентина!
14.02.2009 | Категория: Всякая всячина | Автор: ManHunter
Поздравляю с Днем святого Валентина!
Когда и грустно, и смешно.
Люби!
Когда не любят, все равно.
Люби!
Хоть и любимым не зовут.
Люби!
Любовь твою поймут.
Люби!
Своему сердцу прикажи.
Люби!
Своей любовью дорожи.
Люби!
Когда кругом добро и зло.
Люби!
И быть иначе не должно!
Просмотров: 5467 | Комментариев: 1
Использование иконок разных размеров в ресурсах
12.02.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Большим плюсом Flat Assembler является то, что при разработке создается минимальное количество файлов. Описания ресурсов хранятся прямо в исходнике ASM, что тоже очень удобно. Например, в официальной документации и исходниках описание главной иконки в ресурсах исполняемого файла выглядит примерно так:Code (Assembler) : Убрать нумерацию
- section '.rsrc' resource data readable
- directory RT_ICON, icons,\
- RT_GROUP_ICON, group_icons
- resource icons,\
- 1, LANG_NEUTRAL, icon_data
- resource group_icons,\
- 1, LANG_NEUTRAL, main_icon
- ; Описание одиночной иконки
- icon main_icon, icon_data, 'main_icon.ico'
Code (Assembler) : Убрать нумерацию
- section '.rsrc' resource data readable
- directory RT_ICON, icons,\
- RT_GROUP_ICON, group_icons
- resource icons,\
- 1, LANG_NEUTRAL, icon_data1,\
- 2, LANG_NEUTRAL, icon_data2,\
- 3, LANG_NEUTRAL, icon_data3
- resource group_icons,\
- 1, LANG_NEUTRAL, main_icon
- ; Описание иконок разных размеров, объединенных в одну
- icon main_icon,\
- icon_data1, 'icon_16x16_32bit.ico',\
- icon_data2, 'icon_32x32_32bit.ico',\
- icon_data3, 'icon_48x48_32bit.ico'
Читать статью целиком »
Просмотров: 7824 | Комментариев: 5