Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

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
Для предотвращения воровства контента часто используются водяные знаки на изображениях. Это может быть логотип сайта, надпись об авторских правах или, например, ссылка на ваш сайт. Для нанесения водяных знаков создано множество различных программ, но при наполнении сайта гораздо удобнее использовать скрипт, который будет маркировать картинки сразу при загрузке на сервер. Я написал такую функцию, наносящую нужный текст в указанное место изображения. Ее особенностью является то, что перед нанесением надписи анализируется цвет картинки в месте, где будет расположен текст. Для темных картинок будет выбран белый цвет надписи с черной рамкой, а для светлых наоборот, будет выбран черный цвет надписи с белой рамкой.
  1. //-------------------------------------------------------------------
  2. // Функция нанесения текстового водяного знака на изображение
  3. // Copyright (C) ManHunter / PCL
  4. // http://www.manhunter.ru
  5. //-------------------------------------------------------------------
  6. // Параметры вызова:
  7. // $picture - путь к файлу картинки на сервере
  8. // $font - путь к файлу с TrueType-шрифтом на сервере
  9. // $font_size - размер шрифта
  10. // $marker - текст водяного знака
  11. // $watermark_position - положение водяного знака на картинке
  12. //-------------------------------------------------------------------
  13.  
  14. // Константы положения водяного знака на картинке
  15. define ("WATERMARK_LEFT_BOTTOM",0);
  16. define ("WATERMARK_LEFT_TOP",1);
  17. define ("WATERMARK_RIGHT_BOTTOM",2);
  18. define ("WATERMARK_RIGHT_TOP",3);
  19. define ("WATERMARK_CENTER",4);
  20.  
  21. function Watermark_Image($picture$font$font_size$marker,
  22.                          $watermark_position=WATERMARK_LEFT_BOTTOM) {
  23.   // Проверки на наличие файлов и допустимые параметры
  24.   if (!file_exists($picture)) { return false; }
  25.   if (!file_exists($font)) { return false; }
  26.   if ($font_size<10) { return false; }
  27.   if (($marker=trim($marker))=="") { return false; }
  28.  
  29.   // Получить размеры исходного изображения
  30.   list ($sx,$sy)=GetImageSize($picture);
  31.   if ($sx==|| $sy==0) { return false; }
  32.  
  33.   $dst_im=imageCreatetruecolor($sx,$sy);
  34.  
  35.   // Определить цвета для нанесения водяных знаков
  36.   $black=ImageColorAllocate($dst_im,0,0,0);
  37.   $white=ImageColorAllocate($dst_im,255,255,255);
  38.  
  39.   // Если расширения нет, то выход с ошибкой
  40.   $pocket=Array();
  41.   eregi("\.([a-z]*)$",$picture,$pocket);
  42.   if ($pocket[1]=="") { return false; }
  43.  
  44.   // На основании расширения создать картинку
  45.   switch (strtolower($pocket[1])) {
  46.     case "jpeg":
  47.     case "jpg": {
  48.       if (!$im=@ImageCreateFromJpeg($picture)) { return false; }
  49.       break;
  50.     }
  51.     case "gif": {
  52.       if (!$im=@ImageCreateFromGif($picture)) { return false; }
  53.       break;
  54.     }
  55.     case "png": {
  56.       if (!$im=@ImageCreateFromPng($picture)) { return false; }
  57.       break;
  58.     }
  59.     default: { return false; }
  60.   }
  61.  
  62.   ImageCopyResampled($dst_im$im0000$sx$sy$sx$sy);
  63.   imageDestroy($im);
  64.  
  65.   // Получить координаты блока под текст
  66.   list($lnx,$lny,$rnx,$rny,$rvx,$rvy,$lvx,$lvy) =
  67.      ImageTTFBBox($font_size,0,$font,$marker);
  68.  
  69.   // Вычислить размеры блока
  70.   $text_width=$rnx-$lnx;
  71.   $text_height=$rny-$rvy;
  72.  
  73.   // Получить координаты блока на картинке для нанесения надписи
  74.   switch ($watermark_position) {
  75.     case WATERMARK_LEFT_BOTTOM: {
  76.       $pos_x=10;
  77.       $pos_y=$sy-10;
  78.       break;
  79.     }
  80.     case WATERMARK_RIGHT_BOTTOM: {
  81.       $pos_x=$sx-$text_width-10;
  82.       $pos_y=$sy-10;
  83.       break;
  84.     }
  85.     case WATERMARK_LEFT_TOP: {
  86.       $pos_x=10;
  87.       $pos_y=$text_height+10;
  88.       break;
  89.     }
  90.     case WATERMARK_RIGHT_TOP: {
  91.       $pos_x=$sx-$text_width-10;
  92.       $pos_y=$text_height+10;
  93.       break;
  94.     }
  95.     case WATERMARK_CENTER: {
  96.       $pos_x=intval($sx/2-$text_width/2);
  97.       $pos_y=intval($sy/2+$text_height/2);
  98.       break;
  99.     }
  100.     default: { return false; }
  101.   }
  102.  
  103.   // Подсчитать количество светлых и темных пикселов в блоке
  104.   $dark=0;
  105.   $light=0;
  106.  
  107.   for ($x=0$x<$text_width$x++) {
  108.     for ($y=0$y<$text_height$y++) {
  109.       $color=imageColorAt($dst_im,($pos_x+$x),($pos_y+$y-$text_height));
  110.       list($r,$g,$b)=array_values(imageColorsForIndex($dst_im,$color));
  111.       if (($r+$g+$b)<(128*3)) { $dark++; } else { $light++; }
  112.     }
  113.   }
  114.  
  115.   // В зависимости от количества светлых и темных точек нанести
  116.   // светлую или темную надпись
  117.   if ($light>$dark) {
  118.     // Темный текст со светлой рамкой
  119.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y-1,$white,$font,$marker);
  120.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y-1,$white,$font,$marker);
  121.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y-1,$white,$font,$marker);
  122.  
  123.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y,$white,$font,$marker);
  124.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y,$white,$font,$marker);
  125.  
  126.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y+1,$white,$font,$marker);
  127.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y+1,$white,$font,$marker);
  128.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y+1,$white,$font,$marker);
  129.  
  130.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y,$black,$font,$marker);
  131.   }
  132.   else {
  133.     // Светлый текст с темной рамкой
  134.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y-1,$black,$font,$marker);
  135.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y-1,$black,$font,$marker);
  136.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y-1,$black,$font,$marker);
  137.  
  138.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y,$black,$font,$marker);
  139.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y,$black,$font,$marker);
  140.  
  141.     ImageTTFText($dst_im,$font_size,0,$pos_x-1,$pos_y+1,$black,$font,$marker);
  142.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y+1,$black,$font,$marker);
  143.     ImageTTFText($dst_im,$font_size,0,$pos_x+1,$pos_y+1,$black,$font,$marker);
  144.  
  145.     ImageTTFText($dst_im,$font_size,0,$pos_x,$pos_y,$white,$font,$marker);
  146.   }
  147.  
  148.   // Записать измененный файл на место
  149.   switch (strtolower($pocket[1])) {
  150.     case "jpeg":
  151.     case "jpg": {
  152.       ImageJPEG($dst_im,$picture,90);
  153.       break;
  154.     }
  155.     case "gif": {
  156.       ImageGIF($dst_im,$picture);
  157.       break;
  158.     }
  159.     case "png": {
  160.       ImagePNG($dst_im,$picture);
  161.       break;
  162.     }
  163.   }
  164.   imageDestroy($dst_im);
  165.   return true;
  166. }
