기초/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();
}
}
}