Html2canvas: 전단지λ₯Ό μ‚¬μš©ν•˜μ—¬ 내보내기

에 λ§Œλ“  2015λ…„ 04μ›” 09일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: niklasvh/html2canvas

λˆ„κ΅¬λ“ μ§€ 전단지와 ν•¨κ»˜ html2canvasλ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•œ 적이 μžˆμŠ΅λ‹ˆκΉŒ? Google μ§€λ„μ—μ„œ μž‘λ™ν•˜λ„λ‘ html2canvasλ₯Ό μ‚¬μš©ν•  수 μžˆμ—ˆμ§€λ§Œ 이제 μ „λ‹¨μ§€μ—μ„œ μž‘λ™ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 지도λ₯Ό μ™Όμͺ½, 였λ₯Έμͺ½, μœ„ λ˜λŠ” μ•„λž˜λ‘œ 이동할 λ•Œ μ „λ‹¨μ§€μ—μ„œ 일뢀 타일이 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 더 이상 μ˜€λ²„λ ˆμ΄κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λˆ„λ½λœ 타일 문제λ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ‘°μž‘ν•œ jsfiddle을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ‚΄ μ½”λ“œμ˜ 슀크린 샷이 μ²¨λΆ€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
missingtiles

https://jsfiddle.net/japiasente/7ybndo5L/

Needs More Information

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μž‘λ™ν•˜λ €λ©΄ λͺ‡ 가지 μΆ”μ•…ν•œ 해킹이 ν•„μš”ν•©λ‹ˆλ‹€. λ‹€μŒμ€ μˆ˜μ • 사항이 μ—†λŠ” κ°„λ‹¨ν•œ μ˜ˆμž…λ‹ˆλ‹€.

http://jsfiddle.net/djwbra47/

λͺ‡ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. μ›ν˜• λ§ˆμ»€κ°€ 1/4μ›μœΌλ‘œ μž˜λ¦½λ‹ˆλ‹€. λ³€ν™˜μ΄ 적용되기 전에 html2canvasκ°€ μš”μ†Œλ₯Ό ν΄λ¦¬ν•‘ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ§ˆμ»€λŠ” λ³€ν˜• 없이 0,0의 쀑앙에 μœ„μΉ˜ν•˜λ―€λ‘œ ν•΄λ‹Ή μœ„μΉ˜μ—μ„œ λ³Ό 수 μžˆλŠ” 1/4 μ›μœΌλ‘œ μž˜λ¦½λ‹ˆλ‹€. 그런 λ‹€μŒ html2canvasλŠ” 이λ₯Ό μ‹€μ œ μœ„μΉ˜λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. μ™Όμͺ½ 및 μœ„μͺ½ 여백을 음수 λŒ€μ‹  0으둜 μ„€μ •ν•˜μ—¬ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€(전체 λ§ˆμ»€κ°€ 0,0μ—μ„œ ν‘œμ‹œλ¨). 그런 λ‹€μŒ λ™μΌν•œ μ–‘λ§ŒνΌ λ³€ν˜•μ„ μ‘°μ •ν–ˆμŠ΅λ‹ˆλ‹€. (λ¬Όλ‘  μΊ”λ²„μŠ€λ₯Ό μž‘μ€ 후에 값을 λ‹€μ‹œ λ³€κ²½ν•˜μ‹­μ‹œμ˜€.)
  2. 선이 잘λͺ»λœ μœ„μΉ˜μ— λ‚˜νƒ€λ‚©λ‹ˆλ‹€. html2canvasκ°€ SVG κ²½λ‘œμ— 두 번 λ³€ν™˜μ„ μ μš©ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μˆ˜μ • 사항이 μ—†μœΌλ©΄ 선이 μ™Όμͺ½ 상단에 λ„ˆλ¬΄ 멀리 ν‘œμ‹œλ©λ‹ˆλ‹€. λ³€ν™˜μ„ 0으둜 λ³€κ²½ν•˜λ©΄ 였λ₯Έμͺ½ μ•„λž˜λ‘œ λ„ˆλ¬΄ 멀리 λ™μΌν•œ 거리가 ν‘œμ‹œλ©λ‹ˆλ‹€. μž‘λ™ν•˜λ €λ©΄ λ³€ν™˜μ„ μ›λž˜ κ°’μ˜ 절반으둜 μ„€μ •ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
  3. 지도λ₯Ό μ΄λ™ν•˜λ©΄ 타일이 μ›λž˜ λ²”μœ„λ‘œ μž˜λ¦½λ‹ˆλ‹€. 이것은 1번과 λ™μΌν•œ λ¬Έμ œμž…λ‹ˆλ‹€. Leaflet은 지도 창을 λ³€ν™˜ν•˜μ—¬ 지도λ₯Ό μ΄λ™ν•˜κ³  html2canvasλŠ” ν•΄λ‹Ή λ³€ν™˜μ΄ 적용되기 전에 타일을 ν΄λ¦¬ν•‘ν•©λ‹ˆλ‹€. μˆ˜μ •ν•˜λ €λ©΄ λ³€ν™˜ X 및 Y 값을 각 img의 μ™Όμͺ½ 및 상단 값에 μΆ”κ°€ν•œ λ‹€μŒ λ³€ν™˜μ„ 0으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  4. 지도λ₯Ό μ΄λ™ν•˜λ©΄ html2canvasκ°€ 타일을 λ§ˆμ»€μ™€ μ„  μœ„μ— κ·Έλ €μ„œ 더 이상 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 숫자 3을 λ³€κ²½ν•˜λ©΄ μˆ˜μ •λ˜μ§€λ§Œ 이유λ₯Ό λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μš”μ†Œμ˜ 속성이 μ—…λ°μ΄νŠΈλ˜λ©΄ 그리기 μˆœμ„œκ°€ 변경될 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€μŒμ€ κ³ μ • λ²„μ „μž…λ‹ˆλ‹€.
