SVG 이미지를 3x3으로 정렬하기

11598 단어 Rubyrubygems
벡터 이미지로 원자 구조를 묘사하는 도구를 만들었다.
https://github.com/NuNoKehai/xyzb2image
그러나 이 프로그램은 단원 하나만 그렸기 때문에 보기에 좋지 않다.

원래는 3x3의 삽화가에 배열되어 있었지만 삽화가들은 그림의 위치를 잘 조절하지 못했다.따라서 도면 셀을 추가하는 옵션은 추가하지 않으려고 합니다.
그래서 나는 벡터 이미지 3x3의 루비 스크립트를 썼다.
svg3x3.rb
require 'rubygems'
require 'cairo'
require 'rsvg2'

def read_suffix(filename)

  index_period=filename.rindex(".")
  suffix=filename[index_period+1..filename.size-1]

  return suffix

end

def cairo_imagesurface_general(filename_image, width, height)

  suffix_image=read_suffix(filename_image)

  if suffix_image.casecmp("pdf")==0
     surface = Cairo::PDFSurface.new(filename_image, width, height)
  elsif suffix_image.casecmp("svg")==0
    surface = Cairo::SVGSurface.new(filename_image, width, height)
  else
    format = Cairo::FORMAT_ARGB32
    surface = Cairo::ImageSurface.new(format, width, height)
  end

  return surface

end

def context_finish_general(filename_image,context)

  suffix_image=read_suffix(filename_image)

  if suffix_image.casecmp("pdf")==0 || suffix_image.casecmp("svg")==0
    context.target.finish
  elsif suffix_image.casecmp("png")==0
    context.target.write_to_png(filename_image)
  end

end

filename_in=ARGV[0]
filename_out=ARGV[1]

handle_in = RSVG::Handle.new_from_file(filename_in)
width_in=handle_in.dimensions.width
height_in=handle_in.dimensions.height

surface_out = cairo_imagesurface_general(filename_out, width_in*3, height_in*3)
context_out = Cairo::Context.new(surface_out)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_out.translate(-2*width_in,height_in)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_out.translate(-2*width_in,height_in)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_out.translate(width_in,0)
context_out.render_rsvg_handle(handle_in)
context_finish_general(filename_out,context_out)
이 스크립트를 조작하기 위해서는 루비gem의cairo와rsvg2가 필요합니다.
첫 번째로 정의된 세 함수는 출력 파일의 확장자의 통용성을 높이기 위한 것이다.
사용자 공간의 원점을 어긋나게 해서 입력 그림을 그리는 것입니다.
사용 방법.ruby svg3x3.rb input.svg output.pdfargument로 입력 파일 이름과 출력 파일 이름을 지정합니다.
입력 파일은svg 형식이어야 합니다.
결과 1

다 됐습니다.
이후 삽화가의 제한폭 마스크 등 커팅 이미지로 필요 없는 부분을 출력하면 OK.

좋은 웹페이지 즐겨찾기