Скругление углов на PHP / GD

Сегодня товарищ кинул ссылку на интересный скрипт, который позволяет округлять углы на php.
Полезная вещь. Вот код скрипта.

<?php
/**
* Углоскруглятель :)
*
* Sergey Fedotov <sergey89@gmail.com>
* Version: 1.1
*/

$filename = 'image.jpg';
$radius = 15;

/**
* Чем выше rate, тем лучше качество сглаживания и больше время обработки и
* потребление памяти.
*
* Оптимальный rate подбирается в зависимости от радиуса.
*/

$rate = 3;

$img = imagecreatefromstring(file_get_contents($filename));
imagealphablending($img, false);
imagesavealpha($img, true);

$width = imagesx($img);
$height = imagesy($img);

$rs_radius = $radius * $rate;
$rs_size = $rs_radius * 2;

$corner = imagecreatetruecolor($rs_size, $rs_size);
imagealphablending($corner, false);

$trans = imagecolorallocatealpha($corner, 255, 255, 255, 127);
imagefill($corner, 0, 0, $trans);

$positions = array(
array(0, 0, 0, 0),
array($rs_radius, 0, $width $radius, 0),
array($rs_radius, $rs_radius, $width $radius, $height $radius),
array(0, $rs_radius, 0, $height $radius),
);

foreach ($positions as $pos) {
imagecopyresampled($corner, $img, $pos[0], $pos[1], $pos[2], $pos[3], $rs_radius, $rs_radius, $radius, $radius);
}

$lx = $ly = 0;
$i = $rs_radius;
$y2 = $i;
$r_2 = $rs_radius * $rs_radius;

for (; $i <= $y2; $i++) {

$y = $i;
$x = sqrt($r_2 $y * $y);

$y += $rs_radius;
$x += $rs_radius;

imageline($corner, $x, $y, $rs_size, $y, $trans);
imageline($corner, 0, $y, $rs_size $x, $y, $trans);

$lx = $x;
$ly = $y;
}

foreach ($positions as $i => $pos) {
imagecopyresampled($img, $corner, $pos[2], $pos[3], $pos[0], $pos[1], $radius, $radius, $rs_radius, $rs_radius);
}

header(‘Content-Type: image/png’);
imagepng($img);

Шелл на PHP

Небольшая тулза на PHP+Ajax, которая позволяет выполнять shell команды.

Вот код:

<?php
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' )
{
if(!empty($_POST['command']))
{
exec($_POST['command'], $result);
if(is_array($result)) {
foreach($result as $str)
$res[] = htmlspecialchars($str);
$res = isset($res) ? implode("<br />", $res) : '';
} else {
$res = $result;
}
echo $res;
}
exit();
}
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Shell</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function clear(c) {
c.attr("value", "");
}
$(document).ready(function() {
var c = $("input[name='command']");
clear(c);
c.focus(function() {
$("span").hide();
});
c.blur(function() {
$("span").show();
});
c.keyup(function(event) {
if(event.keyCode == 13)
$.post('sh.php', { command: $(this).val() }, function(data) {
$("div").html(data);
clear(c);
});
});
});
</script>
<style type="text/css">
* {background: #000; border: 0; color: green; font: 62.5% Arial, Helvetica, sans-serif; width: 100%;}
body {font-size: 1.5em; margin: 0; padding: 0;}
input {background-color: #000; font-size: 1em; width: 80%;}
div {background: #000; font-size: 1em; height: 100%;min-height: 20px;width: 90%;}
strong {color: #fff;}
hr {color: #fff; background-color: #fff; height: 1px; margin-top: 0; width: 100%;}
blink {font-size: 1.5em;}
p {
background: #fff url(http://www.catb.org/~esr/hacker-emblem/glider.png) no-repeat top right;
display: block;
height: 55px;
right: 20px;
position: absolute;
width: 55px;
}
</style>
</head>
<body>
<?php system('hostname')?>&gt;<span><blink>_</blink></span>
<input name="command" />
<hr />
<p></p>
<div></div>
</body>
</html>

И снова fluxbox

После примерно полугода использования в качестве оконного менеджера XFCE4,
я все таки решил вернуться к старому доброму fluxbox, может это от того, что у меня
тяга ко всему простому и аскетичному, может от того что на еже fluxbox смотрится прикольний,
но так или иначе мне пришлось восстонавливать все настройки с нуля, собственно поэтому решил написать пост, чтобы
сохранились настройки, ну и может кому пригодиться, в конце поста представлен скриншот того, что получилось.

Для начала обнаружил, что после перехода у меня слетела возможность переключаться на русский язык.
Это показалось странным так как setxkbmap у меня запускался в .xsession, но как я понял после запуска fluxbox
любые команды прописанные в startup игнорируются, поэтому прописал

setxkbmap -layout us,ru -variant ,winkeys -option grp:caps_toggle,grp_led:scroll,terminate:ctrl_alt_bksp,compose:ralt
в файл .fluxbox/startup перед командой запуска fluxbox
exec fluxbox
Прописал так же в этом же файле запуск коньков
conky&

Туда же добавляем обои рабочего стола, закидываем обои куда-нибудь в .fluxbox/bg/ и прописываем путь к обоене. В качестве обоены я решил использовать няшку из манги с тату-логотипом арчилинукса %))
Например вот так:
fbsetbg -f bg/archMangaBabe.jpg
Название виртуальных столов в панели — «Рабочий стол <N>» смотрится уныло и слишком длинно, поэтому решил поправить название на D<N>, правится это в файле .fluxbox/init:
session.screen0.workspaceNames: D1,D2,D3,D4
Можно немного сэкономить место на экране и сделать автоскрытие тулбара
session.screen0.toolbar.autoHide: true
Так как экран на нетбуке маленький, то удобно когда в тулбаре показывается как можно больше открытых приложений, так что изменил ширину тулбара с 70 на 80

session.screen0.toolbar.widthPercent: 80
Редактим .fluxbox/menu и добавляем то что хотим видеть в меню, а так же убираем ненужные пункты, у меня получилось что-то вроде этого:

[begin] (Trinity)
[encoding] {UTF-8}
[exec] (Terminal) {terminal}
[separator]
[exec] (Mc) {mc}
[exec] (Thunar) {thunar}
[separator]
[exec] (Eclipse) {eclipse}
[separator]
[exec] (Firefox) {firefox}
[separator]
[exec] (Climm) {terminal -e climm}
[exec] (Skype) {skype}
[separator]
[exec] (Moc) {terminal -e mocp}
[exec] (Alsamixer) {terminal -e alsamixer}
[exec] (Alsa reload) {terminal -e sudo alsactl restore}
[separator]
[exec] (Gimp) {gimp}
[separator]
[submenu] (System Tools)
[exec] (top) {xterm}
[exec] (top) {xterm -e top}
[separator]
[end]
[submenu] (Fluxbox menu)
[config] (Configure)
[submenu] (System Styles) {Choose a style...}
[stylesdir] (/usr/share/fluxbox/styles)
[end]
[submenu] (User Styles) {Choose a style...}
[stylesdir] (~/.fluxbox/styles)
[end]
[workspaces] (Workspace List)
[commanddialog] (Fluxbox Command)
[reconfig] (Reload config)
[exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
[end]
[separator]
[exec] (Xlock) {xlock -mode blank}
[separator]
[restart] (Restart)
[exit] (Exit)
[endencoding]
[end]

Вот что получилось :)

 

 

Няшка Arch

 

Используйте fluxbox. Всем удачи!