[英]python QuickDraw Database - arrange objects in rows and columns and export in .svg
初學者 python 用戶在這里。
我正在嘗試訪問 Google 的 QuickDraw 數據庫並根據用戶輸入的列和行排列大量圖像(矢量線),然后以 .svg 文件格式導出。 到目前為止,我只設法將每個圖像保存為 .gif 並顯示它。 我正在努力尋找一種方法來安排它們並在 SVG 中導出。 我可以使用哪些庫來完成這兩個任務?
這是我到目前為止的代碼:
from PIL import Image, ImageDraw
from quickdraw.data import QuickDrawData
rows = int(input("How many rows do you want? "))
columns = int(input("How many columns do you want? "))
rows_columns = rows * columns
name_var = 0
for image in range(0,rows_columns):
qd = QuickDrawData()
duck = qd.get_drawing("duck")
duck_image = Image.new("RGB", (255,255), color = (255,255,255))
duck_drawing = ImageDraw.Draw(duck_image)
for stroke in duck.strokes:
for coordinate in range(len(stroke)-1):
x1 = stroke[coordinate][0]
y1 = stroke[coordinate][1]
x2 = stroke[coordinate+1][0]
y2 = stroke[coordinate+1][1]
duck_drawing.line((x1,y1,x2,y2), fill=(0,0,0), width=2)
duck_image.show()
name_var += 1
duck.image.save(f"my_duck{name_var}.gif")
理想情況下,結果應該是這樣的,並且在.svg 文件格式中。
提前致謝!
您將需要一個 python 庫,該庫可以包含 output SVG 文件。
不幸的是,我沒有時間用剛剛運行的代碼片段提供詳細的答案,但希望我能提供一些指導。
有多個 python 模塊來編寫 SVG 文件: svgwrite
就是其中之一(文檔,示例)。
基於示例代碼段:
import svgwrite
dwg = svgwrite.Drawing('test.svg', profile='tiny')
dwg.add(dwg.line((0, 0), (10, 0), stroke=svgwrite.rgb(10, 10, 16, '%')))
dwg.add(dwg.text('Test', insert=(0, 0.2), fill='red'))
dwg.save()
您應該能夠執行以下操作:
from PIL import Image, ImageDraw
from quickdraw.data import QuickDrawData
import svgwrite
dwg = svgwrite.Drawing('test.svg', profile='tiny')
rows = int(input("How many rows do you want? "))
columns = int(input("How many columns do you want? "))
rows_columns = rows * columns
name_var = 0
for image in range(0,rows_columns):
qd = QuickDrawData()
duck = qd.get_drawing("duck")
duck_image = Image.new("RGB", (255,255), color = (255,255,255))
duck_drawing = ImageDraw.Draw(duck_image)
for stroke in duck.strokes:
for coordinate in range(len(stroke)-1):
x1 = stroke[coordinate][0]
y1 = stroke[coordinate][1]
x2 = stroke[coordinate+1][0]
y2 = stroke[coordinate+1][1]
duck_drawing.line((x1,y1,x2,y2), fill=(0,0,0), width=2)
# you many need to offset dwg.line using row/col grid index and drawing size
dwg.add(dwg.line((x1, y1), (x2, y2), stroke=svgwrite.rgb(10, 10, 16, '%')))
duck_image.show()
name_var += 1
duck.image.save(f"my_duck{name_var}.gif")
# save svg of all ducks (grid)
dwg.save()
請記住,上面的代碼未經測試,但希望它說明了這一點。 如果您是該模塊的新手,我推薦一步一步的方法:
這個想法是,如果任何步驟失敗,單獨調試/修復會更容易。
我懷疑您可能還需要計算出每只鴨子的尺寸/邊界框,並將網格縮放/對齊到相同大小的矩形,然后偏移每條線的坐標。 從理論上講,您可以將每只鴨子繪制為一個組,然后只需 SVG 翻譯每個組,使其對齊為網格(而不是所有鴨子重疊)
此外,您可能會發現 sketch-rnn 很有趣,因為它使用了 quickdraw 數據集。 特別是查看 David Ha 的Sketch-RNN Colab 筆記本或他的sketch-rnn/utils.py腳本。 盡管 QuickDraw 筆畫格式與 sketch-rnn 筆畫格式略有不同,但仍有很多相似之處,並且上面的鏈接包括用於繪制 svg 網格的實用函數。 他們需要適應 QuickDraw 的格式。
If you're not constrained to Python alone and are comfortable with a bit of JavaScript the QuickDraw dataset README already inlcudes a link to a d3.js SVG demo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.