KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Deprive a mirror of its silver and even the Czar won't see his face.
FrontPage › EPS그림편집
PostScript / EPS / EPS 그림 편집하기

EPS 그림파일을 편집하는 데 유용한 프로그램으로 AdobeIllustrator가 있다. 그러나 이 프로그램은 저렴하지 않은 상용 프로그램이다. FreeSoftware만으로 EPS 그림파일을 편집하는 방법이 없을까?

Progress 님이 KTUGContrib:794에서 제시하신 예제 샘플 파일로 이 파일을 편집하는 방법에 대해서 알아본다.

목차

1 Drawing과 Painting
2 AI_eps.eps
2.1 XFig를 이용한 그림 수정
3 EPS의 한글 폰트 문제 AI_hangul.eps
4 질문

1 Drawing과 Painting

컴퓨터 그림 파일에는 두 종류가 있다. 하나는 Drawing이라 불리는 것으로, 몇 가지 기본적인 Drawing 요소들, 예컨대, 선, 사각형, 원, 다각형, 타원, bezier곡선 등을 이용하여 그려지는 그림을 말한다. 일반적으로 "벡터 그래픽"이라 불린다. 다른 하나는 Painting인데, 이것은 말 그대로 그림, 픽셀 그림이다. 베지어 곡선과 비슷해 보이는 그림이 있다 해도 그것은 점의 집합에 불과하다. 따라서 이 그림을 확대하거나 축소하면 말끔한 선이 그대로 유지되지 않고 점이 커지거나 작아지거나 해서 계단현상을 보인다. 인물상이나 건물 사진은 드로잉 함수로 표현할 수 없거나 매우 어렵다. 그러므로 페인팅 그림이 좋은 표현방법이 된다. 그러나 sine 곡선과 같은 것은 벡터 함수로 표현하는 쪽이 훨씬 효율적이고 표현력에서도 더 좋은 결과를 가져올 것이다. 이런 그림을 비트맵 또는 래스터(raster) 그림이라고 부른다. 래스터 페인팅은 점(pixel)으로 이루어지고 벡터 드로잉은 경로(path)로 이루어진다.

사진과 같은 그림은 Painting의 비트맵 그림이다. 비트맵 그림은 흔히 JPEG/GIF/PNG/BMP 등의 포맷을 가질 수 있다. 반면 GNUPlot와 같은 프로그램이 만들어내는 함수의 플로트는 벡터 그림의 형태를 유지한다. AdobePhotoshop으로 처리되는 그림은 대부분 비트맵 페인팅이고 AdobeIllustrator에서 그려지는 그림(의 일부)는 벡터 드로잉들이다.

EPS는 이 두 가지 형태를 모두 가질 수 있다. 벡터 드로잉은 XFig에서, 래스터(비트맵) 페인팅은 GIMP에서 편집할 수 있다. 물론 GIMP는 벡터 드로잉의 EPS를 비트맵 형태로 불러들여서 편집할 수 있게 하지만 저장하면 비트맵 페인팅으로 변환되어 버린다.

비트맵 페인팅 그림을 EPS로 변환하는 데는 ImageMagickconvert를 이용하거나, GIMP 또는 AdobePhotoshop과 같은 이미지 리터칭 툴을 사용할 수 있다. 특히 JPEG2ps는 파일 크기가 아주 작고 효율적인 비트맵 EPS 파일을 만들어준다.

드로잉과 페인팅에 대해서 다음 사이트를 참고하라. http://www.sketchpad.net/basics1.htm


2 AI_eps.eps

이 EPS는 AdobeIllustrator 10.0에서 그려진 것으로 7.0 포맷으로 저장된 것이다. 텍스트는 없다. GhostScript에 의해서 아주 잘 처리되고, GSView에서도 잘 보인다. epsedit_01.png

2.1 XFig를 이용한 그림 수정

XFig이든 JFig이든 EPS 그림에 수정을 가하기 위해서는 편집 가능한 포맷으로 변환해야 한다. 여기서 PStoEdit이라는 유틸리티가 쓰인다.
#> pstoedit -f xfig AI_eps.eps AI_eps.fig
이 명령을 실행하면 같은 디렉토리에 AI_eps.figAI_eps01.eps가 생긴다. 이렇게 두 개의 파일이 생성되는 이유는 XFig에서 편집할 수 있는 Drawing Objects들로 이루어진 그림 부분(벡터 그래픽)과, Drawing Objects가 아닌 그림으로 이루어진 부분(비트맵)이 원래의 EPS 파일에 함께 포함되어 있었기 때문이다.

벡터 그래픽인 Drawing Objects들은 XFig에서 편집할 수 있다. CygWin/X를 실행하고 XFigAI_eps.fig를 불러오면 다음 스크린샷과 같다. epsedit_02.png

여기서 문제는 바탕에 깔린 AI_eps01.eps라는 비트맵 그림의 크기와 모양이 약간 왜곡되었다는 것인데, 이것은 아마도 PStoEdit의 문제로 보인다. 이 문제까지 해결하는 방법은 없는 것일까? 아무튼 위의 그림에 XFig에서 아주 사소한 변형(Object Copy)을 가하여 EPS로 export한 결과를 GSView로 불러들인 모양은 다음과 같다. epsedit_03.png

