0

我需要检查图像的大小,我正在使用图像魔法来做同样的事情。不幸的是,我们的某些图像的 ImageIO.read 失败,因为编码是 CMYK 并且 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 的正确方法。

4

1 回答 1

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);
        }
    }
于 2019-01-30T09:16:54.580 回答