Photoshop: Умный ресайз фотографий

21 июня, 2009

На сайте замечательного фотографа Андрея Разумовского нашел интересный способ уменьшения фотографий для публикации их на веб-сайте. В статье «Уменьшаем изображение корректно» довольно подробно описаны все действия производимые в программе Adobe Photoshop.

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

Например для публикации фотографии в социальной сети vkontakte.ru фотография должна быть по ширине ровно 604 пикселя, либо 480 пикселей по высоте, если фотография в портретной ориентации. Записывать много разных макросов для подготовки фотографий к разным сайтам достаточно утомительно, да и запутаться в них можно очень легко.

Мало кто знает, что автоматизировать работу Photoshop можно не только макросами, но и с помощью более гибкого и эффективного скриптового языка JavaScript. С помощью JavaScript мы имеем полный доступ ко всем функциям и параметрам Photoshop, а так же можем писать алгоритмы любой сложности используя циклы, условия и математические фукции, чего никогда не сможем добиться с помощью макросов.

Я попытался написать программу на JavaScript, которая производит уменьшение фотографии по алгоритму Андрея Разумовского. Пока это только набросок, демонстрирующий алгоритм работы. Для повседневного использования программу нужно расширить диалогом, где можно задать размеры фотографии, которые нам нужно получить.

Вот код программы, его нужно скопировать и сохранить в отдельном файле с расширением jsx.

$.localize = true;

var target_size = 640;

var tmp_target_size = target_size * 2;

var startDisplayDialogs = app.displayDialogs;
app.displayDialogs = DialogModes.NO;

var startUnit = preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;

function sharpenLayer(opacity_value) {
	docRef.selection.selectAll();
	docRef.selection.copy();

	var layerRef = docRef.artLayers.add();
	docRef.paste();
	layerRef.applySharpen();
	layerRef.opacity = opacity_value;

	docRef.flatten();
	return true;
}

if (0 != app.documents.length) {
	var docRef = app.activeDocument;
	docRef.flatten();

	var src_width  = docRef.width;
	var src_height = docRef.height;

    /* первый этап */
	if (src_width > src_height) {
		var new_width = tmp_target_size;
		var new_height = Math.floor(tmp_target_size * (src_height / src_width));
	} else {
		var new_width = Math.floor(tmp_target_size * (src_width / src_height));
		var new_height = tmp_target_size;
	}

	docRef.resizeImage(new_width, new_height, docRef.resolution, ResampleMethod.BICUBIC);
	sharpenLayer(70);

    /* второй этап */
	if (src_width > src_height) {
		var new_width = target_size;
		var new_height = Math.floor(target_size * (src_height / src_width));
	} else {
		var new_width = Math.floor(target_size * (src_width / src_height));
		var new_height = target_size;
	}

	docRef.resizeImage(new_width, new_height, docRef.resolution, ResampleMethod.BICUBIC);
	sharpenLayer(50);
}
app.preferences.rulerUnits = startUnit;
app.displayDialogs = startDisplayDialogs;

В программе определяется ориентация фотографии и большей стороне задаётся размер указанный в переменной target_size.

После того как вы открыли исходную фотографию в Photoshop запустите скрипт командой из меню File > Scripts > Browse... или нажатием комбинации клавиш Alt+F12. Программа протестирована под версию Adobe Photoshop CS3 и выше.

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

© 2009, Дмитрий Швалёв — фотограф, веб-технолог. jour.me

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

При перепечатке материала ссылка на оригинальную статью «Photoshop: Умный ресайз фотографий» от 21 июня, 2009 обязательна!

По вопросам коммерческого использования вы можете связаться со мной.

Оставить комментарий:

все поля обязательны для заполнения

Защита от спама