http://jsfiddle.net/oo2yms1h/

아직 ν•΄κ²°ν•˜μ§€ λͺ»ν•œ λ¬Έμ œκ°€ ν•˜λ‚˜ μžˆμŠ΅λ‹ˆλ‹€. 지도λ₯Ό νŒ¨λ‹ν•˜μ—¬ 선이 였λ₯Έμͺ½ κ°€μž₯자리 κ·Όμ²˜μ— μ˜€λ„λ‘ ν•˜λ©΄ μΊ”λ²„μŠ€μ— ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것이 λ³€ν™˜ 전에 html2canvas ν΄λ¦¬ν•‘μ˜ 또 λ‹€λ₯Έ 결과라고 μΆ”μΈ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν•œ 가지 μΆ”κ°€ 사항: κΈ°λ³Έ 전단지 λ§ˆμ»€λŠ” cdn.leaflet.comμ—μ„œ ν˜ΈμŠ€νŒ…λ˜λŠ” μ΄λ―Έμ§€λ‘œ, CORS 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μΊ”λ²„μŠ€μ— ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. html2canvas와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ€ μ•„μ΄μ½˜ 자체λ₯Ό ν˜ΈμŠ€νŒ…ν•˜κ±°λ‚˜ λ‹€λ₯Έ 마컀 μŠ€νƒ€μΌλ‘œ μ „ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

JAPiasente, 3번의 μˆ˜μ • 사항을 μ μš©ν•˜μ—¬ 타일 및 νŒ¨λ‹ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ˜ν•œ κ·€ν•˜μ˜ λ§ˆμ»€λŠ” SVG 경둜이며 2번의 λ‚΄ 라인과 λ™μΌν•œ 이쀑 λ³€ν™˜ 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ™Όμͺ½ 상단에 λ„ˆλ¬΄ 멀리 ν‘œμ‹œλ©λ‹ˆλ‹€. λ‹€μŒμ€ μ΄λŸ¬ν•œ λ³€κ²½ 사항이 적용된 λ²„μ „μž…λ‹ˆλ‹€.

https://jsfiddle.net/6tn0zy48/

