2016-03-03 2 views
0

Я использовал NativeProcess для запуска моего .cmd-файла, чтобы использовать преобразование Imagemagick в Windows.use as3 NativeProcess для запуска windows cmd

ЦМД является

convert -resize 1%x2% 3% 4% 

На моем компьютере, он выглядел нормально. Но на каком-то другом компьютере ошибка выглядела так, будто «-resize» был искажен.

я изменил ЦМД

convert 1% 2%x3% 4% 5% 

, но на каком-то компьютере, он по-прежнему есть ошибка.

Это то, что выход воздуха UTF-8 и окна CMD используют Unicode?

Как его использовать, это не приведет к ошибке?

мой код

private var mProcess:NativeProcess; 
private function convertImgToTargetPng(filePath:String,resultFilePath:String,width:Number,height:Number,scale:Number=1):void 
{ 
    var convertFile:File = File.applicationDirectory.resolvePath("script").resolvePath("convert.cmd"); 
    var nativeProcessStartupInfo = new NativeProcessStartupInfo(); 
    nativeProcessStartupInfo.executable = convertFile; 
    nativeProcessStartupInfo.workingDirectory = File.userDirectory; 

    var processArgs:Vector.<String> = new Vector.<String>(); 
    processArgs.push("-resize"); 
    processArgs.push(width*scale); 
    processArgs.push(height*scale); 
    processArgs.push(filePath); 
    processArgs.push(resultFilePath); 
    nativeProcessStartupInfo.arguments = processArgs; 
    mProcess = new NativeProcess(); 
    mProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onConvertErrorHandler); 
    mProcess.addEventListener(NativeProcessExitEvent.EXIT, onConvertExitHandler); 
    try 
    { 
     mProcess.start(nativeProcessStartupInfo); 
    } 
    catch (e : Error) 
    { 
     Alert.show("convert failed: " + e.message); 
    } 

} 

private function onConvertErrorHandler(event : ProgressEvent):void 
{ 
    var data:String = mProcess.standardError.readUTFBytes(mProcess.standardError.bytesAvailable); 
    Alert.show("convert error :" + data); 
} 

private function onConvertExitHandler(event : NativeProcessExitEvent):void 
{ 
    mProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA, onConvertErrorHandler); 
    mProcess.removeEventListener(NativeProcessExitEvent.EXIT, onConvertExitHandler); 

    Alert.show("convert success"); 
} 
+0

Показать AS3 код, как вы настройки аргументы для вашего ** NativeProcess **. Обычно делайте что-то вроде: 'args.push ('- resize', '640x480', 'myOption3', 'myOption4')' замените 640x480 своими номерами. Почему у вас есть «1% x2%»? Являются ли эти ссылки на некоторые другие переменные? Покажите вещи, которые нам нужны, чтобы правильно ответить –

+0

проверить мой ответ. У меня нет изображения для тестирования, но оно должно быть полезно для результата. –

ответ

0

непроверенная, но вы можете попробовать ...

Сделайте измененный файл CMD, который выглядит как: convert 1% 2% 3% 4%

и обновить раздел AS3 кода, чтобы выглядеть следующим образом ...

var processArgs:Vector.<String> = new Vector.<String>(); 
    processArgs.push("-resize"); 

    processArgs.push(String (String(width*scale) + "x" + String(height*scale))); 

    processArgs.push(filePath); 

    processArgs.push(resultFilePath); 

Позвольте мне теперь, как это происходит.

Также вместо CMD- файла, почему бы просто не запустить процесс с Convert.exe сам файл? :
Если convert.exe находится здесь: C: \ Program Files \ ImageMagick \ convert.exe
Затем используйте расположение путь в AS3 кода, c:\\program files\\imagemagick\\convert.exe

private function convertImgToTargetPng(filePath:String,resultFilePath:String,width:Number,height:Number,scale:Number=1):void 
{ 
    //# Use your location of convert.exe 
    var convertFile : File = new File("C:\\imageMagick\\converter.exe"); 

    if (convertFile.exists) //# If found in your location 
    { 
     var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); //vc 
     nativeProcessStartupInfo.executable = convertFile; 
     nativeProcessStartupInfo.workingDirectory = File.userDirectory; 

     var processArgs:Vector.<String> = new Vector.<String>(); 
     processArgs.push("-resize"); 
     processArgs.push(String (String(width*scale) + "x" + String(height*scale))); 
     processArgs.push(filePath); 
     processArgs.push(resultFilePath); 

     nativeProcessStartupInfo.arguments = processArgs; 
     mProcess = new NativeProcess(); 
     mProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onConvertErrorHandler); 
     mProcess.addEventListener(NativeProcessExitEvent.EXIT, onConvertExitHandler); 

     try { mProcess.start(nativeProcessStartupInfo); } 
     catch (e : Error) 
     { Alert.show("convert failed: " + e.message); } 
    } 

} 
Смежные вопросы