Винтажные фильтры – обновление

Обновилась коллекция винтажных фильтров для GIMP: добавлены три новых фильтра (Amaro, Brannan, Toaster), а также поддержка виньетирования. Все фильтры теперь объединены в один: при запуске скрипта выводится диалоговое окно с выбором фильтра и другими опциями.

Скачать можно здесь.

GScript – скриптовый язык для D

В игровом движке трудно обойтись без какого-либо способа динамического задания логики и поведения объектов, поэтому я решил написать для Atrium скриптовый язык. Это очень простой императивный язык с динамической типизацией и (пока) всего одним внутренним типом – float.

Что уже реализовано:

  • Модульная система, как в D;
  • Функции (есть поддержка рекурсии);
  • Локальные переменные;
  • Передача аргументов по значению и по ссылке. Что интересно, передача по ссылке возможна в любую функцию, так как ссылочный тип указывается при конкретном вызове функции, а не при ее объявлении;
  • Условный переход if…else;
  • Цикл while;
  • Возможность расширять язык собственными функциями на D.

Кодогенератор и виртуальная машина к языку пока находятся на стадии прототипа (реализация рабочая, но далека от оптимальной).

Пример кода на GScript:

import myPackage.myModule;

func main()
{
var x = 10;
var a, b;

a = x * 2 + 1;

while(a > 0)
{
a = a - 1;
b = b + 1;
}

writeln(x, a, b);
}

Исходники проекта доступны на GitHub:
https://github.com/gecko0307/gscript
Примеры скриптов

Приветствуются предлолжения и пожелания – какую функциональность вы бы хотели видеть в языке (оговорка: поддержка ООП в ближайшее время не планируется).

Thumbnailer для GIMP

Терпеть не могу рутинную, механическую работу! Сейчас вот пришлось вручную изготовлять миниатюры изображений произвольного разрешения, центрируя и уменьшая их до квадрата размером 128х128. Не стал долго мучиться, написал для GIMP скрипт на Python – и решил сразу выложить, вдруг кому-нибудь тоже пригодится:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *

def python_fu_thumbnailer(image, layer, width, height):
origWidth = pdb.gimp_image_width(image)
origHeight = pdb.gimp_image_height(image)
newWidth = origWidth
newHeight = origHeight

newX = 0
newY = 0

if (origWidth > origHeight):
newWidth = origHeight
newX = -(origWidth/2 - newWidth/2)
elif (origWidth < origHeight):
newHeight = origWidth
newY = -(origHeight/2 - newHeight/2)

pdb.gimp_layer_resize(layer, newWidth, newHeight, newX, newY)
pdb.gimp_image_resize_to_layers(image)

pdb.gimp_context_set_interpolation(INTERPOLATION_LANCZOS)
pdb.gimp_image_scale(image, width, height)

register(
"python-fu-thumbnailer",
"Thumbnailer",
"Thumbnailer 0.1",
"Timur Gafarov",
"(c) Copyright 2013 Timur Gafarov",
"09-02-2013",
"Make a thumbnail...",
"RGB*, GRAY*",
[
(PF_IMAGE, "image", "Target image", None),
(PF_DRAWABLE, "drawable", "Target layer", None),
(PF_SPINNER, "width", "Width:", 128, (1, 262144, 1)),
(PF_SPINNER, "height", "Height:", 128, (1, 262144, 1))
],
[],
python_fu_thumbnailer,
menu = "/Python-Fu/Transform")

main()

Тестировал с GIMP 2.7.4 и Python 2.7.1.