пятница, 6 февраля 2009 г.

Черно-белое фото на PHP 2

Еще один способ сделать черно-белое фото с помощью PHP. В данном случае используется специальный фильтр IMG_FILTER_GRAYSCALE.
function png2grayscale($filename){
$img = imagecreatefrompng($filename);
if ($img && imagefilter($img, IMG_FILTER_GRAYSCALE)) {
echo 'Image converted to grayscale.';
imagepng($img, $filename);
} else {
echo 'Conversion to grayscale failed.';
}
imagedestroy($img);
}

Читать дальше »

четверг, 5 февраля 2009 г.

Черно-белое фото с помощью PHP

Marilyn MonroeМногим людям нравится черно-белое фото. Такое фото создает некий эффект «классики», «старомодности», зрелости. Vintage -- одним словом. Вы не знали? -- «раньше небо было голубее, солнце желтее...»*, а PHP и в помине не было.

*Это прекрасно видно на черно-белых снимках ;)
И тем не менее пример из недавней практики -- как сделать цветное изображение черно-белым на PHP с помощью библиотеки GD.
function grayscale($filename){
//Получаем размеры изображения
$img_size = GetImageSize($filename);
$width = $img_size[0];
$height = $img_size[1];
//Создаем новое изображение с такмими же размерами
$img = imageCreate($width,$height);
//Задаем новому изображению палитру "оттенки серого" (grayscale)
for ($c = 0; $c < 256; $c++) {
ImageColorAllocate($img, $c,$c,$c);
}
//Содаем изображение из файла Jpeg
$img2 = ImageCreateFromJpeg($filename);
//Объединяем два изображения
ImageCopyMerge($img,$img2,0,0,0,0, $width, $height, 100);
//Сохраняем полученное изображение
imagejpeg($img, $filename);
//Освобождаем память, занятую изображением
imagedestroy($img);
}

Этот метод сохраняет изображения в черно-белой гамме. Например, при загрузке файлов на сервер.

Если же, к примеру, у вас на сервере хранятся цветные изображения, а вам по некоторым причинам решительно захотелось «отдать» их браузеру как черно-белые. Воспользуйтесь следующей модификацией этого метода:

function show_grayscale($filename){
$img_size = GetImageSize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imageCreate($width,$height);
for ($c = 0; $c < 256; $c++) {
ImageColorAllocate($img, $c,$c,$c);
}
$img2 = ImageCreateFromJpeg($filename);
ImageCopyMerge($img,$img2,0,0,0,0, $width, $height, 100);
//Отдаем полученное изображение браузеру
header("Content-type: image/jpeg");
imagejpeg($img);

imagedestroy($img);
}

Pro et Contra

..или «За и Против» обоих методов.
В первом примере:
  • (+) ваше приложение нагружается всего один раз -- когда вы сохраняете изображение;
  • (-) на сервере у вас хранятся черно-белые изображения. Цветных вы из них уже не сделаете.

Во втором примере:
  • (+) на сервере у вас хранятся цветные изображения. И вы всегда можете выбрать как их отобразить;
  • (-) ваше приложение нагружается каждый раз -- когда вы отдаете черно-белое изображение браузеру.

Читать дальше »

пятница, 30 января 2009 г.

Eclipse PHP Development Tools (PDT 2.0)

Не так давно я тиснул заметку про Aptana PHP -- подключаемый модуль к оболочке Eclipse. И вот очередная новость из той же серии.


Eclipse PHP Development Tools (PDT 2.0)
Консорциум Eclipse Foundation, ведущий разработку открытой среды разработки Eclipse, сегодня выпустила вторую версию набора средств для разработки приложений на популярном языке веб-программирования PHP. Новая версия Eclipse PHP Development Tools (PDT 2.0) является совместным продуктом Eclipse и Zend Technologies.

По словам разработчиков Eclipse, с релизом второй версии среды для PHP, этот язык стал таким же основным для Eclipse IDE, как Java или C++.

В обновленной версии PHP-среды появились новшества, которые наверняка будут оценены программистами: полная поддержка объектно-ориентированного программирования, поддержка последних новшеств PHP 5.1, а также общая повышенная производительность набора софта, интегрируемого в Eclipse. Кроме того, в PDT 2.0 появились обучающие материалы для новичков.

Вторая версия несколько изменила интерфейс, что, по словам представителей Zend, повышает удобство создания кода.

Добавлен и новый движок для индексирования кодов и их поиска, движок базируется на Eclipse DLTK (Dynamic Languages Toolkit).


Читать дальше »

среда, 21 января 2009 г.

CSS переменные: реализация на PHP

Продолжаю тему переменных CSS. Простую реализацию для шаблонов XSLT я уже давал. Недавно нашел решение для PHP.

В нижеприведенном случае, CSS-переменные обрабатываются на стороне сервера. Меня это вполне устраивает. Более того -- я уже адаптировал этот способ для Ruby on Rails. Ну да не всё сразу.

Итак, CSS-SSC, что я понял примерно как CSS Server Side Constants”

Константы


Могут быть заданы как индивидуально:
@server constant constantName: constantValue;

так и в группе:
@server constants {
constantName1: constantValue;
constantName2: constantValue;
constantName3: constantValue;
}

Например, для такой записи CSS-SSC:
@server constants {
linkColor: #003366;
linkDecoration: underline;
}
a {color: linkColor; text-decoration: linkDecoration;}

Получим следующий CSS:
a {color: #003366; text-decoration: underline;}


Переменные


Переменные обрабатываются подобно константам, но из значение так же может передаваться через строку запроса:
sample.css?variableName=variableValue

Имена переменных начинаются со значка доллара ($).

Индивидуально:
@server variable $variableName: defaultVariableValue;

И всем табуном:
@server variables {
$variableName1: defaultVariableValue;
$variableName2: defaultVariableValue;
$variableName3: defaultVariableValue;
}


Пример CSS-SSC:
@server variable $bodyBgColor: #333;
body { background-color: $bodyBgColor; }

Даст такой CSS:
body { background-color: #333; }



Читать дальше »

вторник, 13 января 2009 г.

Загрузить файл PHP в строку

Небольшой пример, как загрузить PHP файл в переменную. Думаю, пригодится для AJAX рендеринга в духе Ruby on Rails.
page.replace_html "element_id", :partial => "file.rhtml"

В примере используются Output Control Functions с командой include().
<?php
$string = get_include_contents('somefile.php');

function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
return false;
}

?>

  • ob_start() -- Включает буферизацию вывода
  • ob_get_contents() -- Возвращает содержимое буфера вывода
  • ob_end_clean() -- Освобождает (очищает) буфер вывода и выключает буферизацию

Читать дальше »

пятница, 9 января 2009 г.

Поддержка PHP в среде Eclipse

EclipseПодключаемый модуль к оболочке Eclipse под названием Aptana PHP позволяет разрабатывать в этой открытой среде программы на PHP с поддержкой вспомогательных продуктов и технологий: AJAX, MySQL, JavaScript и т. д.
Пользователю доступны современные возможности развитых оболочек разработки — редактор с подсветкой синтаксиса, всевозможные подсказки и ускорители ввода, средства визуализации структуры проекта и кода, а также встроенный отладчик и веб-сервер для тестирования приложений. Имеется режим эмуляции браузеров различных типов. Среда также поддерживает развертывание итогового продукта на «облачных» серверах. Читать дальше »