λ§ˆμ»€κ°€ 지도 ν•˜λ‹¨λ³΄λ‹€ 더 μœ„λ‘œ μž˜λ¦¬λŠ” 것을 μ œμ™Έν•˜κ³  λͺ¨λ“  것이 μ˜¬λ°”λ₯Έ μœ„μΉ˜μ— ν‘œμ‹œλ©λ‹ˆλ‹€. μ œκ°€ μ—¬μ „νžˆ μž‘μ—…ν•˜κ³  μžˆλŠ” λ™μΌν•œ 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  21 λŒ“κΈ€

http://jsfiddle.net 을 μ‚¬μš©ν•˜μ—¬ 문제의 예λ₯Ό μ œκ³΅ν•˜μ‹­μ‹œμ˜€.

jsfiddle을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. https://jsfiddle.net/japiasente/7ybndo5L/

μž‘λ™ν•˜λ €λ©΄ λͺ‡ 가지 μΆ”μ•…ν•œ 해킹이 ν•„μš”ν•©λ‹ˆλ‹€. λ‹€μŒμ€ μˆ˜μ • 사항이 μ—†λŠ” κ°„λ‹¨ν•œ μ˜ˆμž…λ‹ˆλ‹€.

http://jsfiddle.net/djwbra47/

λͺ‡ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. μ›ν˜• λ§ˆμ»€κ°€ 1/4μ›μœΌλ‘œ μž˜λ¦½λ‹ˆλ‹€. λ³€ν™˜μ΄ 적용되기 전에 html2canvasκ°€ μš”μ†Œλ₯Ό ν΄λ¦¬ν•‘ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ§ˆμ»€λŠ” λ³€ν˜• 없이 0,0의 쀑앙에 μœ„μΉ˜ν•˜λ―€λ‘œ ν•΄λ‹Ή μœ„μΉ˜μ—μ„œ λ³Ό 수 μžˆλŠ” 1/4 μ›μœΌλ‘œ μž˜λ¦½λ‹ˆλ‹€. 그런 λ‹€μŒ html2canvasλŠ” 이λ₯Ό μ‹€μ œ μœ„μΉ˜λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. μ™Όμͺ½ 및 μœ„μͺ½ 여백을 음수 λŒ€μ‹  0으둜 μ„€μ •ν•˜μ—¬ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€(전체 λ§ˆμ»€κ°€ 0,0μ—μ„œ ν‘œμ‹œλ¨). 그런 λ‹€μŒ λ™μΌν•œ μ–‘λ§ŒνΌ λ³€ν˜•μ„ μ‘°μ •ν–ˆμŠ΅λ‹ˆλ‹€. (λ¬Όλ‘  μΊ”λ²„μŠ€λ₯Ό μž‘μ€ 후에 값을 λ‹€μ‹œ λ³€κ²½ν•˜μ‹­μ‹œμ˜€.)
  2. 선이 잘λͺ»λœ μœ„μΉ˜μ— λ‚˜νƒ€λ‚©λ‹ˆλ‹€. html2canvasκ°€ SVG κ²½λ‘œμ— 두 번 λ³€ν™˜μ„ μ μš©ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μˆ˜μ • 사항이 μ—†μœΌλ©΄ 선이 μ™Όμͺ½ 상단에 λ„ˆλ¬΄ 멀리 ν‘œμ‹œλ©λ‹ˆλ‹€. λ³€ν™˜μ„ 0으둜 λ³€κ²½ν•˜λ©΄ 였λ₯Έμͺ½ μ•„λž˜λ‘œ λ„ˆλ¬΄ 멀리 λ™μΌν•œ 거리가 ν‘œμ‹œλ©λ‹ˆλ‹€. μž‘λ™ν•˜λ €λ©΄ λ³€ν™˜μ„ μ›λž˜ κ°’μ˜ 절반으둜 μ„€μ •ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
  3. 지도λ₯Ό μ΄λ™ν•˜λ©΄ 타일이 μ›λž˜ λ²”μœ„λ‘œ μž˜λ¦½λ‹ˆλ‹€. 이것은 1번과 λ™μΌν•œ λ¬Έμ œμž…λ‹ˆλ‹€. Leaflet은 지도 창을 λ³€ν™˜ν•˜μ—¬ 지도λ₯Ό μ΄λ™ν•˜κ³  html2canvasλŠ” ν•΄λ‹Ή λ³€ν™˜μ΄ 적용되기 전에 타일을 ν΄λ¦¬ν•‘ν•©λ‹ˆλ‹€. μˆ˜μ •ν•˜λ €λ©΄ λ³€ν™˜ X 및 Y 값을 각 img의 μ™Όμͺ½ 및 상단 값에 μΆ”κ°€ν•œ λ‹€μŒ λ³€ν™˜μ„ 0으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  4. 지도λ₯Ό μ΄λ™ν•˜λ©΄ html2canvasκ°€ 타일을 λ§ˆμ»€μ™€ μ„  μœ„μ— κ·Έλ €μ„œ 더 이상 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 숫자 3을 λ³€κ²½ν•˜λ©΄ μˆ˜μ •λ˜μ§€λ§Œ 이유λ₯Ό λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μš”μ†Œμ˜ 속성이 μ—…λ°μ΄νŠΈλ˜λ©΄ 그리기 μˆœμ„œκ°€ 변경될 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€μŒμ€ κ³ μ • λ²„μ „μž…λ‹ˆλ‹€.
