Html2canvas: ํšŒ์ „ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2013๋…„ 05์›” 10์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: niklasvh/html2canvas

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„!
์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? transform: rotate(23deg); ?
๋งŽ์€ ๊ฐ์‚ฌ

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

CSS ๋ณ€ํ™˜์œผ๋กœ div๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•: ์›๊ทผ?

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

CSS ๋ณ€ํ™˜์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ base64์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณ€ํ™˜ CSS๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ•ด๊ฒฐ์ฑ…???

@arindamm ์ด์— ๋Œ€ํ•œ ์œ ์ผํ•œ ๋น ๋ฅธ ํ•ด๊ฒฐ์ฑ…์€ "์บ”๋ฒ„์Šค"๋ฅผ "CSS"๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์บ”๋ฒ„์Šค์—์„œ ์ด๋ฏธ์ง€๋‚˜ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค(์ด ์ž‘์—…์€ "html2canvas" ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์™ธ๋ถ€์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์žˆ์–ด์•ผ ํ•จ).

๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜จ๋ผ์ธ ์ด์•ผ๊ธฐ ์ฑ…์„ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ๋งŒํผ ์ด๋ฏธ์ง€์™€ ํ…์ŠคํŠธ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ํšŒ์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด DIV ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. div ์š”์†Œ์˜ ๋ฐ์ดํ„ฐ๋กœ ์บ”๋ฒ„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ œ์•ˆ ๋ถ€ํƒ๋“œ๋ ค๋„ ๋ ๊นŒ์š”?

@arindamm ๋‹น์‹œ์— ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งํ–ˆ๋“ฏ์ด,
"ํšŒ์ „"์ด ์žˆ๋Š”์ง€ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์š”์†Œ์™€ "window.getComputedStyle"(๋˜๋Š” jquery)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์Šคํƒ€์ผ์—์„œ "ํšŒ์ „"ํ•˜๋ฉด ๊ฐœ์ฒด ๋‚ด๋ถ€์— ์žˆ๋Š” "ํšŒ์ „" ๊ฐ’๊ณผ ํ…์ŠคํŠธ(๋˜๋Š” ์ด๋ฏธ์ง€)๋ฅผ ๊ฐ€์ ธ์™€ "์บ”๋ฒ„์Šค"์— ๋Œ€ํ•œ ํšจ๊ณผ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

 var ์บ”๋ฒ„์Šค = document.getElementById('myCanvas');
 var ์ปจํ…์ŠคํŠธ = ์บ”๋ฒ„์Šค.getContext('2d');
 var ์ง์‚ฌ๊ฐํ˜• ๋„ˆ๋น„ = 150;
 var ์ˆ˜์ง ๋†’์ด = 75;
 // ์ปจํ…์ŠคํŠธ๋ฅผ ์บ”๋ฒ„์Šค ์ค‘์•™์œผ๋กœ ๋ณ€ํ™˜
 context.translate(canvas.width / 2, canvas.height / 2);
 // ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 45๋„ ํšŒ์ „
 context.rotate(Math.PI / 4);
 context.fillStyle = 'ํŒŒ๋ž€์ƒ‰';
 context.fillRect(rectWidth / -2, rectHeight / -2, rectWidth, rectHeight);

์—ฐ๊ฒฐ:
https://developer.mozilla.org/en-US/docs/DOM/window.getComputedStyle
http://api.jquery.com/css/ (Jquery๋กœ CSS ๊ฐ€์ ธ์˜ค๊ธฐ)
http://www.html5canvastutorials.com/advanced/html5-canvas-transform-rotate-tutorial/ (์บ”๋ฒ„์Šค+์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํšŒ์ „)

๋ฉ”๋ชจ:
์ค€๋น„๋œ ์†”๋ฃจ์…˜์€ ์—†์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋งํฌ์™€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ท€ํ•˜์˜ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ๋กฌ:
chrome.tabs.captureVisibleTab(integer windowId, object options, function callback)
๋งํฌ: http://developer.chrome.com/extensions/tabs.html

ํŒŒ์ด์–ดํญ์Šค: void drawWindow( in nsIDOMWindow window, in float x, in float y, in float w, in float h, in DOMString bgColor, in unsigned long flags [optional]);
๋งํฌ: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D?redirectlocale=en-US&redirectslug=DOM%2FCanvasRenderingContext2D#drawWindow ()

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฐ™์€ ์ฃผ์ œ์— ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ blob์œผ๋กœ ํฌํ•จํ•  ๋•Œ ํšŒ์ „์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ด์ƒํ•œ ์ ์€ ์–ผ๋ฃฉ ์—†์ด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ์ฃผ ์ „์— ๋ฐ›์€ ๋‚ด ํŒŒ์ผ์—๋Š” 0.4.1์ด๋ผ๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ bower๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋†€์•˜๋˜ ๊ณณ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค ...

0.4.1์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ๋ž€์„ ์„ ํƒํ•  ๋•Œ Content div๊ฐ€ ๋‚ด๋ ค์˜ต๋‹ˆ๋‹ค.
๋ˆ„๊ตฌ๋“ ์ง€ ์ €๋ฅผ ๋„์™€์ฃผ์„ธ์š”.

์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.jjoe64.com/2015/10/html2canvas-and-css-transform-rotate.html

@jjoe64 ๋งํฌ๋กœ ๊ฐ์‚ฌํ•˜์ง€๋งŒ html2canvas์—๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

html2canvas๋Š” ์บ”๋ฒ„์Šค์˜ ๋ Œ๋”๋ง(๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ) DOM ์š”์†Œ(๋˜๋Š” ์ „์ฒด ํŽ˜์ด์ง€)์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ๋ Œ๋”๋ง ์บ”๋ฒ„์Šค ํƒœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ํšŒ์ „์ด ์žˆ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ ํšŒ์ „๋œ ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ์— ๋Œ€ํ•œ _ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•_์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

CSS ๋ณ€ํ™˜์œผ๋กœ div๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•: ์›๊ทผ?

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