| |
ример, задачи "поставить слэш
перед всеми кавычками в строке" и "заменить в строке все кавычки на ""
мож-
но и нужно решать при помощи str_replace(), а не ereg_Replace() (это сущест-
венно — раз в 20 — повысит быстродействие). Не забывайте, что регулярное выра-
жение — некоторого рода "насилие" над компьютером, принуждение делать нечто
такое, для чего он мало приспособлен. Этим объясняется медлительность
механизмов
обработки регулярных выражений, экспоненциально возрастающая с ростом сложно-
сти шаблона.
Глава 23
Работа с изображениями
Как мы знаем, одним из самых важных достижений WWW по сравнению со всеми
остальными службами Интернета стала возможность представления в браузерах
пользователей мультимедиа-информации, а не только "сухого" текста. Основной
объ-
ем этой информации приходится, конечно же, на изображения.
Разумеется, было бы довольно расточительно хранить и передавать все рисунки в
обыкновенном растровом формате (наподобие BMP), тем более, что современные
алгоритмы сжатия позволяют упаковывать такого рода данные в сотни и более раз
эффективней. Чаще всего для хранения изображений используются три формата сжа-
тия с перечисленными ниже свойствами.
r JPEG. Идеален для фотографий, но сжатие изображения происходит с потерями
качества, так что этот формат совершенно не подходит для хранения различных
диаграмм и графиков.
r GIF. Позволяет достичь довольно хорошего соотношения размер/качество, в то же
время не искажая изображение; применяется в основном для хранения небольших
точечных рисунков и диаграмм.
r PNG. Сочетает в себе хорошие стороны как JPEG, так и GIF, но в настоящий мо-
мент ему почему-то не выражают особого доверия — скорее, по историческим
причинам, из-за нежелания отказываться от GIF и т. д.
В последнее время GIF все более вытесняется форматом PNG, что связано в первую
очередь с окончанием действия бесплатной лицензии изобретателя на его использо-
вание. К сожалению, для небольших изображений GIF все еще остается самым опти-
мальным форматом, оставляя позади (иногда далеко позади) PNG.
Зачем может понадобиться в Web-программировании работа с изображениями? Разве
это не работа дизайнера?
В большинстве случаев это действительно так. Однако есть и исключения, например,
графические счетчики (автоматически создаваемые картинки с отображаемым поверх
числом, которое увеличивается при каждом "заходе" пользователя на страницу),
или
же графики, которые пользователь может строить в реальном времени — скажем,
диаграммы сбыта продукции или снижения цен на комплектующие. Все эти прило-
жения требуют как минимум умения генерировать изображения "на лету", причем с
довольно большой скоростью. Чтобы этого добиться на PHP, можно применить два
способа: задействовать какую-нибудь внешнюю утилиту для формирования изобра-
Глава 23. Работа с изображениями 315
жения (например, известную программу fly), или же воспользоваться встроенными
функциями PHP для работы с графикой. Оба способа имеют как достоинства, так и
недостатки, но, пожалуй, недостатков меньше у второго метода, так что им-то мы
и
займемся в этой главе.
С недавнего времени все программные продукты, которые умели формировать изо-
бражения в формате GIF, переориентируются на PNG. В частности, не так давно
ком-
пания, поддерживающая библиотеку GD для работы с GIF-изображениями, перепи-
сала ее код с учетом формата PNG. Так как PHP использует эту библиотеку, то
поддержка GIF автоматически исключилась и из него. К счастью, в Интернете все
еще можно найти старые версии GD с поддержкой GIF и, таким образом, настроить
PHP для работы с этим форматом, но задумайтесь: стоит ли теперь применять GIF,
если весь мир вполне успешно переходит на PNG, тем более, что его поддерживают
практически все современные браузеры (четвертой версии) — а это 98% от исполь-
зуемого их числа...
Универсальная функция
GetImageSize()
Что же, работать с картинками приходится часто — гораздо чаще, чем может пока-
заться на первый взгляд. Среди наиболее распространенных операций можно особо
выделить одну — определение размера рисунка. Чтобы сделать программистам
"жизнь раем", разработчики PHP встроили в него функцию, которая работ
|
|