[HTML5] 자바를 활용하여 SVG 를 image로 전환하기


자바를 활용하여 SVG를 image 파일로 전환하는 방법

SVG 란 (특징 및 장점) ?

1) SVG는 확장가능한 벡터 그래픽을 의미합니다.
2) SVG는 XML형식의 그래픽을 정의합니다.
3) SVG는 XML의 2D 그래픽을 기술하는 언어입니다.
4) SVG이미지 생성한 후 텍스트 편집기로 편집이 가능합니다.
5) SVG이미지는 해상도에 관계없이 고품질로 인쇄가 가능합니다.
6) SVG이미지는 확대해도 품질에 손실이 없습니다.

Canvas 와의 차이점 ?

1) javascript 로 2d 그래픽을 그려냅니다.
2) 브라우저에 전달되어 그려진후 정보가 없어집니다. (향후 수정 불가)
3) 수정이 필요한경우 다시 그려야 합니다. (브라우저에 선 전달된게 지워진후 다시 그려짐)

XML형태의 SVG를 image 파일로 전환하기 위해 여기에서는 아래 링크에 Batik Project를 이용합니다.

The Apache™ Batik Project 


(소스)

package test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;

public class SvgToJava {

    public static void main(String[] args) {
        
        // 테스트 svg 문자열
        String svg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        svg += "<svg viewBox=\"602 46.00001525878906 100 99.99998474121094\" ";
        svg += " width=\"100\" height=\"99.99998474121094\" ";
        svg += " xmlns=\"http://www.w3.org/2000/svg\"> ";
        svg += " <g id=\"Layer_2\" transform=\"matrix(1, 0, 0, 1, 0, 0)\"> ";
        svg += " <g id=\"Layer_1-2\"> <path class=\"st0\" ";
        svg += " d=\"M605,46c27.6,0,50,22.4,50,50s-22.4,50-50,50s-50-22.4-50-50S624.4,46,652,46z\" ";                  svg += " style=\"fill: rgb(204, 204, 204);\"/> </g> </g> </svg>\r\n ";

        // svg 파일 저장 경로
        String fileName = "D:/imageTest/svgString.svg";

        // svg 파일 생성 준비
        byte[] svgByte = svg.getBytes();

        try {
            // svg 파일 생성
            OutputStream svgOutput = new FileOutputStream(fileName);
            svgOutput.write(svgByte);
            svgOutput.close();
            
            // 단계-1:입력 SVG문서를 Transcoder입력으로 읽습니다.
            TranscoderInput input_svg_image = new TranscoderInput("file:"+fileName);

            // 스텝 2:OutputStream이미지를 정의하고 TranscoderOutput에 연결합니다.
            OutputStream png_ostream = new FileOutputStream("D:/imageTest/svgImage.png");
            TranscoderOutput output_png_image = new TranscoderOutput(png_ostream);
            
            OutputStream jpg_ostream = new FileOutputStream("D:/imageTest/svgImage.jpg");
            TranscoderOutput output_jpg_image = new TranscoderOutput(jpg_ostream);
            
            // 스텝 3:P/CGT구축/암호화 및 필요한 경우 힌트를 정의합니다.
            PNGTranscoder converter_png = new PNGTranscoder();
            
            JPEGTranscoder converter_jpg = new JPEGTranscoder();
            converter_jpg.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));
            
            // 스텝 4:출력 및 쓰기 출력
            converter_png.transcode(input_svg_image, output_png_image);
            
            converter_jpg.transcode(input_svg_image, output_jpg_image);
            
            // 5단계- 닫힘/플러시 출력 스트림
            png_ostream.flush();
            png_ostream.close();
            
            jpg_ostream.flush();
            jpg_ostream.close();
            
        } catch (IOException | TranscoderException e) {
            e.printStackTrace();
        }
    }
}

댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #1

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #2

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기