Html2canvas: ๋ ˆํ‹ฐ ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ ์บ”๋ฒ„์Šค ๋ Œ๋”๋ง์ด ํ๋ฆฟํ•จ

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

ํ›Œ๋ฅญํ•œ ๋„์„œ๊ด€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์ฃผ๋ชฉํ•˜๋Š” ํ•œ ๊ฐ€์ง€๋Š” ๋ ˆํ‹ฐ ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์Šคํฌ๋ฆฐ ์ƒท์ด ํ๋ฆฟํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ https://github.com/niklasvh/html2canvas ์˜ ์Šคํฌ๋ฆฐ ์ƒท์ด ๋ ˆํ‹ฐ ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ ๋ณด์ด๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค ( ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€ ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ๊ณผ ๊ฐ™์Œ).
screen shot 2014-05-24 at 1 29 51 pm

์บ”๋ฒ„์Šค ๋ Œ๋”๋ง ์–ด๋”˜๊ฐ€์— window.devicePixelRatio ์™€ context.backingStorePixelRatio ์‚ฌ์ด์˜ ๋น„์œจ์„ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...?

์ถ”์‹  ๋‹ค์Œ์€ ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด์„œ ์ฐพ์€ ์œ ์šฉํ•œ ๋งํฌ์ž…๋‹ˆ๋‹ค.

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

๋ถ„๋ช…ํžˆ ๊ธฐ์กด ์บ”๋ฒ„์Šค๋ฅผ ๋ Œ๋”๋ง์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ ˆํ‹ฐ ๋‚˜์— ํ‘œ์‹œ๋˜๋„๋ก ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ).

์˜ˆ:

var w = 1000;
var h = 1000;
var div = document.querySelector('#divtoconvert');
var canvas = document.createElement('canvas');
canvas.width = w*2;
canvas.height = h*2;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
var context = canvas.getContext('2d');
context.scale(2,2);
html2canvas(div, { canvas: canvas }).then(function(canvas) {
    // do what you want
});

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

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค. # 379, # 373, # 340, # 203, # 312, # 158, # 390์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/niklasvh/html2canvas/pull/127 ํ๋ฆฟํ•œ ๋ถ€๋ถ„ ์ˆ˜์ •

๊ณ ์ •๋˜์ง€ ์•Š์Œ

: +1 :

+1 ์ˆ˜์ • ํ•ด์ฃผ์„ธ์š”

+1 scalling ๋ฐ zooming CSS ์Šคํƒ€์ผ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์Šคํฌ๋ฆฐ ์ƒท์„ ์ฐ๋Š” html์„ ํ™•๋Œ€ / ์ถ•์†Œํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋” ์„ ๋ช…ํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1 ์ˆ˜์ • ํ•ด์ฃผ์„ธ์š”

+1 ์ˆ˜์ •

์•ˆ๋…•ํ•˜์„ธ์š”.
ํ˜•๋‹˜,์ด ๊ตฌ์„ฑ์„ ์‹œ๋„ํ•ด๋ณด์„ธ์š”. 100 % ํ•ด๊ฒฐ์ด ์•„๋‹ˆ๋ผ ํ’ˆ์งˆ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

html2canvas (document.getElementById ( 'flag'), {
useCORS : true,
allowTaint : true,
letterRendering : true,
onrendered : function (canvas) {
var ctx = canvas.getContext ( '2d');
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = ๊ฑฐ์ง“;
},
});

@breim
Bro ๏ผŒ 3Q๊ฐ€ ๋„์›€์„ ์ฒญํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ทธ๋‹ค์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ ˆํ‹ฐ ๋‚˜ ์žฅ์น˜์˜ ๋ Œ๋”๋ง ๋ฌธ์ œ

๊ณ ์ณ์ฃผ์„ธ์š”!

+1 ์ˆ˜์ • ํ•ด์ฃผ์„ธ์š”

Plz๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์ณ, Orz

+1

๋ถ„๋ช…ํžˆ ๊ธฐ์กด ์บ”๋ฒ„์Šค๋ฅผ ๋ Œ๋”๋ง์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ ˆํ‹ฐ ๋‚˜์— ํ‘œ์‹œ๋˜๋„๋ก ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ).

์˜ˆ:

var w = 1000;
var h = 1000;
var div = document.querySelector('#divtoconvert');
var canvas = document.createElement('canvas');
canvas.width = w*2;
canvas.height = h*2;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
var context = canvas.getContext('2d');
context.scale(2,2);
html2canvas(div, { canvas: canvas }).then(function(canvas) {
    // do what you want
});

@MisterLamb ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

+1

+1 ์ˆ˜์ •

@MisterLamb ๋‚˜๋Š” ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์€ ์ˆ˜์ • ์œผ๋กœ์ด ๋ฐ”์ด์˜ฌ๋ฆฐ ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? ๋ฐ”์ด์˜ฌ๋ฆฐ์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๊ณ ์ด ๊ตฌํ˜„์—์„œ ๋™์ผํ•œ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
original
notimproved

