기초/JAVA

[Java] 이미지변환 HEIC 등등

장동규 2020. 11. 11. 17:38

ImageMagick 설치

https://imagemagick.org/script/download.php

 

 

[설치테스트]

cmd 실행

  magick logo: logo.gif

  magick identify logo.gif

  magick logo.gif win:

  실행되면 완료

 

변환 명령어

  magick convert [old_file] [new_file]

  ex) magick convert d:\temp.heic d:\temp.jpg

 


Java 소스 분석 : cmd실행 (필수)

String magick_path = "C:/Program Files/ImageMagick-7.0.9-Q16/magick.exe"; 
String org_file = "C:/heic_sampleFile/sample.heic";
String new_file = "C:/heic_sampleFile/sample.png";
Process process =new ProcessBuilder(	
  "cmd", 		// cmd고정	
  “/c”, 		// 권한 옵션 고정
  magick_path, 	//  magick.exe 전체 경로	
  "convert", 	// convert 옵션 고정	
  org_file, 		// 변환 할 이미지 파일
  new_file		// 변환 될 이미지 파일
).start();

Java 소스 분석 : cmd출력 데이터 읽기 (선택)

// 외부 프로그램 출력 읽기
BufferedReader stdOut   = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

// "표준 출력"과 "표준 에러 출력"을 출력
String std_msg;
while ((std_msg =   stdOut.readLine()) != null) System.out.println(std_msg);
while ((std_msg = stdError.readLine()) != null) System.err.println(std_msg);

png, jpg, gif 테스트 완료

 

Heic파일에서 단일 이미지타입 (jpg,png .. )변환 시
eic파일에 이미지가 1개 이상인 경우 [파일이름]-no로 생성

Ex-0 : 합쳐진 원본 or 1번째 이미지 파일

Ex-1~… : 1or2번째 이미지 파일부터 저장


[전체코드]

package tes;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConvertHeic {

	public static void main(String[] args) {

		//magick설치 후 전체경로
		String magick_path = "C:/Program Files/ImageMagick-7.0.9-Q16/magick.exe";
		//원본이미지 전체경로
		String org_file = "C:/Users/GASANDG/Desktop/heic_sampleFile/1.heic";
		//저장될 이미지 전체경로
		String new_file = "C:/Users/GASANDG/Desktop/heic_sampleFile/1.png";

		try {
			Process process = new ProcessBuilder("cmd", "/c", magick_path, "convert", org_file, new_file).start();

			// 외부 프로그램 출력 읽기
			BufferedReader stdOut   = new BufferedReader(new InputStreamReader(process.getInputStream()));
			BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

			// "표준 출력"과 "표준 에러 출력"을 출력
			String std_msg;
			while ((std_msg =   stdOut.readLine()) != null) System.out.println(std_msg);
			while ((std_msg = stdError.readLine()) != null) System.err.println(std_msg);
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}

}