<p>html์— ์บ”๋ฒ„์Šค ์š”์†Œ๊ฐ€ ํฌํ•จ ๋œ ๊ฒฝ์šฐ html2canvas๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ</p>

์— ๋งŒ๋“  2017๋…„ 12์›” 13์ผ  ยท  29์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: niklasvh/html2canvas

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ :

๋ฐ˜์‘ ํ”„๋กœ์ ํŠธ์—์„œ html2canvas๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. html์— ์บ”๋ฒ„์Šค ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์„ ๋•Œ html2canvas๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค ์˜์—ญ์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…์„ธ์„œ:

์ด๊ฒƒ์€ html ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค
image

์ด๊ฒƒ์€ ์บ”๋ฒ„์Šค ๊ทธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค

image

์บ”๋ฒ„์Šค ์˜์—ญ์—์„œ 'echarts-for-react'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด๋” ๋งต์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ทธ๋ฆผ ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด dowload ๊ทธ๋ฆผ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋œ html2canvas ๋ฒ„์ „ : 1.0.0-alpha.4
  • ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋ฒ„์ „ : Chrome 60.0.3112.7
  • ์šด์˜ ์ฒด์ œ : windows

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

removeContainer : false๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ชจ๋ฐ”์ผ Chrome์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  29 ๋Œ“๊ธ€

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

jsfiddle์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ™์€ ๋ฌธ์ œ. ํŽ˜์ด์ง€์— chartjs ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์œผ๋ฉฐ ๋” ์ด์ƒ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์—์„œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋ฐ”์ด์˜ฌ๋ฆฐ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
https://jsfiddle.net/outerbound/v7p71wzr/

์ด๊ฒƒ์€ ํฌ๋กฌ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(, ์‚ฌํŒŒ๋ฆฌ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)

๋ฌธ์ œ๋Š” ๋ Œ๋”๋งํ•˜๊ธฐ ์ „์— ์ปจํ…Œ์ด๋„ˆ ์–‘์‹ DOM์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. ์ฑ„์ ์ž...

html2canvas๋Š” gridstack.js ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vue (vue-chart.js)์™€ ํ•จ๊ป˜ chart.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  Chrome์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. html2canvas๋Š” gridstack.js์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. html2canvans๋ฅผ gridstack๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋งจ ์œ„์— ์Œ“์ž…๋‹ˆ๋‹ค.
image

Nemo0915 I jsfiddle gridstack.js์œผ๋กœ, ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์˜ ์ž‘์—… fine.So ์–ด์ฉŒ๋ฉด ๊ทธ gridstack.js์˜ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค,ํ•˜์ง€๋งŒ ๋‚œ ์•„์ฃผ ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ, Firefox๋Š” ๊ดœ์ฐฎ์ง€ ๋งŒ Chorme๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@bigfacewo ๋‹ต์žฅ
image

@ Nemo0915 0.5.0-beta4 ๋ฒ„์ „์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” jsfiddle . ์Šคํฌ๋ฆฐ ์ƒท์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
qq 20171220150328
1.0.0-alpha4 ๋ฒ„์ „, jsfiddle , ํฌ๋กฌ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ์š”์†Œ๊ฐ€ ์ƒ๋‹จ์— ์Œ“์ด๋Š” ๋ฌธ์ œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Firefox์˜ ์Šคํฌ๋ฆฐ ์ƒท์ž…๋‹ˆ๋‹ค.
qq 20171220150946

Chrome ๋ฒ„์ „ : 63.0.3239.108
Firefox ๋ฒ„์ „ : 57.0.2

์˜ต์…˜์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : removeContainer : false์ด ๋ฌธ์ œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค ....

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @IxAres , ๊ทธ๊ฒƒ์€ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

https://github.com/niklasvh/html2canvas/commit/38749bc4b6a861f778a915491fc7d84fea6e1a2f ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

removeContainer : false๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ชจ๋ฐ”์ผ Chrome์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

@niklasvh ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ„์ „ 1.0.0-rc.5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Screenshot 2020-02-17 at 10 54 42 AM

์ด๋ด, ๋ฌด์Šจ ํ•ด๊ฒฐ์ฑ…?

2020 ๋…„ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

+1์ด ๋™์ž‘๋„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค

Chart.js ๋ฐ Firefox 76.0 (64 ๋น„ํŠธ) ๋ธŒ๋ผ์šฐ์ €์— ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์š”์†Œ ๋‚ด๋ถ€์˜ Mapbox์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋„์™€์ฃผ์„ธ์š”.
๋‚˜๋Š” ๋˜ํ•œ removeContainer : false๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@Rajeshgtstpl mapbox ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งต ๋ฐ•์Šค ์˜ต์…˜์—์„œ preserveDrawingBuffer: true ๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

Chart.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ drawImage๋ฅผ ์‚ฌ์šฉํ•œ ์บ”๋ฒ„์Šค์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด drawImage์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— image.crossOrigin = 'anonymous'๋ฅผ ์ด๋ฏธ์ง€ ์š”์†Œ์— ๋„ฃ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

image.crossOrigin = 'anonymous'

๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค :)

์•ˆ๋…•ํ•˜์„ธ์š”, ๋น„์Šทํ•œ ์บ”๋ฒ„์Šค ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ threejs ์žฅ๋ฉด์— ๊ถŒ์žฅ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ? v1.0.0-rc.7๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ threejs ์บ”๋ฒ„์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋‹ค์Œ๊ณผ ๊ฐ™์ด threejs ์บ”๋ฒ„์Šค์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

image

ํ•˜์ง€๋งŒ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

image

@AchoArnold preserveDrawingBuffer: true ๊ฐ€ Mapbox์—์„œ ์ €๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ : ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๊นŒ?

Chart.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ drawImage๋ฅผ ์‚ฌ์šฉํ•œ ์บ”๋ฒ„์Šค์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด drawImage์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— image.crossOrigin = 'anonymous'๋ฅผ ์ด๋ฏธ์ง€ ์š”์†Œ์— ๋„ฃ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

image.crossOrigin = 'anonymous'

๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค :)

๊ทธ๊ฒƒ์€ ๋‚ด ์ƒ๋ช…์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