// Когда аргументы и их количество известно заранее
// Такой вариант мне кажется самым читабельным
// Оборачивать в фигурные скобки не обязательно
// Я это делаю всегда для того, чтобы было видно, что вызов динамический
$this->obj->{$function}($arg1, $arg2)
// Подходит как раз для описанного случая
// Аргументы могут быть любыми и передаются в виде массива
call_user_func_array([$this->obj, $function], [$arg1, $arg2]);
function wordWrapAnnotation($image, $draw, $text, $maxWidth)
{
$words = preg_split('%\s%', $text, -1, PREG_SPLIT_NO_EMPTY);
$lines = array();
$i = 0;
$lineHeight = 0;
while (count($words) > 0)
{
$metrics = $image->queryFontMetrics($draw, implode(' ', array_slice($words, 0, ++$i)));
$lineHeight = max($metrics['textHeight'], $lineHeight);
if ($metrics['textWidth'] > $maxWidth or count($words) < $i)
{
$lines[] = implode(' ', array_slice($words, 0, --$i));
$words = array_slice($words, $i);
$i = 0;
}
}
return array($lines, $lineHeight);
}
function createImageFromText($text){
$maxWidth = 900;
$font = 'BookmanOld.ttf';
$fontSize = 34;
$filename = 'res.png';
$padding = 10;
/* Create a new Imagick object */
$image = new Imagick();
$image->newImage(1, 1, 'white'); // none = transparent
$image->setImageFormat("png");
/* Create an ImagickDraw object */
$draw = new ImagickDraw();
/* Set the font */
$draw->setFont($font);
$draw->setFontSize($fontSize);
list($lines, $lineHeight) = wordWrapAnnotation($image, $draw, $text, $maxWidth);
$image->newImage($maxWidth+$padding, $padding+ count($lines)*$lineHeight, 'none'); // none = transparent
for($i = 0; $i < count($lines); $i++)
$image->annotateImage($draw, $padding, + ($i+1)*$lineHeight, 0, $lines[$i]);
//$image->writeImage($filename);
return $image;
}
createImageFromText('бла бла бла текст абракадабрматьеезаногу')->writeImage('res.png');
<?php
function decode_char($c)
{
$a1 = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "W", "G", "X", "M", "H", "R", "U", "Z", "I", "D", "=", "N", "Q", "V", "B", "L");
$a2 = array("b", "z", "a", "c", "l", "m", "e", "p", "s", "J", "x", "d", "f", "t", "i", "o", "Y", "k", "n", "g", "r", "y", "T", "w", "u", "v");
$result = $c;
for($j = 0; $j < count($a1); $j++) {
if ($c == $a1[$j][0]) {
$result = $a2[$j][0];
break;
}
if ($c == $a2[$j][0]) {
$result = $a1[$j][0];
break;
}
}
return $result;
}
function encode_str($s)
{
$s = base64_encode($s);
$result = '';
for($i = 0; $i < strlen($s); $i++) {
$result .= decode_char($s[$i]);
}
return $result;
}
function decode_str($s)
{
$r = '';
for ($i = 0; $i < strlen($s); $i++){
$r .= decode_char($s[$i]);
}
$r = base64_decode($r);
return $r;
}
$a = encode_str('test');
echo($a."\n");
echo(decode_str($a)."\n");
var radiobutton={
radios: document.querySelectorAll('input[type="radio"]'),
getSelect: function(event) {
var el=event.target,
val=el.value;
el.parentNode.parentNode.querySelectorAll('span')[0].textContent=val;
},
init: function() {
Array.prototype.forEach.call(this.radios, function (el, i) {
el.addEventListener('click', this.getSelect);
}.bind(this));
}
};
radiobutton.init();