반응형

[java]tif, tiff파일을 png파일로 변환하기

 

INTRO

 

tif파일 : 

TIFF (Tagged Image File Format)는 앨더스(Aldus)사와 마이크로소프트사가 공동 개발한 이미지 저장 포맷으로 

 

보통 팩스로 받은 파일이 tif형식으로 이루어진 경우가 많습니다. 여러장의 팩스를 받았을 경우 하나의 파일 안에 여러 이미지가 있습니다.(참고자료출처 :http://kr.aving.net/news/view.php?articleId=1940)

 

팩스문서, pdf파일과 같은 한개의 파일 안에 여러개의 이미지가 있는 경우 웹에서는 바로 로드하지 못합니다.

이럴 때 서버에서 tif파일을 읽어 png 파일로 분할하여 사용하기 편한 형식으로 바꿔 html에서 제어하면 됩니다.

 

 

 

 

CONTENTS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.io.File;
 
import java.io.FileNotFoundException;
 
 
 
import com.sun.media.jai.codec.FileSeekableStream;
 
import com.sun.media.jai.codec.ImageCodec;
 
import com.sun.media.jai.codec.ImageDecoder;
 
import com.sun.media.jai.codec.TIFFEncodeParam;
 
 
 
public static createPng(path, name){
 
        String rename = name.replace(".tif""");
 
        String pngFile = "";
 
        try {
 
            FileSeekableStream fss = new FileSeekableStream(path+name);
 
            ImageDecoder imgdec = ImageCodec.createImageDecoder("tiff", fss, null);
 
            int count = imgdec .getNumPages();
 
            int startPage = 0;
 
            String strCount = Integer.toString(count);
 
            TIFFEncodeParam param = new TIFFEncodeParam();
 
            param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
 
            param.setLittleEndian(false);
 
            
 
            String filePath = "D:/testFolder/"+rename+"_";        // 파일이 생성되는 경로, 파일을 읽어오는 경로
 
            
 
            for (int i = 0; i < count; i++) {
 
                RenderedImage page = dec.decodeAsRenderedImage(i);
 
                BufferedImage image = PlanarImage.wrapRenderedImage(page).getAsBufferedImage();
 
                File outputfile = new File(filePath+count +"_"+(i+1)+".png");
 
                pngFile += filePath+count +"_"+(i+1)+".png&";
 
                ImageIO.write(image, "png", outputfile);
 
            }
 
        } catch (FileNotFoundException e) {
 
            e.printStackTrace();
 
        } catch (IOException e) {
 
            e.printStackTrace();
 
        } catch (Exception e) {
 
            e.printStackTrace();
 
        }
 
    }
cs

 

 

OUTRO

참고자료 및 자료출처 : https://github.com/sjh010/tifViewer/blob/master/src/main/java/com/mobileleader/tifleader/util/ConvertUtil.java

반응형

'Programming > Java' 카테고리의 다른 글

[java]zip파일로 묶어 저장하기  (0) 2022.09.05
[JAVA]문자열 치환,삭제 replace();  (0) 2022.09.05
반응형

 

 

[jquery]영역프린트하기,IEPageSetupX

 

INTRO

 

<span "="" 10pt;" style="font-size: 12pt;">저번 포스팅에서 ActiveX없이 순수 스크립트로 영역을 프린트하는 방법을 알아보았습니다. 

 

ActiveX를 호환성등의 이유로 사용하지 않는 추세이기 때문에 그 방법을 하용하긴 하지만 브라우저에서 매번 헤더, 푸터에 찍히는 내용을 따로 컨트롤 해줘야하는 번거로움이 있습니다.

 

지금 소개해드릴 ActiveX를 사용해서 구현을 한다면 위의 불편한 점을 모두 해결할 수있습니다.

자세한 내용은 

https://isulnara.com/myAPP/IEPageSetupX/IEPageSetupX.html

에서 확인 할 수있습니다.

 

 

 

CONTENTS

 

 

스크립트 부분입니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Installed()
{
    try
    {
        return (new ActiveXObject('IEPageSetupX.IEPageSetup'));
    }
    catch (e)
    {
        return false;
    }
}
 
function PrintTest()
{
    if (!Installed())
        alert("컨트롤이 설치되지 않았습니다. 정상적으로 인쇄되지 않을 수 있습니다.")
    else
        alert("정상적으로 설치되었습니다.");
}
cs

 

아래의 내용을 <body>태그 안에 붙여넣기 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<OBJECT id=IEPageSetupX 
        classid="clsid:41C5BC45-1BE8-42C5-AD9F-495D6C8D7586" 
        codebase="./IEPageSetupX.cab#version=1,4,0,3" width=0 height=0>    
    <param name="copyright" value="http://isulnara.com">
    <div style="position:absolute;top:276;
                left:320;
                width:300;
                height:68;
                border:solid 1 #99B3A0;
                background:#D8D7C4;
                overflow:hidden;z-index:1;
                visibility:visible;">
    <FONT style='font-family: "굴림", "Verdana"; 
                font-size: 9pt; 
                font-style: normal;'>
    <BR>  인쇄 여백제어 컨트롤이 설치되지 않았습니다.  <BR>  <a href="./IEPageSetupX.exe">
    <font color=red>이곳</font></a>을 클릭하여 수동으로 설치하시기 바랍니다.  </FONT>
    </div>
</OBJECT>
cs

 

여기까지 했다면 기본적인 것은 완성이 되었습니다.

 

1
2
3
4
5
6
<div>
    <button onclick="printPage()">프린트하기</button>
</div>
<div id="idPrint2">
    <img alt="" src="test.png">
</div>
cs


<body>안에 프린트할 contents를 넣어줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var initBody;
function beforePrint(){
    initBody = document.body.innerHTML;
    document.body.innerHTML = idPrint2.innerHTML;
}
function afterPrint(){
    document.body.innerHTML = initBody;
}
function printPage(){
    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;
    
    IEPageSetupX.Clear();
    
    // 프린트
    IEPageSetupX.Print();
}
cs
스크립트에 위의 부분을 삽입하면 <div>안의 내용이 출력이 됩니다.
 
스크립트 설명.
13번째 줄의 IEPageSetupX.Clear();
  - 여백0, 머리글/바닥글 제거, 배경색 및 이미지 인쇄 안함, 크기에 맞게 축소 안함
 
16번째 줄의 IEPageSetupX.Print();
  - 기본프린터로 설정된 프린터로 인쇄
 
Tip.
위의 부분이 모두 코딩이 되었다면 프린트 버튼 클릭 시 바로 프린트가 될것입니다. 테스트용으로 보고 싶을때에는
 IEPageSetupX.Print(); 대신 IEPageSetupX.Preview(); 를 넣으시면 프린트되지 않고 미리보기창이 뜹니다. 
 

 

 

 

OUTRO

IEPageSetupX의 경우 윈도우10에서도 호환이 되는 것으로 확인이 되었습니다. 

 

단순하지만 꼭 필요한 기능만 갖춰져있는 듯 하여 사용성이 좋습니다.

 

 

 

 

 

반응형

+ Recent posts