我需要检查图像的大小,并且我使用图像魔术来做同样的事情。不幸的是,由于某些编码方式为CMYK,ImageIO.read对于我们的某些图像失败,并且ImageMagick似乎运行良好。
public static void main(String[] args) throws IOException {
String ImageMagickHome = "C:/Program Files/ImageMagick-7.0.7-Q16";
String imageToConvert = "G24624-SA286U-17F04.jpg";
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c",
"cd " + ImageMagickHome + " && magick identify " + imageToConvert);
builder.redirectErrorStream(true);
InputStream stream = builder.start().getInputStream();
IOUtils.toString(builder.start().getInputStream());
String output = IOUtils.toString(builder.start().getInputStream());
String[] splitted = output.split(" ");
System.out.println(splitted[2]);
}
我需要检查图像的尺寸是否小于500 * 500。但是由于我是通过流程生成器执行ImageMagic命令的,因此它并不能按照我想要的方式提供结果。
splitted [2]给我大小,但是它是字符串,我无法比较。有没有更好的方法可以做到这一点?
之所以不使用JMagick是因为:
a。)我不想将依赖项添加到其他Jar中。 ImageMagic随我们的应用程序一起提供,因此它不添加其他依赖项。 b。)我找不到安装JMagick的正确方法。
答案 0 :(得分:0)
//this might solve your problem. can you please confirm if this is the solutionyou are looking for?
public static void main(String[] args) throws IOException {
String ImageMagickHome = "C:\\Program Files\\ImageMagick-7.0.8-Q16";
String imageToConvert = "C:\\1.jpg";
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c",
"cd " + ImageMagickHome + " && magick identify " + imageToConvert);
builder.redirectErrorStream(true);
InputStream stream = (builder.start().getInputStream());
StringBuilder textBuilder = new StringBuilder();
try (Reader reader = new BufferedReader(new InputStreamReader
(stream, Charset.forName(StandardCharsets.UTF_8.name())))) {
int c = 0;
while ((c = reader.read()) != -1) {
textBuilder.append((char) c);
}
String str= textBuilder.toString();
String[] splitted = str.split(" ");
String[]str2=splitted[2].split("x");
System.out.println(splitted[2]);
double imageSize= 500*500;
double testImage=Double.parseDouble(str2[0])*Double.parseDouble(str2[0]);
String ratio = String.valueOf(((testImage / imageSize)*100));
System.out.println("Image size is in ratio: "+ratio);
}
}