在实现图形合并的时候,因为对Jmagick的处理方式还不熟悉,但是Jmagick依赖于imageMagick,imageMagick又刚好有执行图像合并的命令。
因此想到了利用java调用windows命令行执行命令的方式来达到目的。
直接看代码:
/**
* 合并图片
* @param srcPathList 源图片路径名称列表
* @param toPathFile 合并后图片路径名称
* @param orientation 合并方位:横向(+)、纵向(-)
* @return
*/
public void convert(List srcPathList,String toPathFile,String orientation){
/* 合并图片命令格式:
* convert +append 1.jpg 2.jpg 3.jpg ... 0.jpg //横向合并(最后一个为合并成功的文件名称)
* convert -append 1.jpg 2.jpg 3.jpg ... 0.jpg //纵向合并(最后一个为合并成功的文件名称)
*/
StringBuffer command = new StringBuffer("");
command.append("convert ");
command.append(orientation+"append ");
int length = srcPathList.size();
for(int i=0;i<length;i++){
command.append(srcPathList.get(i)+" ");
}
command.append(toPathFile);
String[] str = {command.toString()};
JmagickTest.exec(str);
}
/**
* 调用windows的命令行并执行命令
* @param command 命令行窗口中要执行的命令字符串
*/
public static void exec(String[] command) {
Process proc;
InputStream is = null;
String comman = command[0];
System.out.println("命令为:"+comman);
String[] cmd = {"cmd.exe","/c",comman};
try {
proc = Runtime.getRuntime().exec(cmd);
int result = proc.waitFor();
System.out.println("Process result:" + result);
is = proc.getInputStream();
byte[] b = new byte[1024];
is.read(b);
System.out.println("b:" + b);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
通过将执行命令写入数组变量cmd,然后调用Runtime.getRuntime().exec(cmd)来执行此功能。这样就实现了调用java调用windows命令行执行命令的操作。
---------------------------------------------------------------------------------------------------------------------------------
针对不同的操作系统的判断,进行命令调用:
/**
* 获取操作系统名称
* @return
*/
public static String getOS(){
Properties pros = System.getProperties();
String os = (String) pros.get("os.name");
System.out.println(os);
return os;
}
/**
* 根据操作系统类型来执行调用系统命令
* @param command
*/
public static void execWindowsOrLinux(String[] command) {
Process proc = null;
InputStream is = null;
String comman = command[0];
System.out.println("命令为:"+comman);
//String[] cmd = {"cmd.exe","/c",comman};
String osName = getOS();
try {
if(osName.startsWith("Windows")){//windows下调用系统命令
String[] cmdWindows = {"cmd.exe","/c",comman};
proc = Runtime.getRuntime().exec(cmdWindows);
}else if(osName.startsWith("Linux")){//Linux下调用系统命令
String[] cmdLinux = {"/bin/sh","-c",comman};
proc = Runtime.getRuntime().exec(cmdLinux);
}else if(osName.startsWith("Unix")){
String[] cmdUnix = {comman};
proc = Runtime.getRuntime().exec(cmdUnix);
}
int result = proc.waitFor();
System.out.println("Process result:" + result);
is = proc.getInputStream();
byte[] b = new byte[1024];
is.read(b);
System.out.println("b:" + b);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}