http://jsfiddle.net/oo2yms1h/

아직 ν•΄κ²°ν•˜μ§€ λͺ»ν•œ λ¬Έμ œκ°€ ν•˜λ‚˜ μžˆμŠ΅λ‹ˆλ‹€. 지도λ₯Ό νŒ¨λ‹ν•˜μ—¬ 선이 였λ₯Έμͺ½ κ°€μž₯자리 κ·Όμ²˜μ— μ˜€λ„λ‘ ν•˜λ©΄ μΊ”λ²„μŠ€μ— ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것이 λ³€ν™˜ 전에 html2canvas ν΄λ¦¬ν•‘μ˜ 또 λ‹€λ₯Έ 결과라고 μΆ”μΈ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν•œ 가지 μΆ”κ°€ 사항: κΈ°λ³Έ 전단지 λ§ˆμ»€λŠ” cdn.leaflet.comμ—μ„œ ν˜ΈμŠ€νŒ…λ˜λŠ” μ΄λ―Έμ§€λ‘œ, CORS 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μΊ”λ²„μŠ€μ— ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. html2canvas와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ€ μ•„μ΄μ½˜ 자체λ₯Ό ν˜ΈμŠ€νŒ…ν•˜κ±°λ‚˜ λ‹€λ₯Έ 마컀 μŠ€νƒ€μΌλ‘œ μ „ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

JAPiasente, 3번의 μˆ˜μ • 사항을 μ μš©ν•˜μ—¬ 타일 및 νŒ¨λ‹ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ˜ν•œ κ·€ν•˜μ˜ λ§ˆμ»€λŠ” SVG 경둜이며 2번의 λ‚΄ 라인과 λ™μΌν•œ 이쀑 λ³€ν™˜ 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ™Όμͺ½ 상단에 λ„ˆλ¬΄ 멀리 ν‘œμ‹œλ©λ‹ˆλ‹€. λ‹€μŒμ€ μ΄λŸ¬ν•œ λ³€κ²½ 사항이 적용된 λ²„μ „μž…λ‹ˆλ‹€.

https://jsfiddle.net/6tn0zy48/

λ§ˆμ»€κ°€ 지도 ν•˜λ‹¨λ³΄λ‹€ 더 μœ„λ‘œ μž˜λ¦¬λŠ” 것을 μ œμ™Έν•˜κ³  λͺ¨λ“  것이 μ˜¬λ°”λ₯Έ μœ„μΉ˜μ— ν‘œμ‹œλ©λ‹ˆλ‹€. μ œκ°€ μ—¬μ „νžˆ μž‘μ—…ν•˜κ³  μžˆλŠ” λ™μΌν•œ 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ 남은 문제λ₯Ό μˆ˜μ •ν•˜λŠ” 것은 어렡지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ³€ν™˜μ„ 0으둜 μ„€μ •ν•˜κ³  λŒ€μ‹  μ™Όμͺ½κ³Ό μœ„μͺ½μ„ μ‚¬μš©ν•˜λŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

