IDL/New Graphics

PDF, EPS, PS 저장에 관하여 (NG 체계)

이상우_idl 2017. 5. 13. 10:00
728x90
반응형

IDL에서 그림을 파일로 저장하는데 있어서 여러 종류의 파일 포맷들을 사용하는 것이 가능합니다. 그 중 JPG, GIF, PNG 등과 같은 비트맵(Bitmap) 기반의 포맷이 있고, PS, EPS, PDF 등과 같은 벡터(Vector) 기반의 포맷도 있습니다. 오늘은 벡터 기반 포맷의 파일로 저장하는 방법에 관한 얘기를 좀 해볼까 합니다.


먼저 PDF 포맷 저장에 관하여 살펴봅시다. PDF 포맷의 저장 기능은 IDL 8.0 버전에서 NG(New Graphics) 체계가 도입되면서 지원되기 시작했습니다. 즉 PDF 포맷의 저장 기능은 NG 체계에서만 지원되며, 예전 DG(Direct Graphics) 체계에서는 PDF 저장 기능이 지원되지 않습니다. NG 체계에서 PDF 저장 기능은 그래픽 개체에 대하여 Save 메서드를 사용할 때 사용할 수 있습니다. 설명을 위하여 다음과 같이 두 종류의 그림(플롯 및 이미지)을 별도의 그래픽창에 표출하는 작업을 수행하는 예제 코드를 만들어 보았습니다.


win1 = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

pl = PLOT('SQRT(2*x)', THICK=2, COLOR='crimson', $

  XTITLE='X Value', YTITLE='Y Value', TITLE='Test Plot', $

  FONT_SIZE=12, /CURRENT)

plo = PLOT('SQRT(x)', THICK=2, COLOR='dodger blue', /OVERPLOT)


win2 = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)

img = HANNING(600, 600)

im = IMAGE(img, RGB_TABLE=73, MARGIN=0, /CURRENT)

tx = TEXT(0.5, 0.5, 'Central Position', FONT_SIZE=16, /NORMAL)


오늘은 저장 방법에 관해서만 중점을 둘 예정이기 때문에, 위 예제 코드의 세부적인 내용에 관한 설명은 생략하겠습니다. 어쨌든 이 코드를 실행하면 win1, win2로 되어 있는 개별 그래픽창에 그림이 표출되는데 각각의 그림의 모습은 다음과 같습니다.



먼저 플롯이 그려진 win1의 내용을 PDF 파일로 저장해 봅시다. 다음과 같이 win1에 대하여 Save 메서드를 사용하면 됩니다. 파일 확장자만 PDF로 적어주기만 하면 되므로 꽤 간편합니다.


win1.Save, 'figures/test_pdf_save1.pdf'


제가 이렇게 저장한 PDF 파일은 아래에 첨부해 보았습니다. 물론 여러분이 위 과정을 실행하여 직접 생성하셔도 됩니다.


test_pdf_save1.pdf


PDF 파일은 그 특성상 마치 책자의 페이지에 그림을 삽입하는 것과 같은 느낌으로 좀 더 세부적인 설정들이 가능합니다. Save 메서드로 PDF 포맷으로 저장할 경우에 지원되는 키워드들이 여럿 있는데 그 중 WIDTH, HEIGHT를 사용하면 그림의 가로 및 세로 크기를 인치(Inch) 단위로 설정할 수 있습니다. 만약 다음과 같이 해보면 PDF 파일 내에서 그림의 크기가 아까와는 좀 달라지는 것을 확인할 수 있습니다.


win1.Save, 'figures/test_pdf_save2.pdf', WIDTH=8, HEIGHT=6


test_pdf_save2.pdf


PDF 파일로 저장할 때에는 여러 그림들을 하나의 파일에 넣으면서 각 그림이 페이지 하나씩을 차지하도록 할 수도 있습니다. 즉 여러 페이지들로 구성된 PDF 파일을 생성하는 것이 가능합니다. 이를 위해서는 Save 메서드 사용시 APPEND 키워드를 사용하면 됩니다. 여기서는 win1, win2의 두 그림들을 모두 포함하는 PDF 파일을 만들어 보겠습니다. 그 방법은 다음과 같습니다.