@MisterLamb ์•„ ๋ฐฉ๊ธˆ 0.5.0-alpha1๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ ๋” ์ž˜ ์ž‘๋™ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ

+1

@MisterLamb et al, ์˜ค๋Š˜ ๋ฐฉ๊ธˆ ์‹œ๋„

ํŽธ์ง‘ : ์•„๋งˆ ๋‚ด ๋ฒ„๊ทธ, ๋ณ€๊ฒฝ๋œ ๋ฐ”์ด์˜ฌ๋ฆฐ ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ 2 : ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์—†์—ˆ๊ณ , ์ด์™€ ๊ฐ™์ด ๋‹ค์‹œ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ์ด์ œ๋Š” ์•ฝ๊ฐ„์˜ ์˜คํ”„์…‹์ด ์žˆ์ง€๋งŒ ๋ณด์ด๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ h2c๊ฐ€ ์™„์ „ํžˆ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์Šคํƒ€์ผ์ด ์žˆ๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ์—‰๋ง์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘ 3 : ์˜ˆ, ์˜คํ”„์…‹์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด document.body๋กœ ์ด๋™ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

@MisterLamb ๋‹น์‹ ์€ ์ง„์ •ํ•œ ์ฒœ์žฌ์ž…๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ... ๋‚ด ํ•˜๋ฃจ๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

@MisterLamb ๋‹น์‹ ์€ ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค ๐Ÿ‘

@makc ๋‚˜๋„! ๋นˆ ์บ”๋ฒ„์Šค ๊ฐ€์ ธ ์˜ค๊ธฐ-์ž์ฒด ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ- @eKoopmans ์†”๋ฃจ์…˜์€ ์ง€๊ธˆ๊นŒ์ง€ ํ…Œ์ŠคํŠธ์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : https://github.com/niklasvh/html2canvas/pull/1087 .. ํ˜„์žฌ ์‹คํ–‰ ์ค‘

# 1087์— ์ฐฌ์„ฑํ•˜์—ฌ ๋งˆ๊ฐ

@MisterLamb ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ์ง€์˜ ํ•ด์ƒ๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ• ??
์ด ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ 96dpi๋กœ ์ €์žฅํ•˜๋ฉด 300dpi ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ˆ ??

@ shivtumca12 ์ตœ์‹  ๋ฆด๋ฆฌ์Šค ์ธ v1.0.0-alpha.1 ์—์„œ๋Š” scale ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด์ƒ๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( scale: 2 ๋Š” ๊ธฐ๋ณธ 96dpi์—์„œ ํ•ด์ƒ๋„๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆผ).

// html2canvas๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— 90 % ํ™•๋Œ€ ํ•œ ๋‹ค์Œ ๋‹ค์‹œ 100 %๋กœ ํ™•๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

document.body.style.zoom = '99 % ';
html2canvas (document.querySelector ( "# content"), {allowTaint : false, widht : _width, height : _height}). then (function (canvas) {

    // var pdf = new jsPDF('p','pt','a4');
    // pdf.addImage(canvas.toDataURL("image/png"), 'PNG', 10, 10, 580, 0)                            
    // pdf.save('Grafico.pdf');        
    var link = document.createElement('a');
    link.href = canvas.toDataURL("image/png");
    link.download = 'Dashboard.png';
    document.body.appendChild(link);
    link.click();
    link.style.display = 'none';
    document.body.removeChild(link)        
    document.body.style.zoom = '100%';        
    $('.preloader-wrapper').hide();
});

@MisterLamb ์œ„์˜ ์†”๋ฃจ์…˜์€ html ํŽ˜์ด์ง€์˜ ํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋™์•ˆ ์ด๋ฏธ์ง€์˜ ํ…์ŠคํŠธ๋ฅผ ํ›Œ๋ฅญํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ html ํŽ˜์ด์ง€์˜ ์ด๋ฏธ์ง€ ๋‚ด์šฉ (์ด๋ฏธ์ง€)์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ๋ฆฟํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์กฐ์–ธ ํ•ด์ฃผ์„ธ์š”.

์ด๋ฏธ์ง€๋„ ์—ฌ์ „ํžˆ ํ๋ฆฟํ•ฉ๋‹ˆ๋‹ค.

window.devicePixelRatio = 2;

๋‚˜๋Š” html2canvas๋ฅผํ•˜๊ธฐ ์ „์— ์ด๊ฒƒ์„ ๋„ฃ์—ˆ๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ํŽ˜๋ฅด์‹œ์•„์–ด ํ…์ŠคํŠธ utf8์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๊ธ€๊ผด์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
notimproved (3)

http://jsfiddle.net/o0a8pbwd/1/ ์ฝ”๋“œ๋กœ

image

์ด ๊ทธ๋ฆผ์€ ์™œ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ?

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