2013-05-31 3 views
-1

이미지로 잡지 표지를 생성 할 수있는 콘텐츠를 찾고 있는데 일부 콘텐츠 하이라이트를 추가 할 수 있습니다. 이 작업을 수행하는 데 가장 적합한 라이브러리는 무엇입니까? PIL입니까? 또는 imagemagick?python을 사용하여 잡지 표지를 만드는 방법은 무엇입니까?

+3

"잡지 표지"를 정의하십시오. –

+2

그 문제에 대해 "생성"을 정의하십시오 ... –

+1

일부 텍스트를 이미지 위에 겹치기 만하면 PIL이 작동합니다. 나는 ImageMagick에 대해 많이 모른다. 더 복잡한 경우에는 적절한 DTP 패키지를 사용하는 것이 좋습니다. – Aya

답변

7

Photoshop, Illustrator, Gimp 또는 Inkscape와 같은 GUI 대신 프로그래밍 방식으로 잡지 표지를 디자인하고 싶습니다. 그러나 여러분이 가정한다면, 가장 쉬운 방법은 파이썬을 사용하여 SVG 이미지를 만드는 것입니다. SVG은 벡터 기반이며 (행 위치는 수정 된 후에 수정할 수 있음) 사람이 읽을 수있는 XML이므로 파이썬에서 그래픽을 자동 생성하고이를 Inkscape에서 직접 편집 할 수 있습니다. Python은 XML 조작을위한 built-inthird-party 도구를 가지고 있습니다. SVG는 특별한 경우입니다.

프로그래밍 방식으로 이미지를 생성하면 많은 시행 착오가 발생할 수 있으므로 대화식 뷰어로 직접 설정하는 것이 좋습니다.

import cairo 
import rsvg 
import gtk 

class Viewer(object): 
    def __init__(self): 
     self.string = """<svg width="800" height="600"></svg>""" 
     self.svg = rsvg.Handle(data=self.string) 
     self.win = gtk.Window() 
     self.da = gtk.DrawingArea() 
     self.win.add(self.da) 
     self.da.set_size_request(800, 600) 
     self.da.connect("expose-event", self._expose_cairo) 
     self.win.connect("destroy", self._destroy) 
     self.win.show_all() 
     self.win.present() 

    def _expose_cairo(self, win, event): 
     self.svg = rsvg.Handle(data=self.string) 
     cr = self.da.window.cairo_create() 
     self.svg.render_cairo(cr) 

    def _destroy(self, widget, data=None): 
     gtk.main_quit() 

    def renderSVG(self, text): 
     x, y, w, h = self.win.allocation 
     self.da.window.invalidate_rect((0,0,w,h), False) 
     self.string = text 

지금 당신이

viewer = Viewer() # pops up a window 
import lxml.etree as etree 
from lxml.builder import E as svg 

rectangle = svg.rect(x="10", y="10", width="80", height="80", style="fill: yellow; stroke: black; stroke-width: 2;") 
circle = svg.circle(cx="70", cy="70", r="30", style="fill: red; fill-opacity: 0.5; stroke: black; stroke-width: 2;") 

document = svg.svg(rectangle, circle, width="100", height="100") 

viewer.renderSVG(etree.tostring(document)) # draws the image in the window 

같은 명령으로 그래픽을 구축하고

open("outputFile.svg", "w").write(etree.tostring(document)) 

비트 맵 PNG로 저장할 수 있습니다 : 다음은 간단한 GTK (예를 들어 우분투, apt-get install python-rsvg python-cairo)를 사용하여 하나의 이미지는 Base64로 인코딩하여 href:data 속성으로 인코딩하여 SVG에 임베드 할 수 있습니다. 그건 긴 설명이 필요 하겠지만, 가능하다는 것을 알려주고 있습니다. 또한 SVG는 반짝이는 잡지 ​​표지에서 기대할 수있는 모든 광택 그라디언트와 블렌딩 효과를 지원하지만, 어떻게 완료되었는지 문서를 파헤쳐 야합니다.

+1

+1. 이것은 SO에 대한 더 많은 지원이 필요한 사려 깊은 대답입니다. – iruvar

+0

그런 포괄적 인 답변을 주셔서 감사합니다. 정확히 제가 찾고있는 것입니다. – flyingfoxlee

관련 문제