win1.Save, 'figures/test_pdf_save3.pdf', WIDTH=8, HEIGHT=6, $

  /APPEND

win2.Save, 'figures/test_pdf_save3.pdf', WIDTH=5, HEIGHT=5, $

  /APPEND, /BITMAP, /CLOSE


이와 같이 APPEND 키워드를 사용하여 여러 페이지들을 한꺼번에 넣고자 할 경우에는, /APPEND 키워드를 각 페이지의 저장시 사용되는 Save 메서드마다 사용해야 합니다. 그리고 저장될 파일의 이름은 모두 동일해야 하며, 마지막 페이지 저장시에는 /CLOSE 키워드를 반드시 사용해야 합니다. 이러한 점들만 유의하면 됩니다. 그리고 win2의 이미지 형태 그림을 저장하는데 있어서 /BITMAP 키워드를 사용하였는데요. 이미지와 같은 그림을 PDF에 담는데 있어서 이 키워드를 사용하는 것이 좋을 수도 있습니다. 여기서는 그냥 PDF로 저장했을 때에는 이미지 위에 적은 캡션문자가 제대로 나타나지 않는 문제가 있었는데, /BITMAP 키워드를 사용함으로써 이 문제를 해결할 수 있었습니다. 어쨌든 위와 같은 내용을 실행하여 얻은 PDF 파일은 다음과 같습니다. 이 파일을 열어보시면 두 페이지로 구성되어 있음을 확인할 수 있습니다.


test_pdf_save3.pdf


또한 용지의 방향을 Portrait(디폴트) 또는 Landscape로 조정할 수도 있습니다. 만약 Landscape 방향으로 조정하려면 다음과 같이 해당 키워드를 추가하면 됩니다. 이렇게 생성된 PDF 파일은 다음과 같습니다.


win1.Save, 'figures/test_pdf_save4.pdf', WIDTH=8, HEIGHT=6, $

  /APPEND, /LANDSCAPE

win2.Save, 'figures/test_pdf_save4.pdf', WIDTH=5, HEIGHT=5, $

  /APPEND, /BITMAP, /LANDSCAPE, /CLOSE


test_pdf_save4.pdf


이번에는 PS(PostScript) 또는 EPS(Encapsulated PostScript) 포맷의 파일로 저장해야 할 경우를 살펴봅시다. 방법은 간단합니다. 저장될 파일명에서 확장자만 원하는 포맷에 맞게 바꿔주면 됩니다. 만약 EPS 포맷으로 저장하고자 한다면 다음과 같이 하면 됩니다.


win1.Save, 'figures/test_eps_save1.eps'

win2.Save, 'figures/test_eps_save2.eps'


test_eps_save1.eps

test_eps_save2.eps


여기서는 win1, win2 두 그림을 각각 다른 EPS 파일로 저장하였습니다. 사실 NG 체계의 Save 메서드에서는 PS, EPS 파일 저장시 앞서 PDF의 경우처럼 여러 페이지들을 하나의 파일에 저장하는 기능은 지원되지 않습니다.


사실 이와 같이 PS, EPS 파일로 저장할 때 여러 페이지들이 한꺼번에 포함되도록 하는 것은 예전 DG(Direct Graphics) 체계에서는 가능했습니다. 물론 지금도 마찬가지입니다. 이 방법에 관해서는 조만간 별도의 게시물로 다뤄보겠습니다.

test_pdf_save2.pdf
0.07MB
test_pdf_save3.pdf
0.34MB
test_pdf_save4.pdf
0.11MB
test_pdf_save3.pdf
0.11MB
test_eps_save1.eps
0.15MB
test_pdf_save4.pdf
0.34MB
test_eps_save2.eps
1.4MB
test_pdf_save1.pdf
0.07MB
test_pdf_save4.pdf
0.34MB
반응형