ããã¯æ©èœèŠæ±ã®è©³çŽ°ã§ãã è¿ãããcanvas
toDataURL
ãåŒã³åºãããšã§ãPNGãç°¡åã«çæã§ããŸãã ããããç»åã®å質ã¯ããªããŒãããŠããŸã/æªãã§ãã ã°ãŒã°ã«ãè¡ã£ããšãããããã©ã«ãã§ã¯96dpiã®ç»åãè¿ãããã ãã§ããããšãããããŸããã ãããŠããããæ¹åããæšæºçãªæ¹æ³ã¯ãªãããã§ãã ãŸãã toDataURLHD
ã¯å®éšçãªãã®ã§ããããŸã£ããæ©èœããŸããã
html2canvas
ãããé«ã解å床ã§ç»åãè¿ãæ¹æ³ã¯ãããŸããïŒ ãŸãã¯ãDOMãã¬ã³ããªã³ã°ããæ¹æ³ãæäŸã§ããå Žåã§ããDOMã䜿çšããã©ã€ãã©ãªïŒãã¹ãŠã®èšç®ãããã¹ã¿ã€ã«ãé©çšãããŠããïŒã䜿çšããŠãå¿
èŠãªç»åãçæã§ããŸãã
ä»ã®åé¡/ãªã¯ãšã¹ãã®ããæç¹ã§ããã«ã€ããŠã®è©±ãããã誰ãããã«ãªã¯ãšã¹ããéä¿¡ããããšã¯ç¥ã£ãŠããŸããããã«ãªã¯ãšã¹ããããŒãžãããã®ãèŠãããšããããŸããã
ããã€ã¹ã®ãã¯ã»ã«å¯åºŠããã§ãã¯ããããã«äœ¿çšããäœæ¥æ¹æ³ããããŸãã ããããããã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã 代ããã«ãããé«ãdpiã§ã¬ã³ããªã³ã°ããããã«æ瀺ãããã©ã¡ãŒã¿ãŒãå¿ èŠã§ããïŒ
@missingãããDPIãæå®ãããã©ã¡ãŒã¿ã¯çŽ æŽãããã§ãããã
ãŸããããã€ã¹ã®ãã¯ã»ã«å¯åºŠã®äœæ¥æ¹æ³ãå ±æããŠãããŸããªãå Žåã¯ãããã¯ãã°ãããããšã§ãã ç§ã®äž»ãªã¢ããªã±ãŒã·ã§ã³ã¯ãæ倧50èªã®åèªã¯ã©ãŠãã®pngããšã¯ã¹ããŒãããããšã§ãã ã ããç§ã¯ããã«ææãäžããããã©ãŒãã³ã¹ã«ã¯ããŸãé¢å¿ããããŸããã
ããªãã®åé¡ã¯ç»åã®å質ã§ããããããšããŒãããå¹æã§ããïŒå Žåã«ãã£ãŠã¯ãããã€ãã®ç»åã¯ãŒãããå¹æãæã€html2canvasã«ãã£ãŠçæãããŸãïŒïŒ
@brcontainerç»åã®å質ãåé¡ã ãšæããŸãã ç§ãæãã«ã ããšãã°ã100ïŒ
ãºãŒã ã§ã¯ãåçã¯ãŸãšããªããã«èŠããŸãã ãããã5ïŒ
ã§ããºãŒã ãããšãåçã®å質ãèããäœäžããããšãããããŸãã æ·»ä»ç»åãã芧ãã ããã
ç§ã¯å®è¡æã«åé¡ã®äŸãèŠãŠããäœãã確信ããããšãã§ããã ãã§ãã
http://jsfiddle.net/ã䜿çšããŠåãå Žæãè©Šããããã«ãªã³ã¯ãæçš¿ããŠãã ããã
[ç·šé]
html2canvasã«ãã£ãŠçæããããã£ã³ãã¹ã«_zoom_ãé©çšããããšããŠããå¯èœæ§ãããå Žåã¯ãïŒç»åãšããŠä¿åããåã«ïŒæ¬¡ã䜿çšããŠã¿ãŠãã ããã
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
幞éã
ããã
96DPIãããé«ã解å床ãå¿ èŠã§ãã 300DPIã®ãããªãã®ãå¿ èŠã§ãã
ããã¯html2canvasãšé¢ä¿ãããã®ã§ããããïŒ
ç»åã®ãŒããã«ã€ããŠãåãåé¡ããããŸãã ãŒãããåãé€ããèŠæ ãã®è¯ãDPIãæäŸãããœãªã¥ãŒã·ã§ã³ãå¿ èŠã§ãã
ãããã©ã®ããã«è¡ããããã«ã€ããŠã®èã/ææ¡ããŸãã¯åãå¹æãéæããããã®ä»£æ¿æ¹æ³ã¯ãããŸããïŒ
ããããšã
@brcontainerç§ã¯ä»ããªãã®ç·šéã ãã§ãã ç§ã¯ããªããææ¡ããããšãããŸããããããã§ãç»è³ªã¯ããŸããããŸããã§ããã ãããç§ãããããšã§ã-
var ctx = canvas.getContext('2d');
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
var rawData = canvas.toDataURL("image/png");
é åºãééã£ãŠããå Žåã¯ãç»åã®ãµã€ãºãå€æŽããåã«ãImageSmoothingEnabledããé©çšããå¿ èŠããããŸãã
ã³ãŒãã®ãµã³ãã«ãhttp://jsfiddle.netã«å ¥ããŠãç·šéããŠã¿ãŸã
ããã«ã¡ã¯ãã¿ããªã
toDataURLã®96dpiå¶çŽãªãã§é«è§£å床ã®ç»åãã¢ããããŒãããããšæããŸãã toDataURLHDã¯ãŸã å©çšã§ããªãã®ã§ãã©ãããã°ç§ã®å€¢ãå®çŸã§ããŸããïŒ :-)
ãã³ããäºåã«æè¬ããŸã
@brcontainerç»åã®ãµã€ãºããŸã£ããå€æŽããŠããªãããããµã€ãºãå€æŽããåã«ã¹ã ãŒãžã³ã°ãé©çšããããšã®æå³ãããããŸããã ãããã«ãããç§ã¯ããªããhttp://jsfiddle.net/tankchintan/92mra/4/ãèŠãããã«jsfiddleãäœæããŸãã
ããã解決ãããã®ãæ¬åœã«æ¥œãã¿ã«ããŠããŸãïŒ :)
ããªããæ··ä¹±ããŠããå人ããµã€ãºå€æŽããªããã°ãªããªãtoDataURL
ããããŸããããªãã¯CANVAS
ãµã€ãºãå€æŽããªããã°ãªããŸããã
äŸãäœæããããšããŠããŸãããããã§ãæ©èœããŸããã
ããã
ç§ã¯ããè¯ãç»è³ªã®ããã«ãããã®ææ¡ã«åŸãããšããŠããŸããããããç§ã«ã¯ããããŸããã
brcontainerãããªãã話ããŠããã¢ã€ãã¢ã§ãtankchintanãäœæããJSãã£ãã«ãæ確ã«ããããå€æŽ/äœæãããããããšã¯å¯èœã§ããïŒ ããã¯ç§ã«ã¯æå³ããããŸããã2åã®ãµã€ãºã§ç»åãäœæããŠããç»åã192 DPIã«å€æããåŸããç»åã®ãã¯ã·ã¬ãŒã·ã§ã³ã¯æ®ããŸãã
ããã«ã¡ã¯çããããã®åé¡ã«ã€ããŠä»ã«ãã£ãŒãããã¯ã¯ãããŸããïŒ å質/解å床ãäžããããã«zoomFactor
èšå®ã§ããPhantomJSã®ãããªãã®ãšæ¯èŒããŠãhtml2canvasã§éåžžã«ããã®ç»è³ªãäœéšããŠããŸãã
åæ§ã®åé¡ããããŸãã WebããŒãžã®ã¹ãããã·ã§ãããPDFããã¥ã¡ã³ãã«ååŸããå¿ èŠããããŸãããã®ããã¥ã¡ã³ãã§ã¯ãhtml2canvasã䜿çšããŠdivãç»åã«å€æããŠãããiTextsharpã䜿çšããŠç»åãPDFã«è¿œå ããŸãã ãã ããçæãããç»åã¯å°ããŒãããŠããããã«èŠããç®ã§åžžã«èŠãããšãå°é£ã«ãªããŸãã html2canvasã§äœææã«æå®ãã解å床ã®ç»åãäœæã§ãããã©ããç¥ãããã§ãã
ããã
äžèšãšãŸã£ããåãèŠä»¶ããããŸãã ãšåãåé¡ãçŽé¢ããŠããŸãã
ãWebããŒãžã®ã¹ãããã·ã§ãããPDFããã¥ã¡ã³ãã«ååŸããŸãããã®ããã¥ã¡ã³ãã§ã¯ãhtml2canvasã䜿çšããŠdivãç»åã«å€æããŠãããç»åãPDFã«è¿œå ããŸããã
ãã ããçæãããç»åã¯å°ããŒãããŠããããã«èŠããŸãã
äžèšã®ææ¡ã«åŸããŸããããããã§ããŒãããç»åã衚瀺ãããŸãã
ããã«ç§ã®ã³ãŒãã§ïŒhtml2canvasã¯ã·ã¹ãã ã®è§£å床ã«åºã¥ããŠãŠã§ãããŒãžã®ã¹ãããã·ã§ãããçæããŸãã
Iamã¯ãã·ã¹ãã ã®è§£å床ã«åºã¥ããŠãç°ãªããµã€ãºã§åãWebããŒãžã®ãã¹ãããã·ã§ããããååŸããŠããŸãã
äŸ ïŒ
ç»åãµã€ãºïŒ816x422
ç»åãµã€ãºïŒ1193x437
ç»åãµã€ãºïŒ1275x437
ããã§ç§ã®æåŸ
ã¯ïŒ2000 x1784寞æ³ä»¥äžã§ãã
ãã®ç»åã®å¯žæ³ãååŸããããšã¯å¯èœã§ããã
貎éãªãææ¡ãããã ãã貎éãªæéãããããšãããããŸããã
ãã®ããã«+1ã PDFã«æ¿å ¥ããhtml2canvasãå«ãç»åãååŸããããšããŠããŸãããå質ããŒãããŠããŸãã
ããé«ã解å床ã§ãšã¯ã¹ããŒããããèŠçŽ ã«å¯ŸããŠãparentNodeã§CSSå€æè¡åã䜿çšããŠã¿ãŸãããïŒ ããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸãã äŸïŒãtransformïŒscaleïŒ2ã2ïŒã
@mudcubeã¯ç§ã®ããã«éšåçã«
@brcontainerããã¯ç§ã®ããã«ããŸãåããŠããŸã
解決çã¯ãããŸããïŒ ãŒãããç»åã®è§£å床ãé«ããæ¹æ³ãå ±æããŠãã ããç§ã¯ããã®PDFãäœæããå¿ èŠããããŸã
+1ããã«å¯Ÿãã解決ç/ã¬ã€ãã©ã€ã³ã¯ãŸã ãããŸããïŒ
解決çãèŠã€ãããŸãããïŒ
ã¿ããªããããããŸãããtransform: scale(2, 2)
䜿çšããŠãã ããã
詳现ãæããŠããã ããŸããïŒ
ã¹ã¯ãªãŒã³ã·ã§ãããäœæããçŽåã®@matiasinsaurraldeã¯ã cssã«ãŒã«ãå«ãcssã¯ã©ã¹.x2
ãèŠçŽ ã«è¿œå ãã html2canvas
ã³ãŒã«ããã¯ã§ãã®ã¯ã©ã¹ãåé€ããŸãã ããã«ãµã€ãºã®èŠçŽ ãšããã«ãµã€ãºã®ã¹ã¯ãªãŒã³ã·ã§ããã衚瀺ãããŸãã ãŸããã·ãŒã ã¬ã¹ã§ããããããµã€ãºå€æŽãçºçããªãå¯èœæ§ããããŸãã
ç§ãããªãã®ææ¡
ã¹ã±ãŒã«ã¯ç§ã«ãšã£ãŠè§£å床ãäžããŸããã§ããã JSã§è§£æ±ºããªããã°ãªããŸããã§ãã-
https://github.com/niklasvh/html2canvas/issues/379
éããã人ã¯ããŸããïŒ
transform: scale(2, 2);
ãdygraph.jsã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸãã
@premerddyn ããªã³ã¯ãããåé¡ã®ç§ã®è§£æ±ºçãåç
§ããŠãã ããã
ããŸãæ©èœããŠããŸãããã¹ã¯ãªãŒã³ã·ã§ããã®åã«æ¡å€§ããå¿
èŠããããŸãã
ã³ã¡ã³ããæ確ã§ãªãå Žåã¯ãããã«èª¬æãè¿œå ããŸã
ç§ããã£ãããšã¯ã2åã®ãµã€ãºã®divãäœæããŠå¯èŠæ§ã厩å£ãããããã«ãããã¹ãŠã®ã³ã³ãã³ãããã®divã«æçš¿ããŠã¹ã¯ãªãŒã³ã·ã§ãããæ®ã£ãããšã§ããããããã°ãç»åã®é®®æãã倱ãããããšã¯ãªãããã©ã³ããµã€ãºã®ã³ãŒãã埮調æŽããŠäœæããŸãããç§ã¯ãããããŸãæ©èœãããŸãããç§ã®åé¡ã¯ããã¹ãã¹ãããŒã¯ãšè€æ°è¡ã®ããã¹ãèæ¯ã«ãããŸãã
2ã«ããã¹ã±ãŒãªã³ã°ã¯ç§ã«ãšã£ãŠã¯ããŸããããŸãããã¬ã³ããªã³ã°ã¯ãŠã£ã³ããŠã®è§£å床/ãµã€ãºã«ãã£ãŠå¶éãããããšãããããŸããã ã¹ã±ãŒãªã³ã°ãããdivããŠã£ã³ããŠãããåºãå Žåããã®äžéšãåãåãããŸã
ããã§ãç»é¢ããã倧ãããã£ã³ãã¹ããã£ããã£ããæ¹æ³ã¯ãããŸãããïŒ
ããããã®ã¹ã¬ããããïŒ
var h = $(element)[0].ownerDocument.defaultView.innerHeight;
$(element)[0].ownerDocument.defaultView.innerHeight = $(element).height();
html2canvas($(element)).then(function(canvas) {
$(element)[0].ownerDocument.defaultView.innerHeight = h;
//Do whatever you want with your canvas
}
https://jsfiddle.net/enjoythedaycsk/9L966sdd/1/
ãã®äŸã§é«è§£å床ã®ãã®ãå®çŸããããšããŸããããããŸããããŸããã§ãã...
ããŠã³ããŒãpngx2ãã¿ã³ãã¯ãªãã¯ããŸãã
ãã¿ã³ãã¯ãªãã¯ãããšãã£ã³ãã¹ã2åã®ãµã€ãºã«ãªããåçããã£ããã£ãããŠããåã³ãã£ã³ãã¹ãéåžžã®ãµã€ãºã«æ»ããªã©ãããã¯ãšã³ãã§æäœãå®è¡ããããšã¯ã§ããŸããïŒ
確ãã«ãããªãã¯ãããè¡ãããšãã§ããŸãã 䜿çšããããµã€ãºã®ãã£ã³ãã¹ãããªã¬ãŒããŸã
æäŸãããã³ãŒãã å€ã®ååŸãäžæ£ç¢ºã«ãªãå¯èœæ§ãããããšãããã£ãã®ã§ã
å¹
/é«ããçŽæ¥èšå®ããŸãã
2016幎5æ7æ¥ïŒåææ¥ïŒã«ã¯ãenjoytheday [email protected]ã¯æžããŸããïŒ
https://jsfiddle.net/enjoythedaycsk/9L966sdd/1/
ãã®äŸã§é«è§£å床ã®ãã®ãéæããããšããŸããããåŸãããŸããã§ãã
ãã...ããŠã³ããŒãpngx2ãã¿ã³ãã¯ãªãã¯ããŸãã
ãã¿ã³ãã¯ãªãã¯ããããšãã®ããã«ããã¯ãšã³ãã§æäœãè¡ãããšã¯å¯èœã§ããïŒ
ãã£ã³ãã¹ã¯ãã®ãµã€ãºã®2åã«ãªããåçããã£ããã£ãããŠããåã³
ãã£ã³ãã¹ã¯éåžžã®ãµã€ãºã«æ»ãããŸããâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/niklasvh/html2canvas/issues/241#issuecomment -217634634
äžçæé·ã®ç¶ç¶çãªã€ã©ã¹ã
ForeverScape.com http://www.foreverscape.com/ | @foreverscape
https://twitter.com/foreverscape | Githubã§
https://github.com/vance/foreverscapecore | ãã¥ãŒã¹ã§
http://www.foreverscape.com/art/reviews/
@vanceãããjsfiddleã®äŸã§èšå®ã§ããŸããïŒ
https://jsfiddle.net/enjoythedaycsk/9L966sdd/1/
ç§ã¯è©ŠããŸããããããã¯ç§ã«ãã£ãŠèšå®ãããŠããŸããã
å®å šã«ç·šéããããšããæ°ãããã®ãäœæããããšãã§ããŸãã
ããã¯å€ãã®ïŒdancerã«åœ¹ç«ã¡ãŸãïŒ
ããã«ã¢ãã¯ã¢ããããããšããŸãããããã¹ãdivãä¿®æ£ããæéããããŸããã§ããã transform:scale()
äœãããã£ããã£ããŠããdivã®å
éšã®é«ãã¯åœ±é¿ãåããªããããäœãèµ·ãããŸããã ãããå€é©ã§ããçç±ã§ãã ããã¯ãããããã£ãïŒå
éšçã«ïŒå€æŽãããŠããªãããã getBoundingClientRect()
ååŸããããšã§ãã¹ãã§ããŸãã 芪ã®ã³ã³ããã¹ãã§è¡šç€ºããå Žåãå¹
/é«ãã¯_å®éã«_å€æŽãããã ãã§ãã ã¹ã±ãŒãªã³ã°ããåŸãã³ã³ããdivãååŸããå¿
èŠããããŸãã
åãåé¡ã«çŽé¢ããŠããŸãããå®è¡å¯èœãªè§£æ±ºçã¯ãããŸããïŒãŸïŒ ÂŽã»ã»ïœïœ¡ïŒãã
ãŠã£ã³ããŠããã倧ããªèŠçŽ ããã£ããã£ããããã«ããããæ©èœãããããšãã§ããŸããã å€æãããèŠçŽ ããåçŽã«ããã倧ããªãç»åãååŸããããšã¯ã§ããŸãããããã¯ãïŒããèªäœã«å¯ŸããŠïŒåããµã€ãºã®ãŸãŸã§ããããã§ãã
ç§ã¯iframeã§èªåã®ããšãããbase64ããŒã¿ãã¡ãã»ãŒãžãšããŠéãè¿ãå¿ èŠããããŸãã...次ã®ããšãè¡ããšãŠã£ã³ããŠã®ãµã€ãºå€æŽã€ãã³ããäžæããããã§ãã
åã³ã³ã¡ã³ãä»ãïŒ
//store the original size
var h = $(element)[0].ownerDocument.defaultView.innerHeight;
var w = $(element)[0].ownerDocument.defaultView.innerWidth;
//set the document to the element's size
$(element)[0].ownerDocument.defaultView.innerHeight = $(element).height();
$(element)[0].ownerDocument.defaultView.innerWidth = $(element).width();
html2canvas($(element)).then(function(canvas) {
//restore the document size
$(element)[0].ownerDocument.defaultView.innerHeight = h;
$(element)[0].ownerDocument.defaultView.innerWidth = w;
//Do whatever you want with your canvas
}
html2canvasã䜿çšããŠHTMLèŠçŽ ããé«DPIã¹ã¯ãªãŒã³ã·ã§ãããç°¡åã«ååŸããããã«ã次ã®é¢æ°ãäœæããŸããã
srcEl
ã¯æ¢åã®èŠçŽ ã§ããå¿
èŠããããŸãdestIMG
ã¯æ¢åã®ïŒç©ºã®ïŒç»åèŠçŽ ã§ããå¿
èŠããããŸãdpi
ã¯96ã®åæ°ã§ããå¿
èŠããããŸãvar makeHighResScreenshot = function(srcEl, destIMG, dpi) {
var scaleFactor = Math.floor(dpi / 96);
// Save original size of element
var originalWidth = srcEl.offsetWidth;
var originalHeight = srcEl.offsetHeight;
// Save original document size
var originalBodyWidth = document.body.offsetWidth;
var originalBodyHeight = document.body.offsetHeight;
// Add style: transform: scale() to srcEl
srcEl.style.transform = "scale(" + scaleFactor + ", " + scaleFactor + ")";
srcEl.style.transformOrigin = "left top";
// create wrapper for srcEl to add hardcoded height/width
var srcElWrapper = document.createElement('div');
srcElWrapper.id = srcEl.id + '-wrapper';
srcElWrapper.style.height = originalHeight*scaleFactor + 'px';
srcElWrapper.style.width = originalWidth*scaleFactor + 'px';
// insert wrapper before srcEl in the DOM tree
srcEl.parentNode.insertBefore(srcElWrapper, srcEl);
// move srcEl into wrapper
srcElWrapper.appendChild(srcEl);
// Temporarily remove height/width constraints as necessary
document.body.style.width = originalBodyWidth*scaleFactor +"px";
document.body.style.height = originalBodyHeight*scaleFactor +"px";
window.scrollTo(0, 0); // html2canvas breaks when we're not at the top of the doc, see html2canvas#820
html2canvas(srcElWrapper, {
onrendered: function(canvas) {
destIMG.src = canvas.toDataURL("image/png");
srcElWrapper.style.display = "none";
// Reset height/width constraints
document.body.style.width = originalBodyWidth + "px";
document.body.style.height = originalBodyHeight + "px";
}
});
};
䜿çšæ³ïŒ
var src = document.getElementById("screenshot-source");
var img = document.getElementById("screenshot-img");
makeHighResScreenshot(src, img, 192); // DPI of 192 is 4x resolution (2x normal DPI for both width and height)
ãããè¡ããšãwindow.onresizeã€ãã³ããã³ãã©ãŒãç ŽæããããšãããããŸãããïŒ ãã®ãããããããã¹ãŠãiframeå ã§å®è¡ããparent.window.postMessageïŒdataïŒã䜿çšããŠçµæããã¹ãããã¯ããŠã³ã³ãã³ããè¿ãå¿ èŠããããŸããã ããã¯ã¢ãã€ã«ã¢ããªã§ãããããç§ã«ãšã£ãŠã®ã¿éèŠã§ããããµã€ãºã倧ããããããšãéèŠã§ãã
@vance ïŒç§ã®å Žåããããã®ãã®ã¯å¿ èŠãªããã䜿çšããŠããŸãããå®éã«ã¯ãHTMLããPDFãžã®ã¬ã³ãã©ãŒã®ãã°ãåé¿ããããã«ããã䜿çšããŠããŸãã ç§ã¯ããªãã®æ¹æ³ã®å®å šãªäŸãèŠãããšæããŸããããã¯ããæè»ã«æããŸãã
ããã£ã®ãµã€ãºãå€æŽããå¿ èŠã®ãªãé«è§£å床ã®ç»åãååŸããå¥ã®æ¹æ³ãèãåºããŸããã ãã ããhtml2canvasã®ãã°ïŒïŒ790ãïŒ820ãïŒ893ãïŒ922ãªã©ïŒã®ããããœãŒã¹èŠçŽ ã絶察çã«é 眮ããå¿ èŠããããŸãã @MisterLambã®ç¶²èã³ãŒãã«åºã¥ããŠã
function takeHighResScreenshot(srcEl, destIMG, scaleFactor) {
// Save original size of element
var originalWidth = srcEl.offsetWidth;
var originalHeight = srcEl.offsetHeight;
// Force px size (no %, EMs, etc)
srcEl.style.width = originalWidth + "px";
srcEl.style.height = originalHeight + "px";
// Position the element at the top left of the document because of bugs in html2canvas. The bug exists when supplying a custom canvas, and offsets the rendering on the custom canvas based on the offset of the source element on the page; thus the source element MUST be at 0, 0.
// See html2canvas issues #790, #820, #893, #922
srcEl.style.position = "absolute";
srcEl.style.top = "0";
srcEl.style.left = "0";
// Create scaled canvas
var scaledCanvas = document.createElement("canvas");
scaledCanvas.width = originalWidth * scaleFactor;
scaledCanvas.height = originalHeight * scaleFactor;
scaledCanvas.style.width = originalWidth + "px";
scaledCanvas.style.height = originalHeight + "px";
var scaledContext = scaledCanvas.getContext("2d");
scaledContext.scale(scaleFactor, scaleFactor);
html2canvas(srcEl, { canvas: scaledCanvas })
.then(function(canvas) {
destIMG.src = canvas.toDataURL("image/png");
srcEl.style.display = "none";
});
};
䜿çšæ³ïŒ
var src = document.getElementById("screenshot-src");
var img = document.getElementById("screenshot-img");
takeHighResScreenshot(src, img, 2); // This time we provide desired scale factor directly, no more messing with DPI
ç·šéïŒææ¡ã®ããã®@ jason-o-maticã®ãããã§ãå®éã«èŠçŽ ã移åããŠããŒãžã³ã調æŽãã代ããã«ã絶察äœçœ®ã䜿çšããŠãããã³ã°ãæžãããŸããã
ããã¯ææ°ããŒãžã§ã³ïŒ0.5.0-alphaïŒã§åäœããŸãã 0.4.1ã§ã¯ãããŸãã
0.4.1ã§ãã®åé¡ã解決ãããå Žåã¯ããã£ã³ãã¹ã®ãµã€ãºãè©ŠããŠã¿ãå¿ èŠããããŸãã
@airdrummingfoolã®ä¿®æ£ã䜿çšããŠãã人ãžã®ç°¡åãªã¡ã¢ïŒããã¯ããŸãæ©èœããŸãïŒ...
xtreeã®ã©ãã ãäžã«ãããã«é¢ä¿ãªããã¹ã¯ãªãŒã³ãã³ãããèŠçŽ ãã©ãããããçžå¯ŸãèŠçŽ ãæã€ããšã¯ã§ããŸããã ã¹ã¯ãªãŒã³ãã³ãã®æéäžã¯éçã«åãæ¿ããå¿ èŠããããããå¿ èŠãªèŠçŽ ã¯ãåšå²ã®DIVã§ã¯ãªãããŠã£ã³ããŠã«å¯ŸããŠå®éã«0,0ã§è¡šç€ºãããŸãã
ããã解決ããã®ã«æ°æéããã£ãã®ã§ã誰ããåãåé¡ãåé¿ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ããã«ã¡ã¯ã¿ããªã
誰ãã@airdrummingfoolãœãªã¥ãŒã·ã§ã³ã®jsfiddleãæã£ãŠããŸãããç§ã¯éããªããŠç§ã®ãããžã§ã¯ãã«ãããå®è£
ããããšããŠããŸãã å®çšçãªäŸã¯ããããã©ã®ããã«æ©èœããããç解ããã®ã«åœ¹ç«ã¡ããããžã§ã¯ãã«å®è£
ããããšããéã«éåžžã«åœ¹ç«ã¡ãŸãã
æäŸã§ããæ¯æŽãããããšãããããŸããã
çããããã«ã¡ã¯ïŒ @airdrummingfoolãœãªã¥ãŒã·ã§ã³ã䜿çšããããšããŠããŸãã ããããç§ã¯1ã€ã®åä»ãªãšã©ãŒãåãåããŸãã ç»åãååŸãããèŠçŽ ã®äžã«ã¯ã èŠçŽ ã§ãããæé ãå®è¡ãããšãimgèŠçŽ ã¯ç©ºçœã«ãªããsrcã¯ç¡èŠãããŸãã ã©ãããã°ããã解決ã§ãããç¥ã£ãŠããŸããïŒ html2canvasã§ä»¥åã«ãã®åé¡ã«çŽé¢ãã人ã¯ããŸããïŒ
ãã®ã¹ã¬ããã«äºåã«æè¬ããŸãïŒ ããã¯ç§ãæã£ãŠããŸãïŒ ïŒNS
ç·šéïŒç»åã®ååããã¬ã³ããªã³ã°ãããŠããŸããã ãããã解å床ã¯å®ç§ã«èŠããŸãxD
ç»åã®åé¡ãä¿®æ£ããŸãã!! useCORSãæå¹ã«ãªã£ãŠããŸããã§ããïŒ ãããããŸã ååã®ç»åããã¬ã³ããªã³ã°ãããŠããŸããã
çŽ æŽãããïŒ ããŒãã€ã¡ãŒãžã¯ããã£ã³ãã¹å€ã®ã¬ã³ããªã³ã°ã®åé¡ãåå ã§ããå¯èœæ§ããããŸãã ãŸãã html2canvasã«è§£å床/ã¹ã±ãŒãªã³ã°ã@ airdrummingfoolãœãªã¥ãŒã·ã§ã³ããã䜿ããããå ŽåããããŸãã
ããããhtml2canvasã«ããŒãžããããŸã§ããããã®äž¡æ¹ãšä»ã®ããã€ãã®ãã°ä¿®æ£ãå«ãã«ã¹ã¿ã ãã«ããããã§å ¥æã§ã
ããã«ã¡ã¯@eKoopmansã ãåçæé£ãããããŸãã é«ãã2åã«ããŠããªããšãä¿®æ£ã§ããŸãããã§ããäžäžã«ç©ºçœã®ãã倧ããªç»åã衚瀺ãããŠãããšæããŸã...ã ãã...è©ŠããŠã¿ãŠãæ°ååŸã«å ±åããŸãã ïŒïŒ
OMïŒFïŒG @eKoopmans ..ããªãã¯ç®±ããåºããŠåããã ã©ããããããšãã ãã®ãã«ãªã¯ãšã¹ã...圌ãã¯ä»ãããåãå ¥ããã¹ãã§ãã html2canvasçšã®ãã®dpiãªãã·ã§ã³ãæãã§ãã人ã¯ããããããŸãã
ïŒ1087ãæ¯æããŠéäŒ
@airdrummingfool ...ããããšãããããŸãã ããã¯å®ç§ã«æ©èœããŸãã
https://github.com/cburgmer/rasterizeHTML.jsã䜿çšã§ã
ææ°ããŒãžã§ã³ã®html2canvasã«ã¯ãã¹ã±ãŒãªã³ã°ã®ãªãã·ã§ã³ããããŸãã æ¬åœã«ããŸããããŸãã
html2canvasïŒelementã{
ã¹ã±ãŒã«ïŒ2
}ïŒ;
HTMLããã³ç»åã³ã³ãã³ãããã®è€æ°ããŒãžã®PDFã¬ã³ããªã³ã°ã®å Žåã scale: 1
èšå®ãããšã解å床ã®åé¡ãä¿®æ£ããããšåæã«ãç»åãPDFã®å¢çãè¶
ããªãããã«ããããšãã§ããŸãã
ç§ã¯ããã圹ç«ã€ãšæããŸããç§ã¯html2canvasã䜿çšããŸãã
downloadpdfïŒïŒ{
var doc = new jsPDFïŒ{
圢åŒïŒãa4ã
}ïŒ;
html2canvasïŒdocument.getElementByIdïŒ "pdf-doc"ïŒã{
ã¹ã±ãŒã«ïŒã5ã
}ïŒãthenïŒcanvas => {
this.imgFile =ãã£ã³ãã¹;
doc.addImageïŒthis.imgFileã "JPEG"ã5ã5ã200ã285ïŒ;
doc.saveïŒ "ãã¡ã€ã«å" + ".pdf"ïŒ;
}ïŒ;
}
æãåèã«ãªãã³ã¡ã³ã
ãã®ããã«+1ã PDFã«æ¿å ¥ããhtml2canvasãå«ãç»åãååŸããããšããŠããŸãããå質ããŒãããŠããŸãã