λ‚΄ κ°„λ‹¨ν•œ μ˜ˆκ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
http://jsfiddle.net/oo2yms1h/1/

지도에 λŒ€ν•œ μˆ˜μ • μˆ˜μ • 사항:
https://jsfiddle.net/6tn0zy48/1/

Chromeμ—μ„œ μž‘μ—…ν•˜κ³  μžˆμ—ˆλŠ”λ° Firefox 및 IEμ—μ„œ μˆ˜μ • 사항이 μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 그듀은 λ³€ν™˜ μŠ€νƒ€μΌμ„ translate3d λŒ€μ‹  translate둜 μ œκ³΅ν–ˆκ³  λ‚΄ μ½”λ“œλŠ” 그것이 항상 translate3d일 것이라고 κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 Chromeμ—μ„œμ²˜λŸΌ μ™Όμͺ½κ³Ό μœ„μͺ½ λŒ€μ‹  λ²ˆμ—­μ„ μ‚¬μš©ν•˜μ—¬ 타일을 λ°°μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. 이 μ—…λ°μ΄νŠΈλœ μ˜ˆμ œλŠ” μ„Έ 가지 λΈŒλΌμš°μ € λͺ¨λ‘μ— λŒ€ν•΄ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 타일 ​​및 마컀 μ•„μ΄μ½˜μ€ μ„Έ 가지 λͺ¨λ‘μ—μ„œ μž‘λ™ν•˜μ§€λ§Œ μ—¬μ „νžˆ Firefox 및 IEμ—μ„œ SVG 경둜λ₯Ό ν‘œμ‹œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

http://jsfiddle.net/oo2yms1h/3/

IEλŠ” 선을 ν‘œμ‹œν•˜κΈ° 전에 html2canvas.svgκ°€ ν•„μš”ν–ˆμœΌλ©° SVG λ ˆμ΄μ–΄μ— λ³€ν™˜ λ˜λŠ” μ™Όμͺ½/상단 속성이 μ„€μ •λ˜μ–΄ μžˆμ„ λ•Œλ„ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 μ˜ˆμ œλŠ” IEμ—μ„œ μž‘λ™ν•˜λ©° 거의 Firefoxμ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

http://jsfiddle.net/oo2yms1h/5/

νŒŒμ΄μ–΄ν­μŠ€μ— 쀄을 ν‘œμ‹œν•˜λ €λ©΄ #648에 μ–ΈκΈ‰λœ html2canvasλ₯Ό λ³€κ²½ν•˜μ—¬ base64 μΈμ½”λ”©μœΌλ‘œ μ „ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
https://github.com/niklasvh/html2canvas/pull/648/files

μ§€κΈˆκΉŒμ§€ λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 μœ μΌν•œ λ§ˆμ§€λ§‰ λ¬Έμ œλŠ” κ·Έ μœ„μ— svg μ˜€λ²„λ ˆμ΄κ°€ 있으면 IEκ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 지도와 svg μ˜€λ²„λ ˆμ΄λŠ” ν¬λ‘¬μ—μ„œ 잘 μž‘λ™ν•©λ‹ˆλ‹€. μ–΄λ–€ 아이디어?

@CraigVA 당신은 ν›Œλ₯­ν•©λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ§€λ‚œ 이틀을 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹Ήμ‹ μ˜ jsfiddlesλ₯Ό 더 일찍 λ§Œλ‚¬λ”λΌλ©΄ μ’‹μ•˜μ„ κ²ƒμž…λ‹ˆλ‹€. 감사 ν•΄μš”!!!

