运行 convert command of image magic using Java 给出无法加载模块错误
Running convert command of image magic using Java gives unable to load module error
我写了一个class执行imagemagic的转换命令。
public class ImageMagicDemo {
public static void main(String[] argp){
ProcessBuilder pb2 = new ProcessBuilder("G:\project\installation\imagemagic\convert","G:\demo\image\frame.jpg", "-resize", "20x20",
"G:\demo\image\resizeImage\frame1.jpg");
pb2.redirectErrorStream(true);
Process p2;
try {
p2 = pb2.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line = null;
while((line=br.readLine())!=null){
System.out.println(line);
}
System.out.println("2"+p2.waitFor());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但我收到以下回复
convert.exe: unable to open image `G:\demo\image\frame.jpg': No such file or directory @ error/blob.c/OpenBlob/2692.
convert.exe: unable to load module `G:\project\installation\imagemagic\modules\coders\IM_MOD_RL_JPEG_.dll': The specified module could not be found.
@ error/module.c/OpenModule/1282.
convert.exe: no decode delegate for this image format `JPG' @ error/constitute.c/ReadImage/501.
convert.exe: no images defined `G:\demo\image\resizeImage\frame1.jpg' @ error/convert.c/ConvertImageCommand/3212.
同样的问题是 .png file.I 在 Window8 上安装了 ImageMagick-6.9.1-2-Q16-x64-dll.exe。
但是,如果我 运行 命令提示符下的以下命令
convert -resize 1024x768 G:\demo\image\frame.jpg G:\demo\image\resizeImage\frame1.jpg
它成功执行并将调整大小的图像复制到目标folder.If知道的人请回复。
谢谢
我可以让它工作,只有当我使用 ProcessBuilder#directory(File)
更改执行的工作目录时 运行
ProcessBuilder pb = new ProcessBuilder(
"C:\Program Files\ImageMagick-6.9.1-Q16\convert.exe",
"C:\Path\to\Large.png",
"-resize", "1027x768",
"C:\Path\to\small.png");
try {
pb.inheritIO();
pb.redirectErrorStream();
pb.directory(new File("C:\Program Files\ImageMagick-6.9.1-Q16"));
Process p = pb.start();
try (InputStream is = p.getInputStream()) {
int in = -1;
while ((in = is.read()) != -1) {
System.out.print((char)in);
}
}
System.out.println("Exited with " + p.waitFor());
} catch (IOException | InterruptedException ex) {
ex.printStackTrace();
}
在我的例子中,它已经帮助安装了 ImageMagick 的 static 版本,而不是 dynamic/dll。试试看。顺便提一句。调用功能应与 x86 或 x64 相同。
我写了一个class执行imagemagic的转换命令。
public class ImageMagicDemo {
public static void main(String[] argp){
ProcessBuilder pb2 = new ProcessBuilder("G:\project\installation\imagemagic\convert","G:\demo\image\frame.jpg", "-resize", "20x20",
"G:\demo\image\resizeImage\frame1.jpg");
pb2.redirectErrorStream(true);
Process p2;
try {
p2 = pb2.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line = null;
while((line=br.readLine())!=null){
System.out.println(line);
}
System.out.println("2"+p2.waitFor());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但我收到以下回复
convert.exe: unable to open image `G:\demo\image\frame.jpg': No such file or directory @ error/blob.c/OpenBlob/2692.
convert.exe: unable to load module `G:\project\installation\imagemagic\modules\coders\IM_MOD_RL_JPEG_.dll': The specified module could not be found.
@ error/module.c/OpenModule/1282.
convert.exe: no decode delegate for this image format `JPG' @ error/constitute.c/ReadImage/501.
convert.exe: no images defined `G:\demo\image\resizeImage\frame1.jpg' @ error/convert.c/ConvertImageCommand/3212.
同样的问题是 .png file.I 在 Window8 上安装了 ImageMagick-6.9.1-2-Q16-x64-dll.exe。 但是,如果我 运行 命令提示符下的以下命令
convert -resize 1024x768 G:\demo\image\frame.jpg G:\demo\image\resizeImage\frame1.jpg
它成功执行并将调整大小的图像复制到目标folder.If知道的人请回复。
谢谢
我可以让它工作,只有当我使用 ProcessBuilder#directory(File)
ProcessBuilder pb = new ProcessBuilder(
"C:\Program Files\ImageMagick-6.9.1-Q16\convert.exe",
"C:\Path\to\Large.png",
"-resize", "1027x768",
"C:\Path\to\small.png");
try {
pb.inheritIO();
pb.redirectErrorStream();
pb.directory(new File("C:\Program Files\ImageMagick-6.9.1-Q16"));
Process p = pb.start();
try (InputStream is = p.getInputStream()) {
int in = -1;
while ((in = is.read()) != -1) {
System.out.print((char)in);
}
}
System.out.println("Exited with " + p.waitFor());
} catch (IOException | InterruptedException ex) {
ex.printStackTrace();
}
在我的例子中,它已经帮助安装了 ImageMagick 的 static 版本,而不是 dynamic/dll。试试看。顺便提一句。调用功能应与 x86 或 x64 相同。