Blog. Just Blog

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

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

Проверка памяти при вызове функции ImageCreateTrueColor

11.12.2016 | Категория: Web-мастеру и не только | Автор: ManHunter

Проверка памяти при вызове функции ImageCreateTrueColor

При разработке любого сайта или веб-приложения нужно делать его максимально устойчивым к различным ситуациям, особенно если со стороны пользователя поступают какие-либо данные. Одна из таких ситуаций - обработка фотографий или других изображений, загружаемых пользователем. Для ресайза, наложения водяных знаков или эффектов, так или иначе приходится вызывать функцию ImageCreateTrueColor. Эта операция требует много памяти. Особенно это критично на виртуальном хостинге, где очень часто аккаунт жестко ограничен в использовании памяти сервера. Если памяти не хватает, например, для обработки больших изображений или в случае применения "бомб", то скрипт падает с фатальной ошибкой. Как узнать объем памяти, который потребуется для работы с изображением, до вызова функции ImageCreateTrueColor? Ответ вы найдете в этой статье.

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

Как на PHP правильно ресайзить картинки с прозрачностью

29.10.2016 | Категория: Web-мастеру и не только | Автор: ManHunter

Как на PHP правильно ресайзить картинки с прозрачностью

Многие начинающие программисты на PHP, когда дело доходит до работы с графикой, сталкиваются с одной и той же проблемой. При ресайзе у прозрачных картинок GIF и PNG получается черный фон, прозрачность при этом теряется. В интернете полно примеров готовых скриптов для автоматического ресайза картинок, где раз за разом повторяется эта ошибка. Давайте попробуем разобраться, как на PHP правильно ресайзить картинки с прозрачностью.

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

Эффект пикселизации на PHP

28.09.2016 | Категория: Web-мастеру и не только | Автор: ManHunter

Эффект пикселизации на PHP

Очередная реализация графических эффектов на PHP. На этот раз будет эффект пикселизации. Он заключается в следующем: изображение делится на квадраты (блоки) нужного размера, в каждом из них определяется основной цвет, затем выполняется заливка квадрата полностью этим цветом. Да, я в курсе про существование штатной функции PHP imagefilter с параметром IMG_FILTER_PIXELATE, но "ручная" реализация шире по возможностям и гораздо полезнее для мозгов.

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

Обфускация строк на PHP

07.09.2016 | Категория: Web-мастеру и не только | Автор: ManHunter
За несколько лет исследований различных кодировщиков и обфускаторов PHP-скриптов я изучил все используемые в них приемы сокрытия значений текстовых строк. Это могут быть названия функций или какие-то данные, которые должны быть представлены в виде строки. Так вот, во всех разобранных крипторах и обфускаторах символы в строке кодировались всего лишь несколькими способами: вариации преобразования строки из последовательности base64, декодирование из URL-encoded символов, escape-последовательности, упаковка строки в бинарные данные или результат функции chr по ординалу символа. Все подобные преобразования легко поддаются статическому анализу и декодированию типа замены по регулярным выражениям, то есть надежность сокрытия данных стремится к нулю.

В очередной раз экспериментируя с PHP, я решил на практике проверить, как поведет себя оператор инкремента и декремента в случае нецифровых значений. Согласно документации, при выполнении инкремента строковых переменных PHP следует соглашениям Perl, и рассматривает строку как условное число с базой значащих символов в диапазоне [a-z], [A-Z] и [0-9], причем одновременно. Проще всего это понять на следующих примерах:
  1. $a='K';
  2. $a++;
  3. echo $a;
  4. // L
  1. $a='a6';
  2. $a++;
  3. echo $a;
  4. // a7
Более интересные случаи для пограничных значений:
  1. $a='fZ9';
  2. $a++;
  3. echo $a;
  4. // gA0
  1. $a='ZZ';
  2. $a++;
  3. echo $a;
  4. // AAA
Постфиксный или префиксный инкремент тут значения не имеет, результат в обеих случаях одинаковый. При этом обратное действие, то есть декремент, как постфиксный, так и префиксный, на содержимое строки никак не влияет.

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

Преобразование массива чисел в интервалы

06.08.2016 | Категория: Web-мастеру и не только | Автор: ManHunter
По работе возникла необходимость обработать массив чисел таким образом, чтобы все последовательные значения в нем были преобразованы в интервалы. То есть массив [1, 3, 4, 5, 6, 9, 10, 15] должен превратиться в ["1", "3-6", "9-10", "15"]. Быстренько набросал вот такую функцию, может быть пригодится кому-нибудь еще.
  1. // Преобразование массива чисел в интервалы
  2. function array_to_intervals($data=array(), $divider='-') {
  3.     // Оставить только уникальные значения
  4.     $data=array_unique($data);
  5.     sort($data);
  6.  
  7.     $tmp=array();
  8.     $begin=$end=0;
  9.  
  10.     for ($i=0$i<count($data); $i++) {
  11.         // Начало интервала или одиночное значение
  12.         if ($begin==0) {
  13.             $begin=$end=$data[$i];
  14.         }
  15.  
  16.         if (isset($data[($i+1)])) {
  17.             // Расширить границы интервала
  18.             if ($data[($i+1)]==($end+1)) {
  19.                 $end++;
  20.             }
  21.             else {
  22.                 // Одиночное значение
  23.                 if ($begin==$end) {
  24.                     $tmp[]=$begin;
  25.                 }
  26.                 // Интервал
  27.                 else {
  28.                     $tmp[]=$begin.$divider.$end;
  29.                 }
  30.                 $begin=$end=0;
  31.             }
  32.         }
  33.     }
  34.  
  35.     if (count($data)) {
  36.         // Последнее значение
  37.         if ($begin==$end) {
  38.             $tmp[]=$begin;
  39.         }
  40.         else {
  41.             $tmp[]=$begin.$divider.$end;
  42.         }
  43.     }
  44.     return $tmp;
  45. }
Параметры функции: $data - массив для обработки, $divider - разделитель интервалов, по умолчанию "-", но можно задать свой, например, "...". На выходе - преобразованный массив с интервалами.

Просмотров: 2123 | Комментариев: 3

01 ... 09 10 11 12 13 14 15 ... 25
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 3 (0.0069 сек.) / Память: 4.5 Mb
Наверх