Java의 Image Magick과 같은 프로그램에서 이미지 데이터를 어떻게 읽으십니까?

StackOverflow https://stackoverflow.com/questions/621596

  •  05-07-2019
  •  | 
  •  

문제

나는 Imagemagick과 함께 일하고 있으며 Imagemagick 프로세스의 STDOUT에서 이미지 데이터를 읽는 가장 좋은 방법이 궁금합니다.

나는 다음과 같이 프로세스에 대한 명령을 호출합니다 :/opt/local/bin/convertize 8000@ - -

그런 다음 바이트 어레이를 처리 프로세스에 배관하십시오.

이와 같은 프로세스에서 데이터를 읽는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

당신은보고 싶을 수도 있습니다 아파치 커먼즈 exec 이것은 실행 파일을 실행하고 결과를 Java로 전달하는 좋은 방법을 제공합니다.

Michael이 언급 한 방법을 사용하는 것과 유사합니다.

사용의 좋은 예가 있습니다 지도 시간 페이지.

다른 팁

완전성을 위해 Apache Commons Exec를 통해 Imagemagick을 사용하여 코드 샘플을 게시하고 싶어요.

    try {

        StringBuffer sb = new StringBuffer();
        sb.append(this.validPathToImageMagickCommand);
        sb.append('\u0020');
        for (int i = 0; i < args.size(); i++) {
            String s = args.get(i);
            sb.append(s);
        }


        CommandLine cl = CommandLine.parse(sb.toString());

        PumpStreamHandler pumpStreamHandler = new PumpStreamHandler(output, System.err, new ByteArrayInputStream(inputBytes));
        byAs = new ByteArrayInputStream(inputBytes);
        pumpStreamHandler.setProcessOutputStream(byAs);

        DefaultExecutor executor = new DefaultExecutor();
        executor.setStreamHandler(pumpStreamHandler);
        int exitValue = executor.execute(cl);

        outputBytes = output.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (byAs != null)
                byAs.close();

            if (output != null)
                output.close();

        } catch (IOException e) {
            System.out.println(e);
        }

    }

그만큼 Runtime.exec() 메소드를 반환합니다 Process 이는 호출 된 프로세스의 입력, 출력 및 오류 스트림을 얻는 방법이 있습니다.

다른 방법으로 어떻게 "바이트 배열을 프로세스에 파이프"할 수 있었는지 궁금합니다.

스폰 된 프로세스의 입력 및 출력을 처리하려면 여러 스레드를 사용해야합니다. 출력을 읽지 않고 많은 입력을 "파이프"하려고 시도하면 차단되기 때문입니다.

runtime.exec ()를 사용하려면 검토하십시오 이 질문 runtime.exec ()가 약간 까다로울 수 있습니다.

출력을 위해 StreamGobbler를 배열 또는 그와 같은 것으로 저장하는 것으로 변경하고 싶을 것입니다. Michael이 말했듯이 Waitfor ()를 수행하기 전에 스레드를 시작하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top