바탕그림의 왜곡을 수정하기 위해서 트릭을 사용해보았다.
  1. AI_eps.fig가 열린 상태에서 이 그림의 외곽 원만 남기고 다른 Objects들은 모두 Delete한다.
  2. 외곽의 원(Polygon Drawing)을 선택하여 속성을 White로 바꾼다.
  3. 이 상태로 AI_eps_bg.eps라는 파일로 export한다.
  4. GIMPAI_eps_bg.eps를 연다.
  5. GIMP의 "Select Contiguous Regions" Tool을 이용하여 외곽 원의 바깥쪽 색깔있는 영역을 제거한다.
  6. 이 그림을 AI_eps01_new.ps라는 이름으로 "PostScript" 저장한다.
  7. PS2Eps를 이용하여 Bounding Box를 잡아준다.
    #> ps2eps AI_eps01_new.ps
    
  8. 여기서 AI_eps01_new.eps가 생기면, 이 그림을 AI_eps01.eps로 이름을 바꾸고 XFig에서 AI_eps.fig를 다시 불러온다.(앞서 AI_eps_bg.eps를 저장할 때 그 상태로 fig 파일을 저장하지 않았어야 한다.)
  9. 불러온 상태에서 EPS로 export한다. 파일 이름을 AI_eps_final.eps로 하고 저장한 결과를 GSView로 보면 다음과 같다.
epsedit_04.png


JFig를 사용하여 위의 작업을 해낼 수도 있다. XFig의 경우와 다른 점은 AI_eps01.eps라는 배경 그림을 화면에서 보여주지 못한다는 점 정도이다. 그러나 AI_eps.eps의 벡터 드로잉 부분을 수정하는 데는 어려움이 없다.

3 EPS의 한글 폰트 문제 AI_hangul.eps

Progress 님이 제공하신 EPS 그림 파일에는 한글 TEXT가 사용된 EPS가 두 개 있다. 하나는 AI_hangul(font_embed).eps이고 다른 하나는 AI_hangul(font_not_embed).eps이다. 이름이 보여주는 대로, 하나는 한글 폰트가 포함(embed)되어 있고 하나는 그렇지 않다.
<!> EPS에서 한글 폰트 문제는 좀 복잡해서, AdobeIllustrator에서 다시 읽고 처리할 EPS 파일이 아니라면, 폰트를 포함(embedding)하는 것이 좋다.

한글 폰트가 포함되지 않아서 "깨져 보이는" 파일에 포함된 문자열을 "한글 TeX 사용자 그룹"으로 바꾸어본다. 이 때 유념할 것은, 우리가 사용하려 하는 그림 처리 프로그램인 XFigGIMP 모두가 한글 Font Encoding을 직접 지원하지 않는다는 것이다. 그러므로 한글 Text의 삽입은 TeX과 dvips를 이용하는 것으로 한다.

맨처음에 이 파일을 GSView로 보았을 때 다음과 같은 모양이다. 화면 아래에 "깨진" 한글 텍스트가 보인다. 한글 텍스트를 제외한 부분은 앞서 편집해본 AI_eps와 동일하다. 그러므로 바탕화면의 비트맵 그림 AI_eps01.eps는 수정한 것을 그대로 쓰기로 한다. epsedit_05.png

먼저 PStoEdit으로 fig 파일로 변환하자.
#> pstoedit -f xfig AI_hangul\(font_not_embed\).eps AI_hfne.fig

앞서 만들어둔 AI_eps01.eps를 AI_hfne01.eps로 복사한다. 그런 다음 JFigAI_hfne.fig를 불러들인다. 그러면 몇 가지 폰트 에러가 뜨면서 다음과 같은 화면이 된다. epsedit_06.png

여기서 아래쪽 깨진 폰트 부분을 모두 지우고, 거기에 TEXT_HERE라고 써넣고 저장(save)한다. 명령행을 열어서 이 저장된 AI_hfne.fig를 EPS로 변환한다.
#> fig2dev -L eps AI_hfne.fig AI_hfne.eps

이제 이 EPS 파일에 대해서 새로운 한글 텍스트를 써넣는 것은 PSFrag에서 주철 님이 보여준 과정을 그대로 따른다.
  1. 다음과 같은 tex 파일을 작성한다.
    \documentclass{article}
     \usepackage{hfont} %%<- 한글 사용을 위해서.
     \usepackage{graphicx,psfrag}
     \begin{document}
     \thispagestyle{empty}
    
     \begin{figure}
     \psfrag{TEXT_HERE}{한글 \TeX{} 사용자 그룹}
     \includegraphics{AI_hfne}
     \end{figure}
    
     \end{document}
    
  2. 이것을 AI_hfne_s.tex으로 저장한 다음 LaTeX 처리하고 dvips로 변환한다.
    #> latex AI_hfne_s
    #> dvips AI_hfne_s
    
  3. PS2Eps로 바운딩 박스를 조절한다.
    #> ps2eps AI_hfne_s.ps
    
  4. 여기서 얻어진 AI_hfne_s.eps는 다음 그림과 같다.