@CraigVA μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμ—ˆλŠ”λ° 지도λ₯Ό μ „ν˜€ νŒ¨λ‹ν•˜λ©΄ μ˜€λ²„λ ˆμ΄κ°€ νƒ€μΌμ˜ μ€‘μ‹¬μ—μ„œ λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.

이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ‚΄κ°€ ν•œ 일은 μž μ‹œ λ™μ•ˆ λ°”λ‹€μ˜ λ‹€λ₯Έ μž₯μ†Œλ‘œ λ·°λ₯Ό μ„€μ •ν•œ λ‹€μŒ λ·°λ₯Ό μ›λž˜ μœ„μΉ˜λ‘œ λ‹€μ‹œ μ„€μ •ν•˜λŠ” redraw() ν•¨μˆ˜μ˜€μŠ΅λ‹ˆλ‹€. 잘 μž‘λ™ν•©λ‹ˆλ‹€.

function redraw() {
    var lat_tmp = map.getCenter().lat;
    var lng_tmp = map.getCenter().lng;
    map.setView([-66.22149259832975, -1.142578125]);
    setTimeout(function () {
        waitForTilesToLoad()
    }, 50000);
    map.setView([lat_tmp, lng_tmp]);
}

λˆ„κ΅°κ°€μ΄ 문제λ₯Ό κ²ͺκ³  λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 경우.

μ•ˆλ…•ν•˜μ„Έμš”, 이 ν•΄ν‚Ή 덕뢄에 Path λ ˆμ΄μ–΄μ™€ 큰 TileLayersλ₯Ό μ œμ™Έν•˜κ³ λŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€.

  • 경둜 λ ˆμ΄μ–΄(폴리곀/폴리라인)의 일뢀가 μ›λž˜ 지도 경계λ₯Ό λ²—μ–΄λ‚˜λ©΄ 지도λ₯Ό 이동할 λ•Œ html2canvas에 μ˜ν•΄ μž˜λ¦½λ‹ˆλ‹€.
    http://jsfiddle.net/c8LL4qfo/ μ—μ„œ 더 κΈ΄ 폴리라인으둜 μ½”λ“œλ₯Ό μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€. 지도λ₯Ό μ΄λ™ν•˜λ €κ³  ν•˜λ©΄ μΊ”λ²„μŠ€μ—μ„œ 선이 잘린 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
    이 버그λ₯Ό ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•œ 아이디어가 μžˆμŠ΅λ‹ˆκΉŒ?

  • 두 번째 μš”μ : tileLayersκ°€ λ„ˆλ¬΄ 큰 경우 html2canvasλŠ” 지도가 λ Œλ”λ§λ  λ•ŒκΉŒμ§€ 기닀리지 μ•ŠμŠ΅λ‹ˆλ‹€. UseCors=true인 κ²½μš°μ—λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. tileLayersκ°€ λ‘œλ“œλ  λ•ŒκΉŒμ§€ 기닀릴 방법이 μžˆμŠ΅λ‹ˆκΉŒ? load 이벀트λ₯Ό μ‚¬μš©ν•˜λ €κ³  μƒκ°ν–ˆμ§€λ§Œ μ–΄λ–»κ²Œ ν•  수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

감사

이것이 μ—¬μ „νžˆ v1.0.0 의 λ¬Έμ œμž…λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ jsfiddle 에 λŒ€ν•œ 예λ₯Ό κ³΅μœ ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” Reactλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 지도λ₯Ό μ΄λ™ν•œ ν›„ 전단지 ꡬ성 μš”μ†Œκ°€ μž¬μ„€μ •λ˜μ–΄ λ§ˆμ§€λ§‰ 쀑앙과 ν™•λŒ€/μΆ•μ†Œ μˆ˜μ€€μ„ μœ μ§€ν•©λ‹ˆλ‹€. 제곡된 지도가 μƒˆ μ§€λ„μ΄λ―€λ‘œ html2canvas와 더 이상 μΆ©λŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ’‹μ•„, μ—¬κΈ°μ—μ„œ jsfiddle μ½”λ“œλ₯Ό μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€. http://jsfiddle.net/2zkLkLxc/
V1.0.0μ—λŠ” 더 이상 클리핑 λ¬Έμ œκ°€ μ—†μ§€λ§Œ 지도λ₯Ό 이동할 λ•Œ μ•„μ΄μ½˜ 클리핑(μ–Έμ œλ“ μ§€) 및 타일 클리핑과 κ΄€λ ¨λœ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
νƒ€μΌμ˜ 핡을 μ œκ±°ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ 아무 것도 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ μ½”λ“œμ—μ„œ v.1.0.0으둜 μ—…λ°μ΄νŠΈν–ˆκ³  μ•„μ΄μ½˜ 클리핑이 μ—†κΈ° λ•Œλ¬Έμ— μ΄μƒν•©λ‹ˆλ‹€.

