GIMP фильтр в C#
Я весь день пытаюсь запустить этот код, но шансов нет. Я хотел бы выполнить фильтр GIMP для изображения и сохранить его позже по определенному пути. С этим кодом:
string choosenFile = "D:\\here\\is\\the\\image";
string gimpFile = "D:\\here\\is\\my\\gimp exe";
void seamlessFilter() {
try {
if (!string.IsNullOrEmpty(choosenFile)) {
string a = @"-b ""(script-fu-tile \"""
+ choosenFile
+ "100 100 0 TRUE 70"
+ @")"" -b ""(gimp-quit 0)""";
string result = ExecuteCommandSync(a);
Texture2D newTex = loadImage (new Vector2(200, 200), Path.GetFullPath(choosenFile));
newTex = null;
} else {
UnityEngine.Debug.Log("Please select a image");
}
} catch (Exception ex){
UnityEngine.Debug.Log (ex.ToString ());
}
}
public string ExecuteCommandSync(string command) {
ProcessStartInfo processStartInfo = new ProcessStartInfo (gimpFile, command);
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
Process process = new Process ();
process.StartInfo = processStartInfo;
process.Start ();
StreamReader reader = process.StandardOutput;
string result = reader.ReadToEnd ();
Console.WriteLine (result);
return result;
}
Я пытаюсь выполнить фильтр, но каждый раз получаю сообщение об ошибке, что строка не может быть прочитана. Вот.scm:
`
(define (script-fu-tile img
drawable
blend-x
blend-y
overlap
square)
(let*
(
(sel-float1 0)
(sel-float2 0)
(sel-float3 0)
(sel-float4 0)
(high-pass-layer 0)
(yoffset 0)
(img-w (/ (car (gimp-image-width img)) 2))
(img-h (/ (car (gimp-image-height img)) 2))
;(newimg (car (gimp-image-new (- (car (gimp-image-width img)) blend-x)
(- (car (gimp-image-height img)) blend-y) RGB)))
)
(if (= square 1)
(set! yoffset (+ (- (* (- img-w img-h) 2) (- blend-x blend-y)) overlap))
(set! yoffset overlap)
)
(gimp-undo-push-group-start img)
(gimp-rect-select img 0 0 img-w img-h CHANNEL-OP-REPLACE FALSE 0)
(gimp-edit-copy drawable)
(set! sel-float1 (car (gimp-edit-paste drawable FALSE)))
(gimp-floating-sel-to-layer sel-float1)
(gimp-layer-translate sel-float1 (- (- img-w blend-x) yoffset) (- (- img-h blend-y) overlap))
(gimp-rect-select img img-w 0 img-w img-h CHANNEL-OP-REPLACE FALSE 0)
(gimp-edit-copy drawable)
(set! sel-float2 (car (gimp-edit-paste drawable FALSE)))
(gimp-floating-sel-to-layer sel-float2)
(gimp-layer-translate sel-float2 (- 0 img-w) (- (- img-h blend-y) overlap))
(gimp-rect-select img 0 img-h img-w img-h CHANNEL-OP-REPLACE FALSE 0)
(gimp-edit-copy drawable)
(set! sel-float3 (car (gimp-edit-paste drawable FALSE)))
(gimp-floating-sel-to-layer sel-float3)
(gimp-layer-translate sel-float3 (- (- img-w blend-x) yoffset) (- 0 img-h))
(gimp-rect-select img img-w img-h img-w img-h CHANNEL-OP-REPLACE FALSE 0)
(gimp-edit-copy drawable)
(set! sel-float4 (car (gimp-edit-paste drawable FALSE)))
(gimp-floating-sel-to-layer sel-float4)
(gimp-layer-translate sel-float4 (- 0 img-w) (- 0 img-h))
(gimp-rect-select img (- 0 blend-x) (- 0 blend-x) (+ img-w (/ blend-x 2)) (+ img-h (+ blend-x blend-x)) CHANNEL-OP-REPLACE TRUE (/ blend-x 1.68))
(gimp-selection-invert img)
(gimp-edit-clear sel-float4)
(gimp-rect-select img (- 0 blend-y) (- 0 blend-y) (+ img-w (+ blend-y blend-y)) (+ img-h (/ blend-y 2)) CHANNEL-OP-REPLACE TRUE (/ blend-y 1.68))
(gimp-selection-invert img)
(gimp-edit-clear sel-float4)
(gimp-rect-select img (- (- img-w (- blend-x blend-y)) yoffset) (- 0 blend-y) (+ img-w (+ blend-y blend-y)) (+ img-h (/ blend-y 2)) CHANNEL-OP-REPLACE TRUE (/ blend-y 1.68))
(gimp-selection-invert img)
(gimp-edit-clear sel-float3)
(gimp-rect-select img (- 0 blend-x) (- (- img-h (+ blend-x blend-y)) overlap) (+ img-w (/ blend-x 2)) (+ img-h (+ blend-x blend-x)) CHANNEL-OP-REPLACE TRUE (/ blend-x 1.68))
(gimp-selection-invert img)
(gimp-edit-clear sel-float2)
(gimp-selection-none img)
;(gimp-layer-delete drawable)
(gimp-image-crop img (- (- (* img-w 2) blend-x) yoffset) (- (- (* img-h 2) blend-y) overlap) 0 0)
; Complete the undo group
(gimp-undo-push-group-end img)
; Flush output
(gimp-displays-flush)
)
)
(script-fu-register "script-fu-tile"
"<Image>/Filters/Map/Tileable..."
"Make seamless texture"
"Pavel aka RPG Roshchin <rpg89@post.ru>"
"Pavel aka RPG Roshchin"
"2011"
"RGB*, GRAY*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Layer to blur" 0
SF-ADJUSTMENT "Blend x" '(100 0 1000 1 10 0 0)
SF-ADJUSTMENT "Blend y" '(100 0 1000 1 10 0 0)
SF-ADJUSTMENT "Overlap" '(0 0 1000 1 10 0 0)
SF-TOGGLE
"Make square texture" TRUE
;SF-ADJUSTMENT "Homogenize brightness (%)" '(70 0 100 1 10 0 0)
)`
Я был бы так рад, если кто-нибудь мог помочь, потому что я отчаивался. Спасибо!
2 ответа
Я понял это сам - проблема была в том, что первый аргумент img ожидает объект, но я написал строку в качестве первого аргумента. Поэтому я отредактировал свой скрипт scm, чтобы обернуть объект в строку, и он работает хорошо.
Может быть, пойти и посмотреть здесь и попробовать этот метод
Но судя по всему:
string a = @"-b ""(script-fu-tile \"""
+ choosenFile
+ "100 100 0 TRUE 70"
+ @")"" -b ""(gimp-quit 0)""";
Должно выглядеть больше так:
string a = @"gimp-2.6.exe -i -b ""(script-fu-tile \""" +
choosenFile + @"\""0 100 100 0 TRUE 70)"" -b ""(gimp-quit 0)""";
Или по существу:
string draw = "0";
string blendx = "100";
string blendy = "100";
string overlap = "0";
string sqrText = "TRUE";
string adjBright = "70";
string a = @"gimp-2.6.exe -i -b ""(simple-unsharp-mask \""" +
path + @"\"" " + draw + " " + blendx + " " + blendy + " " + overlap + " "+ sqrText + " " + adjBright +
@")"" -b ""(gimp-quit 0)""";
Судя по тому, что ошибка говорит о том, что вы предоставили, есть проблема с вышеуказанной строкой в вашем коде. Дайте эти несколько попыток и прокомментируйте мне.