epsedit_07.png

4 질문

제대로 알고 있는지 확인해주십시오. --hoze

  1. PS는 type1(3, 42)과 TrueType 글꼴을 처리할 수 있다. => PostScript는 스케일러블 폰트의 대표인 타입1과 트루타입을 모두 처리할 수 있는 것으로 압니다.
    글꼴 분류가 생각보다 훨씬 복잡합니다. type1과 type3는 postscript outline을 가진 것으로 PS level 1 장치도 처리할 수 있습니다. 하지만, type 42는 truetype outline을 PS 형식으로 wrapping한 것으로 PS level 2(일부 PS level 1 장치도?) 이후 장치만이 처리할 수 있습니다. type8, type 11 등에 대한 요약은 다음 글을 참고하십시오. [http]http://www.freetype.org/pipermail/devel/2003-December/010000.html -- 신정식
  2. 그러므로 EPS에 한글 TrueType을 임베딩하면 어디서나 그림 속의 한글을 볼 수 있다. => 이론상으로는 그렇다고 볼 수 있습니다. 그러나 자신할 수 없습니다. 왜냐하면... 글꼴 임베딩을 한 프로그램의 특성을 타는 것으로 여겨지기 때문입니다. 즉, 일러스트레이터 8 / 9/ 10에서 임베딩한 EPS가 GSView에서 보여지기도, 보여지지 않기도 했던 기억이 남기 때문입니다. (이것은 일러스트레이터 10에서 버전 8로, 또는 버전 9로 저장하는 것과는 전혀 별개의 문제입니다.)
    임베딩한 방법에 따라 결과가 달라집니다. truetype 글꼴을 type1이나 type3로 변경한 경우 가장 호환성이 높습니다. truetype outline은 그대로 두고 PS로 둘러 싸기만 한 경우 (type42) 오래된 PS level 1 장치에서는 인쇄할 수 없을 것입니다. truetype 글꼴을 PS outline으로 바꾼 후에 CID-keyed 글꼴을 만든 경우 (type 9)에는 PS level 3 장치만이 제대로 해석할 수 있습니다. 일러스트레이터에서 결과가 달라지는 문제가 이런 차이때문인지는 잘 모르겠습니다. 비교적 최신 버전의 GS는 PS level 3를 잘 지원하니까요. 제가 말한 문제는 실제 프린터에 들어 있는 PS 해석기에 대한 것입니다. -- 신정식

  3. EPS에 한글 truetype을 임베딩할 때 해당 글꼴만 포함한다. (만약 모든 글꼴을 임베딩한다면 삽화가 100개 일 경우 그 PS 또는 PDF의 크기가 엄청나게 커지겠죠.) => 그렇습니다. 즉, EPS에 한글 삽입이라는 글자를 아무개체글꼴로 삽입하고, 글꼴 임베딩을 하면, 아무개체글꼴 전체가 임베딩 되는 것이 아니라 한글 삽입이라는 글자의 정보를 지닌 채, 그 4글자의 글꼴만 저장되는 것으로 압니다.

  4. 폰트를 임베딩하지 않고 PSFrag을 이용할 경우 PS에는 type1 또는 pk가 임베딩된다. => 그렇다고 생각합니다. 이 부분은 저도 조금 궁금한 사항이 있습니다. 이를테면, 한글 글꼴 모듬으로 아시아폰트베이직을 썼다고 해도, PSFrag으로 치환한 한글 글꼴은 UHC글꼴을 쓰는 것 같았습니다. 이 부분을 확인해주시면 감사하겠습니다. --Progress
    PostScript 언어를 이용하여 TrueType을 다룰 수 있는 것은 맞습니다. 그런데 PSFrag를 이용하려면 현재의 TeX배포판에 포함된 dvips(k)를 써야 하는데, 이것은 TrueType을 embedding하는 기능이 (아직) 없습니다. 그래서 결과적으로 위에 예시된 PSFrag 솔루션을 이용하는 경우 아시아폰트 같은 것은 embedding하지 못하고 pk 비트맵 글꼴이 포함되게 됩니다. MiKTeX-KTUG을 설치한 경우, updmap.cfg를 수정하지 않았다면 Type1 글꼴도 역시 pk 비트맵으로 들어갈 가능성이 높습니다. 그러나 이것은 사용자가 설정해서 Type1을 포함할 수 있습니다. 아무튼지 한글 사용에 관한 한, 비트맵을 사용하지 않겠다면 현재로서는 UHC글꼴밖에는 쓸 수 있는 것이 없습니다. 은글꼴 역시 TrueType이기 때문에, 이 문제에서 자유롭지 못합니다. 처음부터 DVIPDFMx로 pdf 그림을 만들면 되기는 하겠지만 이 경우 PSFrag를 쓸 수 없다는 문제가 생깁니다. CID-Keyed TrueType Font를 handling할 수 있는 dvi -> ps converter가 나와야 이 문제가 해결될 수 있겠지요. 아니면 PK 비트맵의 품질을 참고 견디든가... ;) --Karnes


to be continued...



^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-01-10 16:29:10
Processing time 0.0695 sec