LINUX.ORG.RU
ФорумTalks

Сила гимпа в скрипт-фу


0

0

Ниже пакетная обработка изображений (ваял пару минут). Что может быть проще?


(define (resize-all pattern)
	(let*(
	    (filelist (cadr (file-glob pattern 1)))
	)
	
	(while (not (null? filelist))
	    (let*(
		(filename (car filelist))
                (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
                (drawable (car (gimp-image-get-active-layer image)))
		(image-h 0)
		(image-w 0)
		(scale 1.0)
		(min 100)
	    )
	    (set! image-h (car (gimp-image-height image)))
	    (set! image-w (car (gimp-image-width image)))

	    (plug-in-unsharp-mask RUN-NONINTERACTIVE image drawable 5.0 0.5 0)

	    (set! image-h (- image-h 30))
	    (gimp-image-resize image image-w image-h 0 0)
	    (gimp-layer-resize-to-image-size drawable)
	
	    (if (< image-w image-h)
		(cond (
		    (set! scale (/ image-w min)) 
		    (set! image-w min) 
		    (set! image-h (/ image-h scale))
		))
		(cond (
		    (set! scale (/ image-h min)) 
		    (set! image-h min) 
		    (set! image-w (/ image-w scale))
		))
	    )

	    (gimp-image-scale image image-w image-h)
	    (gimp-layer-scale drawable image-w image-h FALSE)
	
	
	    
	    (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
	    (gimp-image-delete image)
	    )
    	    (set! filelist (cdr filelist))
	)
	)
)
★★★★★

Какой то у вас странный стиль написания :) Хотя, конечно, главное — чтобы работало.

А этот скрипт в емаксе можно писать, чтобы REPL с GIMP-ом был интегрирован? Если можно — тогда вообще страшная сила.

Legioner ★★★★★
()

Нифига не понял....

anonymous
()
Ответ на: комментарий от anonymous

+1, для такой задачи маджика бы хватило

anonymous
()

Я правильно понимаю, что то, что ты тут вытворяешь - это

mogrify -thumbnail 100x100 $imageList

?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

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

soomrack ★★★★★
() автор топика
Ответ на: комментарий от soomrack

Отрезание полоски заметил. Тогда

mogrify -gravity South -chop @x30+0+0 -thumbnail 100x100 $imageList

Фильтр не заметил.

> масштаб берется по наименьшей грани, она уменьшеается до 100, вторая -- на соответствующую величину.

Именно.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

фильтр: (plug-in-unsharp-mask RUN-NONINTERACTIVE image drawable 5.0 0.5 0)

масшабирование: в итоге у меня может получится картинка размером 100х150

soomrack ★★★★★
() автор топика
Ответ на: комментарий от soomrack

> в итоге у меня может получится картинка размером 100х150

А, блин, тормоз.

mogrify -unsharp 5x1+0.5+0 -gravity South -chop @x30+0+0 -thumbnail 100x100^ $imageList

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.