phprfont - библиотека функций для вывода текста на картинки средствами GD

Игорёк

Новичок
phprfont - библиотека функций для вывода текста на картинки средствами GD

Я тут наваял библиотечку, думаю, что она будет полезна не мне одному.

http://phprfont.chat.ru

PHPRFONT - это библиотека функций на языке PHP, которая предназначена
для вывода текста растровыми шрифтами при рисовании графики средствами
модуля GD.

В модуле GD уже предусмотрена возможность вывода векторных шрифтов
FreeType, но, во-первых, не на каждом хостинге эта возможность
активирована, во-вторых, нет гарантии, что на разных хостингах будут
одни и те же шрифты, то есть могут возникнуть проблемы с переносом
скриптов. Кроме того, мне кажется, что растровые шрифты выглядят симпатичнее векторных.
 

Фанат

oncle terrible
Команда форума
Идея простая до гениальности.
поставлю ссылку в факе.
 

SiMM

Новичок
dos4gw имхо разумнее в отдельном архиве выкладывать. Ибо у многих он может уже быть.
 

Игорёк

Новичок
Несколько замечаний вдогонку.

1. При очень большом размере символов в системном шрифте (примерно больше 35 точек) возникают проблемы с генерацией png-файла, а именно - не прорисовываются несколько последних символов. Это связано с ограничениями Watcom'овской библиотеки чтения FON файлов, которая используется в программе GENRFONT. Тут я ничего исправить не могу, исходников на эту библиотеку у меня нет.

2. Набор шрифтов в системных файлах довольно бедный. Дополнительные FON-шрифты я получал из TTF-шрифтов, используя программу-конвертер SYSFON (я ее положил на своей странице http://phprfont.chat.ru/sysfon10.zip ). Эта программа старая и глючная, расчитана еще на 16-разрядную версию Windows. Но приспособиться можно, главное выбрать нужный шрифт и сразу его сгенерировать, не меняя ничего, кроме размера. Например, так я делал готический шрифт. Может быть, есть другие программы для создания FON-файлов, но я их не знаю.

3. Наклонные шрифты этим методом получаются плохо, и скорее всего вообще невозможно их задействовать.

4. В доках к программе SYSFON написано, что системные шрифты Windows защищены копирайтами, поэтому я не уверен, законно ли рисовать ими на своих картинках.
 

valyala

Новичок
Игорёк, попробуй разместить эту библиотеку в PEAR (http://pear.php.net).

Небольшое замечание по функции
PHP:
  // выгрузить фонт, освободить память
  function unloadfont( & $fid )
  {
     if (isset($fid['im']))  imagedestroy($fid['im']);
     if (isset($fid['imt'])) imagedestroy($fid['imt']);
     unset($fid);
  }
unset($fid) - лишнее, т.к. оно всего лишь уменьшает счетчик ссылок на объект, на который указывает $fid. Пример:
PHP:
function f(&$a) { unset($a); }
$i = 10;
f($i); // пытаемся "удалить" $i
echo '$i = ', $i, "\n"; // не тут-то было :)
unset($i); // удаляем $i
echo 'Переменная $i ', (isset($i) ? 'определена' : 'не определена'), "\n";
Поэтому вместо
PHP:
unloadfont($fid);
проще написать
PHP:
unset($fid);
 

Игорёк

Новичок
Автор оригинала: valyala
Игорёк, попробуй разместить эту библиотеку в PEAR (http://pear.php.net).

Небольшое замечание по функции
PHP:
// выгрузить фонт, освободить память
  function unloadfont( & $fid )
  {
     if (isset($fid['im']))  imagedestroy($fid['im']);
     if (isset($fid['imt'])) imagedestroy($fid['imt']);
     unset($fid);
  }
unset($fid) - лишнее, т.к. оно всего лишь уменьшает счетчик ссылок на объект, на который указывает $fid. Пример:
PHP:
function f(&$a) { unset($a); }
$i = 10;
f($i); // пытаемся "удалить" $i
echo '$i = ', $i, "\n"; // не тут-то было :)
unset($i); // удаляем $i
echo 'Переменная $i ', (isset($i) ? 'определена' : 'не определена'), "\n";
Поэтому вместо
PHP:
unloadfont($fid);
проще написать
PHP:
unset($fid);
По unset внутри функции понятно, можно его удалить. Я плохо знаю тонкости PHP, не сильно углублялся в это дело. А вот почему unloadfont можно заменять на unset, мне непонятно: как тогда будут удаляться изображения $fid['im'] $fid['imt']?

Что касается PEAR: я слышал, что поместить туда что-либо очень проблематично. Если кто-нибудь этим займётся, я не буду против - но самому мне лень. Придётся написать нормальную инструкцию на английском и т.д. Только у меня условие - оставить в обновленном пакете мой readme (вдобавок к новому написанному кем-то другим, если он будет).
 

fixxxer

К.О.
Партнер клуба
Чтобы поместить в PEAR, нужно привести код к стандартному для PEAR виду.

Впрочем, возможно, лучше не помещать: я, например, (да и знаю многих, кто придерживается такого же мнения) стараюсь не использовать из pear ничего, кроме нескольких действительно нормально написанных библиотек. 90% PEAR - увы, ламерские поделки, и, что хуже, с постоянным нарушением backward compatibility от версии к версии.
 

valyala

Новичок
А вот почему unloadfont можно заменять на unset, мне непонятно: как тогда будут удаляться изображения $fid['im'] $fid['imt']?
Все элементы ассоциативного массива $fid удаляются при удалении этого массива. Это значит, что при необходимости будет вызван деструктор для картинок $fid['im'] и $fid['imt'], что аналогично явному вызову функции imagedestroy().
 
Сверху