이 ν˜ΈλŠ” μ›μ €μžμ˜ μΆ”κ°€ 정보 μš”μ²­μ— λŒ€ν•œ 응닡이 μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ λ¬Έμ œμ— μžˆλŠ” μ •λ³΄λ§ŒμœΌλ‘œλŠ” 쑰치λ₯Ό μ·¨ν•˜κΈ°μ— μΆ©λΆ„ν•œ 정보가 μ—†μŠ΅λ‹ˆλ‹€. 더 쑰사할 수 μžˆλ„λ‘ ν•„μš”ν•œ 닡변이 μžˆκ±°λ‚˜ 찾으면 연락해 μ£Όμ‹­μ‹œμ˜€.

같은 λ¬Έμ œκ°€ μžˆμ§€λ§Œ Google Map λŒ€μ‹  Leaflet Map을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
μ½”λ“œλŠ” μ•„λž˜μ— μžˆμŠ΅λ‹ˆλ‹€

var λ³€ν˜•=$(".λ¦¬ν”Œλ¦Ώ 지도 μ°½").css("λ³€ν™˜");
if (λ³€ν™˜) {
var c = transform.split(",");
var d = parseFloat(c[4]);
var h = parseFloat(c[5]);
$(".leaflet-map-pane").css({
"λ³€ν™˜": "μ—†μŒ",
"μ™Όμͺ½": d,
"상단": h
})
}
html2canvas(document.body).then(ν•¨μˆ˜(μΊ”λ²„μŠ€){
$(".leaflet-map-pane").css({
μ™Όμͺ½: 0,
상단: 0,
"λ³€ν™˜": λ³€ν˜•
})
} // 여기에 html2canvas 1.0.0-alpha.9κ°€ μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@CraigVA 정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

클리핑 λ¬Έμ œμ™€ κ΄€λ ¨ν•˜μ—¬ ν˜„μž¬ stackoverflow에 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 전단지 1.3.1을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€ λ‚˜μ—κ²Œ 지침을 μ œκ³΅ν•  수 μžˆλ‹€λ©΄ λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” 여기에 μžˆμŠ΅λ‹ˆλ‹€.

@niklasvh λ¬Έμ œλŠ” μ—¬μ „νžˆ μ‘΄μž¬ν•©λ‹ˆλ‹€: http://jsfiddle.net/x3jzsg9b/4/

λ¬Έμ œλŠ” μ—¬μ „νžˆ μ‘΄μž¬ν•©λ‹ˆλ‹€: https://jsfiddle.net/x512pgjt/269/

@Amarandon @bomba1990

μ§€λ„μ—μ„œ λ Œλ”λŸ¬ νŒ¨λ”©μ„ μ œκ±°ν•΄ λ³΄μ„Έμš”. 그것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€.

map.getRenderer(지도).options.padding = 0;

이것은 μ‚¬λž‘μŠ€λŸ½κ²Œ μΌν–ˆμŠ΅λ‹ˆλ‹€!

html2canvas(document.querySelector("#mapid"), {
allowTaint: 사싀,
useCORS: 사싀
}).then(μΊ”λ²„μŠ€ => {
document.body.appendChild(μΊ”λ²„μŠ€)
});

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