문제

프랙탈 이미지 제작자가 있습니다.그것은 물건과 같은 임의의 프랙탈 트리를 만듭니다.완료되면 사용자에게 트리를 저장하라는 메시지가 표시됩니다.나는 그것을 절약 할 수 있습니다.이 응용 프로그램은 당신의 안드로이드 전화 또는 타블렛에서 사용할 수 있습니다.어떤 아이디어?코드:

import turtle
import random
from sys import exit
from time import clock
import canvasvg
turtle.colormode(255)
red = 125
green = 70
blue = 38        
pen = 10
def saveImg():
    print("Done.")
    save = input("Would you like to save this tree? Y/N \n")
    if save.upper() == "Y":
        t.hideturtle()
        name = input("What would you like to name it? \n")
        nameSav = name + ".svg"
        ts = turtle.getscreen().getcanvas()
        canvasvg.saveall(nameSav, ts)
    elif save.upper() == "N":
        def runChk():
            runAgain = input("Would you like to run again? Y/N (N will exit)")
            if runAgain.upper() == "Y":
                print("Running")
                main()
            elif runAgain.upper() == "N":
                print("Exiting...")
                exit()
            else:
                print("Invalid response.")
                runChk()
        runChk()
    else:
        print("Invalid response.")
        saveImg()

def tree(branchLen, t, red, green, blue, pen):
    time = str(round(clock()))
    print("Drawing... " + time)
    if branchLen > 3:
        pen = pen*0.8
        t.pensize(pen)
        if (red > 10 and green < 140):
            red = red - 15
            green = green + 8
    if branchLen > 5:
        angle = random.randrange(18, 55)
        angleTwo = 0.5*angle
        sub = random.randrange(1,16)
        t.color(red, green, blue)
        t.forward(branchLen)
        t.right(angleTwo)
        tree(branchLen-sub,t, red, green, blue, pen)
        t.left(angle)
        tree(branchLen-sub, t, red, green, blue, pen)
        t.right(angleTwo)
        t.backward(branchLen)

def main():
    t = turtle.Turtle()
    myWin = turtle.Screen()
    t.speed(0)
    t.hideturtle()
    t.left(90)
    t.up()
    t.backward(100)
    t.down()
    print("Please wait while I draw...")
    tree(random.randrange(60,95),t,red,green,blue, pen)
    saveImg()
main()
도움이 되었습니까?

해결책

이게 꼭 제이펙이어야만 하는건가요?과연 충분할까?

그래서 당신은 다음을 사용하여 변환 할 수 있습니다 카이로스브그.불행히도 canvasvg.saveall() 이 응용 프로그램은 당신이 당신의 안드로이드 전화 또는 타블렛에서 사용할 수 있습니다. cairosvg.svg2png().그래서 이런 일이 일을 해야 합니다:

import os
import shutil
import tempfile

import canvasvg

name = raw_input("What would you like to name it? \n")
nameSav = name + ".png"
tmpdir = tempfile.mkdtemp()  # create a temporary directory
tmpfile = os.path.join(tmpdir, 'tmp.svg')  # name of file to save SVG to
ts = turtle.getscreen().getcanvas()
canvasvg.saveall(tmpfile, ts)
with open(tmpfile) as svg_input, open(nameSav, 'wb') as png_output:
    cairosvg.svg2png(bytestring=svg_input.read(), write_to=png_output)
shutil.rmtree(tmpdir)  # clean up temp file(s)

당신이 좋아하는 경우에,당신은 당신의 자신을 쓸 수 있습니다 saveall() 에 근거를 두는 기능 canvasvg.saveall() 파일 이름 대신 파일과 같은 객체를 받아들이고 그 객체에 쓰는(아주 작습니다).그럼 당신은 통과 할 수 있습니다 StringIO 객체와 임시 파일을 귀찮게 할 필요가 없습니다.또는 당신의 saveall() 데이터를 바이트 문자열로 반환 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top