Функции Язык программирования PHP

SWFBitmap

(PHP 4 >= 4.0.5)

SWFBitmap - загружает Bitmap-объект.

Описание

new swfbitmap (string filename [, int alphafilename])

Предупреждение!

Эта функция - ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

swfbitmap() создаёт новый SWFBitmap-объект из Jpeg или DBL файла filename.

alphafilename указывает на MSK-файл, используемый как альфа-маска для Jpeg-изображения.

Примечание: мы можем работать только с baseline (frame 0) jpegs, неоптимизированными baseline или progressive scan jpegs!

SWFBitmap имеет следующие методы: swfbitmap->getwidth() и swfbitmap->getheight().

Вы не можете импортировать png-изображения напрямую, а должны использовать утилиту png2dbl для создания dbl-файла ("define bits lossless") из png. Смысл этого в том, что нам не нужна зависимость от png-библиотеки в ming - autoconf должен разрешить это, но это ещё не готово.
Пример 1. Импортирование PNG-файлов
<?php $s = new SWFShape(); $f = $s->addFill(new SWFBitmap("png.dbl")); 
$s->setRightFill($f); $s->drawLine(32, 0); $s->drawLine(0, 32); $s->drawLine(-32, 
0); $s->drawLine(0, -32); $m = new SWFMovie(); $m->setDimension(32, 32); 
$m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output(); 
?>

И вы можете поместить alpha-маску на jpeg fill.
Пример 2. swfbitmap()
<?php 
$s = new SWFShape(); // .msk файл, сгенерированный утилитой "gif2mask" $f = $s->addFill(new 
SWFBitmap("alphafill.jpg", "alphafill.msk")); $s->setRightFill($f); $s->drawLine(640, 
0); $s->drawLine(0, 480); $s->drawLine(-640, 0); $s->drawLine(0, -480); 
$c = new SWFShape(); $c->setRightFill($c->addFill(0x99, 0x99, 0x99)); 
$c->drawLine(40, 0); $c->drawLine(0, 40); $c->drawLine(-40, 0); $c->drawLine(0, 
-40); $m = new SWFMovie(); $m->setDimension(640, 480); $m->setBackground(0xcc, 
0xcc, 0xcc); // рисует checkerboard-фон for($y=0; $y<480; $y+=40) { for($x=0; 
$x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); } $y+=40; 
for($x=40; $x<640; $x+=80) { $i = $m->add($c); $i->moveTo($x, $y); 
} } $m->add($s); header('Content-type: application/x-shockwave-flash'); $m->output(); 
?>


Назад Оглавление Вперёд
SWFBitmap->getWidth Вверх swfbutton_keypress

Производительность

Некоторые элементы, которые могут появляться в патэрнах, работают более эффективно, чем другие. Более эффективно использовать класс символов, такой как [aeiou], нежели набор альтернатив, такой как (a|e|i|o|u). В целом, более простая конструкция является более эффективной. Книга Jeffrey Friedl'а содержит большую дискуссию об оптимизации регулярных выражений для повышения производительности.

Если патэрн начинается с .* и установлена опция PCRE_DOTALL, патэрн неявно заякоривается PCRE, поскольку он может совпасть только в начале строки-субъекта. Однако, если PCRE_DOTALL не установлена, PCRE не может выполнить эту оптимизацию, поскольку метасимвол . не совпадает тогда с символом новой строки/newline, и, если строку-субъект содержит newlines, патэрн может совпасть с символом, идущим непосредственно после одного из символов новой строки, вместо того чтобы совпадать только в самом начале. Например, патэрн

(.*) second

совпадает в субъекте "first\nand second" (где \n это символ новой строки) с первой захваченной подстрокой "and". Для этого PCRE пытается совпадать в начале после каждого символа новой строки в субъекте.

Если вы используете такой патэрн со строками-субъектами, которые не содержат newlines, наилучшая производительность будет достигнута установкой PCRE_DOTALL, или если начать патэрн с ^.* для явного указания заякоривания. Это удержит PCRE от необходимости сканировать субъект в поисках newline для рестарта с него.

Избегайте создания патэрнов, которые содержат бесконечные повторения. Они могут занять много времени, если применить их к строке, которая не содержит совпадений. Рассмотрим фрагмент патэрна

(a+)*