Параметры вызова функции: $picture - полный путь к файлу на сервере, поддерживаются форматы JPG, GIF, PNG. Файл должен быть доступен для записи, так как после нанесения водяного знака он будет перезаписан с тем же именем. $font - путь к файлу с TrueType-шрифтом, который должен быть размещен на сервере. $font_size - размер шрифта надписи, рекомендуется 12. $marker - текстовая строка водяного знака, если используется кириллица, то она должна быть в Юникоде. $watermark_position - положение надписи на картинке, необязательный параметр. Доступные значения определены константами, прочие значения игнорируются: 0 - левый нижний угол (значение по умолчанию), 1 - левый верхний угол, 2 - правый нижний угол, 3 - правый верхний угол, 4 - центр изображения.

Читать статью целиком »
Просмотров: 12653 | Комментариев: 10

Поздравляю с Днем святого Валентина!

14.02.2009 | Категория: Всякая всячина | Автор: ManHunter

Поздравляю с Днем святого Валентина!

Люби!
Когда и грустно, и смешно.
Люби!
Когда не любят, все равно.
Люби!
Хоть и любимым не зовут.
Люби!
Любовь твою поймут.
Люби!
Своему сердцу прикажи.
Люби!
Своей любовью дорожи.
Люби!
Когда кругом добро и зло.
Люби!
И быть иначе не должно!


Просмотров: 5467 | Комментариев: 1

Использование иконок разных размеров в ресурсах

12.02.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Большим плюсом Flat Assembler является то, что при разработке создается минимальное количество файлов. Описания ресурсов хранятся прямо в исходнике ASM, что тоже очень удобно. Например, в официальной документации и исходниках описание главной иконки в ресурсах исполняемого файла выглядит примерно так:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data
  8.  
  9.   resource group_icons,\
  10.            1, LANG_NEUTRAL, main_icon
  11.  
  12.   ; Описание одиночной иконки
  13.   icon main_icon, icon_data, 'main_icon.ico'
Проблема в том, что одиночной иконки в приложениях часто бывает недостаточно. Система Windows в разных ситуациях отображает разные иконки файлов. Например, при просмотре папки Проводником в режиме "Таблица" или "Значки" иконки исполняемых файлов будут разного размера. Если в исполняемом файле только одна маленькая иконка, то она будет растянута до нужного размера. Аналогично, при компактном режиме просмотра одиночная большая иконка будет сжата. Качество изображения после масштабирования в большинстве случаев оставляет желать лучшего. После усиленных поисков было найдено такое вот простое, но неочевидное решение. Почему оно не описано в документации и не реализовано ни в одном примере, непонятно. Создаете несколько файлов иконок нужных размеров и описываете их в ресурсах следующим образом:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data1,\
  8.            2, LANG_NEUTRAL, icon_data2,\
  9.            3, LANG_NEUTRAL, icon_data3
  10.  
  11.   resource group_icons,\
  12.            1, LANG_NEUTRAL, main_icon
  13.  
  14.   ; Описание иконок разных размеров, объединенных в одну
  15.   icon main_icon,\
  16.            icon_data1, 'icon_16x16_32bit.ico',\
  17.            icon_data2, 'icon_32x32_32bit.ico',\
  18.            icon_data3, 'icon_48x48_32bit.ico'
Теперь наше приложение будет красиво отображаться в разных режимах просмотра. Количество иконок не ограничено, и вы можете использовать даже монохромные или 16-цветные иконки. Но лично я считаю, что для программ на Ассемблере вполне достаточно двух полноцветных иконок размерами 16х16 и 32х32 пикселов.

Читать статью целиком »
Просмотров: 7824 | Комментариев: 5

01 ... 401 402 403 404 405 406 407 ... 418
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0461 сек.) / Память: 4.5 Mb
Наверх