命令我使用這個在線工具http://www.professorcloud.com/svg-to-canvas/轉換帆布JS把結構緊湊
現在轉換SVG圖像的畫布JS命令我告訴你一些一塊代碼:
...
ctx.beginPath();
ctx.moveTo(1080.756,172.244);
ctx.lineTo(1077.382,175.618);
ctx.lineTo(1079.223,177.458);
ctx.lineTo(1081.677,175.004);
ctx.lineTo(1082.903,171.63);
ctx.lineTo(1080.756,172.244);
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(1089.039,169.79);
ctx.lineTo(1091.492,169.79);
ctx.quadraticCurveTo(1091.492,169.79,1091.492,169.79);
ctx.lineTo(1091.492,171.32399999999998);
ctx.quadraticCurveTo(1091.492,171.32399999999998,1091.492,171.32399999999998);
ctx.lineTo(1089.039,171.32399999999998);
ctx.quadraticCurveTo(1089.039,171.32399999999998,1089.039,171.32399999999998);
ctx.quadraticCurveTo(1089.039,169.79,1089.039,169.79);
ctx.lineTo(1089.039,169.79);
ctx.closePath();
ctx.fill();
ctx.stroke();
...
每個beginPath-closePath
段的代碼繪製在畫布上分離對象。
當我想要做進一步的操作與此對象我來,我需要此命令列表轉換爲結構緊湊:
a = [
{
name: 'name1',
coords: [
['m',21,22],
['l',[1,2], [3,4], [5,6]],
['b',7,8,9,10],
['l',[11,12],[13,14]]
]
},
{
name: 'name2',
coords: [
['m',21,22],
['l',[21,22], [23,4], [5,6]],
['b',[27,28,9,10], [11,12,13,14]],
['l',[211,212],[213,214]]
]
}
];
每個單獨的對象我想要被轉換成JS對象{}
。並且在這個對象中'coords'
屬性將擁有所有的js canvas功能並以數組方式進行協調錶示。其中第一個字母表示功能(moveTo
,lineTo
等),然後 - 此功能的參數。但在這裏額外的事情是,如果我有多行lineTo
函數,我想將它們組合到一個數組中。所以,當我有這樣的代碼:
ctx.lineTo(1,2);
ctx.lineTo(3,4);
我希望它被轉化爲
['l',[1,2], [3,4]]
而不是到
['l',[1,2]],
['l',[3,4]]
我應該怎樣做呢?
看不到用php正則表達式的方式。
我看到循環解決方案和多個preg_match
es和if
子句,但真的很想看到更簡單的解決方案。
爲什麼使用正則表達式?你可以寫一個解析器。看起來像一個嵌套循環。 – 2014-09-12 20:26:43
我看到循環和多個preg_mathches的sulution,如果是子句,但希望看到更簡單的東西。 – 2014-09-12 20:35:16
不,不要在PHP中擴展它,在客戶端解析它要簡單得多。絕對不需要這樣的正則表達式 - 你已經有了一個JSON結構 - 無論是迭代JSON對象 - 在解析到客戶端的JS對象或服務器上的PHP關聯數組之後。 – 2014-09-12 20:36:52