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

Исследование защиты программы TopStyle 4
21.07.2009 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы TopStyle 4
TopStyle - лучшая программа для работы с каскадными таблицами стилей CSS. Предоставляет разработчику такие мощные инструменты, как автодополнение, предпросмотр стилей во встроенном браузере, валидацию стилей, поддержку юникода, позволяет обновлять стили прямо на сервере и совместима со всеми современными браузерами. Но раз программа появилась в этом разделе, значит у нее все-таки есть недостатки. Она требует регистрацию, естественно, за некоторую сумму денег.
Читать статью целиком »
Просмотров: 6479 | Комментариев: 13

Нанесение графических водяных знаков на изображение
13.07.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Наносить текстовые надписи на картинки средствами PHP мы уже умеем. Теперь рассмотрим как делать то же самое, только на этот раз вместо текста будет графический маркер. Сам маркер представляет собой картинку в формате PNG-8 (глубина цвета - 8 бит), допускается прозрачность и произвольная форма. Если маркер будет с другой глубиной цвета, то при наложении прозрачный цвет будет заменен на черный. Другой формат маркеров не поддерживается! Файл PNG определяется по расширению, можно анализировать внутреннюю структуру, но это, наверное, в данном случае лишнее и остается на совести вебмастера.Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Функция нанесения графического водяного знака на изображение
- // Copyright (C) ManHunter / PCL
- // http://www.manhunter.ru
- //-------------------------------------------------------------------
- // Параметры вызова:
- // $picture - путь к файлу картинки на сервере
- // $marker - путь к файлу водяного знака на сервере
- // $opacity - процент прозрачности
- // $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_PNG_Image($picture, $marker, $opacity=100,
- $watermark_position=WATERMARK_RIGHT_BOTTOM) {
- // Проверки на наличие файлов и допустимые параметры
- if (!file_exists($picture)) { return false; }
- if (!file_exists($marker)) { return false; }
- // Получить размеры исходного изображения
- list ($sx,$sy)=GetImageSize($picture);
- if ($sx==0 || $sy==0) { return false; }
- // Получить размеры маркера
- list ($mx,$my)=GetImageSize($marker);
- if ($mx==0 || $my==0 || $sx<($mx+20) || $sy<($my+20)) { return false; }
- // Если расширение маркера не .PNG, то выход с ошибкой
- if (strtolower(substr($marker,-4))!=".png") { return false; }
- // Если расширения нет, то выход с ошибкой
- $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; }
- }
- // Получить координаты блока на картинке для нанесения надписи
- switch ($watermark_position) {
- case WATERMARK_LEFT_BOTTOM: {
- $pos_x=10;
- $pos_y=$sy-$my-10;
- break;
- }
- case WATERMARK_RIGHT_BOTTOM: {
- $pos_x=$sx-$mx-10;
- $pos_y=$sy-$my-10;
- break;
- }
- case WATERMARK_LEFT_TOP: {
- $pos_x=10;
- $pos_y=10;
- break;
- }
- case WATERMARK_RIGHT_TOP: {
- $pos_x=$sx-$mx-10;
- $pos_y=10;
- break;
- }
- case WATERMARK_CENTER: {
- $pos_x=intval($sx/2-$mx/2);
- $pos_y=intval($sy/2-$my/2);
- break;
- }
- default: {
- imageDestroy($im);
- return false;
- }
- }
- // Нанести водяной знак с нужной прозрачностью
- $watermark=@ImageCreateFromPng($marker);
- ImageCopyMerge($im, $watermark, $pos_x, $pos_y, 0, 0, $mx, $my, $opacity);
- ImageDestroy($watermark);
- // Записать измененный файл на место
- switch (strtolower($pocket[1])) {
- case "jpeg":
- case "jpg": {
- ImageJPEG($im,$picture,90);
- break;
- }
- case "gif": {
- ImageGIF($im,$picture);
- break;
- }
- case "png": {
- ImagePNG($im,$picture);
- break;
- }
- }
- ImageDestroy($im);
- return true;
- }
Читать статью целиком »
Просмотров: 9341 | Комментариев: 13

Фестиваль цветников "За молодежью - будущее"
12.07.2009 | Категория: Жизнь в оффлайне | Автор: ManHunter

Фестиваль цветников "За молодежью - будущее"
Сегодня на улице стоит отличная погода, поэтому я решил съездить в Природно-исторический парк "Кузьминки-Люблино" на Фестиваль цветников. Как обычно, с фотоаппаратом. Заодно получше исследую сам парк, а то еще ни разу там не был.
Читать статью целиком »
Просмотров: 6155 | Комментариев: 5

Гиперссылки в диалоговых окнах на Ассемблере
11.07.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Создание текстовой гиперссылки в диалоговом окне, казалось бы, простая задача. Но дело в том, что в Windows по умолчанию нет элементов диалоговых окон, которые бы выполняли роль гиперссылки. Готовых решений на FASM тоже не нашлось, значит придется создавать такой элемент самостоятельно. Сперва определимся с задачами, что нам надо сделать. Должен получиться элемент диалогового окна в виде текста определенного цвета, при наведении на который курсор должен менять свою форму, а цвет изменяться на подсвеченный. При клике на такой элемент должна открываться заданная ссылка. Задачи ясны, начнем их решать. Сперва выберем элемент диалоговых окон из списка стандартных, который и будет использоваться в качестве гиперссылки. Сразу же приходит на ум STATIC. По умолчанию элемент класса STATIC полностью оправдывает свое название и не реагирует практически ни на какие сообщения. Чтобы STATIC принимал движение курсора и нажатия клавиш мышки, его надо описать в ресурсах с флагом стилей SS_NOTIFY.А как отследить движение курсора только над нашей гиперссылкой? Тут нам на помощь придет такая полезная вещь, как субклассирование. Суть субклассирования проста. С каждым окном связан указатель на оконную процедуру, которая обрабатывает сообщения Windows. Когда система получает сообщение, предназначенное для некоторого окна, она находит адрес оконной процедуры этого окна и вызывает ее. При субклассировании мы заменяем эту процедуру нашей и сохраняем указатель на старую процедуру, чтобы можно было передать ей сообщения для дальнейшей обработки. Это делается функцией SetWindowLong с индексом GWL_WNDPROC на этапе инициализации главного окна:
Code (Assembler) : Убрать нумерацию
- ...
- ; Получить хэндл нашего STATIC'а
- invoke GetDlgItem,[hwnddlg],ID_LINK
- ; Субклассировать гиперссылку и установить собственный
- ; обработчик для STATIC'а
- invoke SetWindowLong,eax,GWL_WNDPROC,WindowProc
- ; Сохранить адрес предыдущего обработчика
- mov [OldWndProc],eax
- ...
Читать статью целиком »
Просмотров: 6983 | Комментариев: 6

Готовим картофельную запеканку с мясом
08.07.2009 | Категория: А еще я туда ем! | Автор: ManHunter

Картофельная запеканка с мясом
Еще одно вкусное и несложное в приготовлении блюдо - картофельная запеканка с мясом. Я называю такие блюда "халявными", потому что очень хорошо выручают при дефиците времени и средств.
Читать статью целиком »
Просмотров: 8490 | Комментариев: 9
