Blog. Just Blog

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

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

Поздравляю с Днем защитника Отечества!

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

Поздравляю с Днем защитника Отечества!

"Есть такая профессия - Родину защищать". Всех, для кого это не просто красивые слова, я хочу сегодня поздравить с Днем защитника Отечества. Это праздник настоящих мужчин, тех кто служит, кто уже отслужил и кто только готовится надеть погоны. С праздником вас, друзья! Пусть этот день для вас всегда будет мирным и радостным! И светлая память тем, кто уже никогда не вернется.

Инженер саперного отделения ОМОН
капитан милиции - ManHunter


Просмотров: 5746 | Комментариев: 11

Russian Tribute to Nightwish и Сольный концерт Xe-None

21.02.2009 | Категория: Жизнь в оффлайне | Автор: ManHunter

Russian Tribute to Nightwish


Сольный концерт Xe-None

Сегодня сходил на двойной концерт в клуб "Релакс", давно там не был. Тем более впереди целых два выходных дня, можно спокойно отоспаться.

Читать статью целиком »
Просмотров: 5116 | Комментариев: 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".

Читать статью целиком »
Просмотров: 208963 | Комментариев: 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 - центр изображения.

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

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

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

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

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


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

01 ... 405 406 407 408 409 410 411 ... 422
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 2 (0.0317 сек.) / Память: 4.5 Mb
Наверх