Java-процесс с Imagemagick - PullRequest
       4

Java-процесс с Imagemagick

0 голосов
/ 02 апреля 2011

Я хочу изменить размер изображения, например: convert 1.jpg -resize 250x240> 1.jpg Я пишу такой код:

File f=new File(request.getRealPath("/")+"pics/"+d.getTime()+"_"+ttt+suffix);    
StringBuffer sb=new StringBuffer();
sb.append("'convert "+f.getAbsolutePath()+" -resize 250x240\\> "+f.getAbsolutePath()+"'");
String command=sb.toString();
Process p=Runtime.getRuntime().exec(command);
int returnv=p.waitFor();
System.out.println("command:"+command+" returnV:"+returnv);

но я обнаружил, что когда я добавляю к нему флаг '>', команда не выполняется. Как я могу решить это?

Ответы [ 3 ]

1 голос
/ 02 апреля 2011

Подумайте об использовании im4java , который является объектно-ориентированной Java-оболочкой для инструментов командной строки ImageMagic.Он решает именно те проблемы, с которыми вы сталкиваетесь.

JMagic - еще одна альтернатива.Он обеспечивает тонкий слой JNI вокруг C-API ImageMagic.

0 голосов
/ 02 апреля 2011

Runtime не запускает полноценную оболочку. Конечно, вы можете вызвать bash, чтобы получить его.

Или вы можете создать поток для вывода в выходной поток процесса и записи его в выходной файл.

0 голосов
/ 02 апреля 2011

Символ > - это не флаг команды преобразования, а перенаправление вывода в файл 1.jpg.Вы можете просто вызвать convert с параметром выходного файла и избежать перенаправления.Вместо:

convert 1.jpg -resize 250x240> 1.jpg

используйте

convert -resize 250x240 1.jpg 1_resized.jpg

Кстати, вы избегаете обратной косой черты -resize 250x240\\>, возможно, в этом нет необходимости, и вы можете просто написать -resize 250x240 >.

Обновление: Возможно, вы могли бы использовать JMagick , библиотеку Java для ImageMagick, вместо выполнения системного процесса для преобразования вашего изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...