λ³ν CSSκ° μλνμ§ μμ΅λλ€.
img ν΄λμ€="μ΄λ―Έμ§ κ°μ²΄" id="3" src="μ΄λ―Έμ§/λν/μμ.png" μ€νμΌ="-webkit-transform: 맀νΈλ¦μ€(0.5, 0.42, -0.42, 0.5, 120, 52);"
μ΄ κΈ°λ₯μ΄ μ μ€ν νμν©λλ€. 맀νΈλ¦μ€λ₯Ό ꡬννμ¬ μ½λλ₯Ό νΈμ§νλ €κ³ μλνμ§λ§ μ€ν¨νμ΅λλ€.
λλμ΄ κΈ°λ₯μ μΌνλ€
ν¨μ renderImage(ctx, μμ, μ΄λ―Έμ§, κ²½κ³, ν
λ리, matx) {}
μ¬κΈ°μμ "matx" 맀κ°λ³μλ₯Ό νλ λ μ λ¬νμ΅λλ€. ν΄λΉ μ΄λ―Έμ§μ νλ ¬ κ°μ
λλ€. κ·Έλ¬λ μ΄ νλ ¬μ "ctx"μ ν λΉν μ μμ΅λλ€.
ν
μ€νΈ νλμμλ λμΌν λ¬Έμ κ° λ°μν©λλ€.
λμμ£ΌμΈμ.
λ³νμ μμ§ μ§μλμ§ μμ΅λλ€.
ν΄κ²° λ°©λ²μ΄ μμ΅λλ€. μμμ§λ μμ§λ§ μ¬μ ν (png λ° jpg μ¬μ§μμ μλν©λλ€). κΈ°λ³Έ λ Όλ¦¬: νμ λ μ΄λ―Έμ§λ₯Ό μ°Ύκ³ μμΉλ₯Ό λ°κΎΈκ³ PHP κΈ°λ₯μ μ 곡ν©λλ€.
1λ¨κ³: CSS λ³ν μ§μμ μ 곡νλ jQuery κΈ°λ₯μ ν¬ν¨ν©λλ€.
(function ($) {
$.fn.rotationDegrees = function () {
var matrix = this.css("-webkit-transform") ||
this.css("-moz-transform") ||
this.css("-ms-transform") ||
this.css("-o-transform") ||
this.css("transform");
if(typeof matrix === 'string' && matrix !== 'none') {
var values = matrix.split('(')[1].split(')')[0].split(',');
var a = values[0];
var b = values[1];
var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
} else { var angle = 0; }
return angle < 0 ? angle+360 : angle;
};
}(jQuery));
2λ¨κ³: νμ λ μ΄λ―Έμ§μ μμΉλ₯Ό ββPHP URLλ‘ λ°κΏλλ€(html2canvas λ λλ§ μ μ ν¬ν¨).
$("img").each(function(){
rot = $(this).rotationDegrees();
if (rot != 0)
$(this).attr("src", "/rotateimg.php?rotate=" + rot + "&loc=" + $(this).attr("src"));
});
3λ¨κ³: νμ κΈ°λ₯μ μ 곡νλ rotateimg.php μμ±
<?php
$loc = $_GET['loc'];
$rot = -$_GET['rotate'];
$path = "/web/images/path"; // $_SERVER['DOCUMENT_ROOT'] ?
$source = NULL;
if (substr($loc, -3) == "png")
$source = imagecreatefrompng($path . $loc);
else if (substr($loc, -3) == "jpg") {
$source = imagecreatefromjpeg($path . $loc);
}
imagealphablending($source, false);
imagesavealpha($source, true);
$img = imagerotate($source, $rot, imageColorAllocateAlpha($source, 0, 0, 0, 127));
imagealphablending($img, false);
imagesavealpha($img, true);
imagepng($img);
?>
λμμ΄ λκΈ°λ₯Ό λ°λλλ€. =)
90λ, 180λ λλ 270λ νμ λ μ΄λ―Έμ§μ λν μ§μμ μΆκ°νμ΅λλ€. https://github.com/mjaggard/html2canvas/tree/simple-rotation
λΉ μ΄λ―Έμ§ νμ μ μΌλ°μ μΌλ‘ μ§μλμ§ μμΌλ©° λ€λ₯Έ λ³νλ μ§μνμ§ μμ΅λλ€(μΌλΆ λ²μ λ° νμ μ λΈλΌμ°μ μμ μμ μ μνν μ μκΈ° λλ¬Έμ μ΄μ¨λ html2canvasμμ μ§μλμ§λ§).
ꡬλ μ€. μ¬κΈ°μμλ μ΄λ―Έμ§/htmlμ λν λ λμ νμ μ루μ μ μ°Ύκ³ μμ΅λλ€. μ°λ¦¬λ "λ"λ‘ μμ νκΈ° μν΄ -webkit-transformμ΄ νμνμ§λ§ μ΄ λ§€νΈλ¦μ€ νλͺ©μ νμνμ§ μμ΅λλ€.
κ°μ¬ ν΄μ
μΈμ¬λ§,
μ€μΌμΌλ§μ μ΄λ»μ΅λκΉ? μ λλ‘ λ λλ§λμ§ μλ ν¬κΈ° μ‘°μ λ ν μ€νΈκ° μμ΅λλ€. λ±μ₯μΈλ¬Όλ€μ΄ λͺ¨λ λͺ¨μ¬λλλ€. λꡬλ μ§ μ΄ νμ₯ κΈ°λ₯μ ꡬννκΈ° μν μ¬λ°λ₯Έ λ°©ν₯μ μλ €μ€ μ μμ΅λκΉ?
λλ νμ μ΄ νμν©λλ€ :(
λ³ν μ€μΌμΌμ ꡬνμ νλ₯ν κ²μ λλ€. κΈκΌ΄κ³Ό μ΄λ―Έμ§ νμ§μ λμΌ μ μκΈ° λλ¬Έμ μ λ§ μ€μν ν¬μΈνΈλΌκ³ μκ°ν©λλ€. μλ₯Ό λ€μ΄ ν μ€νΈλ₯Ό λ λλ§νκ³ λΈλΌμ°μ λ‘ νλ/μΆμνλ©΄ νμ§μ΄ μ λ§ λμ©λλ€. κ·Έλ¬λ©΄ html2canvas-pluginμ΄ ν μ€νΈ νΈμ§κΈ° λ±μ μ μ©ν μ μμ΅λλ€.
@niklasvh : κ°κΉμ΄ μ₯λμ μ΄ κΈ°λ₯μ ꡬνν κ³νμ λκΉ? λλ κ·Έκ²μ κ°μ¬νκ³ κ·Έκ²μ μν΄ κΈ°λΆν κ²μ λλ€.
μλ νμΈμ, μ΄ κΈ°λ₯μ΄ μ λ§ μ΄ νλ₯ν λꡬλ₯Ό λμΉκ³ μμ΅λλ€. μ΄ κΈ°λ₯μ λν κ³νμ΄ μμΌμ κ°μ?
@mjaggard - μ΄λ―Έμ§ νμ μ½λκ° μ΅μ λ²μ μ λΌμ΄λΈλ¬λ¦¬μ ν΅ν©λ κ°λ₯μ±μ΄ μμ΅λκΉ?
λλ λΉμ μ μ½λλ₯Ό 보μκ³ κ·Έκ²μ λ§€μ° λ€λ₯Έ ꡬ쑰λ₯Ό κ°μ§κ³ μλ κ² κ°μ΅λλ€.
κ°μ¬ ν΄μ!
μλ νμΈμ,
μ΄ κΈ°λ₯μ 곧 μΆκ°ν κ³νμ
λκΉ?
λ§€μ° μ μ©ν κ²μ
λλ€!!
μ λ§ κ°μ¬ν©λλ€ !
μλ
νμΈμ,
νμ μ μ΄ λ²μ μμ μ΄λ―Έ(webkit-transform) μλ μ€μ
λλ€.
μμ.
μ΄ ν΄λμ€λ₯Ό divμ μΆκ°νκ³ μ΄λ―Έ ν
μ€νΈνλμ§ νμΈνμμμ€.
.rt{-ms-λ³ν: νμ (7deg); /* IE 9 _/
-μΉν· λ³ν: νμ (7deg); // ν¬λ‘¬, μ¬ν리, μ€νλΌ */
λ³ν: νμ (7deg);}
2015λ
1μ 7μΌ μμμΌ μ€ν 7μ 2λΆ, dscarteland [email protected]
μΌλ€:
μλ νμΈμ,
μ΄ κΈ°λ₯μ 곧 μΆκ°ν κ³νμ λκΉ?
λ§€μ° μ μ©ν κ²μ λλ€!!μ λ§ κ°μ¬ν©λλ€ !
β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -69021663
.
@liteelips λλ ν μ€νΈ νμ μ΄ νμν©λλ€ :(
νμ λ div μ€ν¬λ¦°μ·μ λν μ루μ μ μ°Ύλ μ¬λμ΄ μμ΅λκΉ?
+1
λͺ¨λ λΈλΌμ°μ μ λν νμ λ° λ³νμ΄ ν¬ν¨λ μ 체 μμ μ½λ. νμΌμ 첨λΆν μ μμ΅λλ€. νμΌμ μμ§νλλ‘ μ μκ² λ©μΌμ 보λ΄μ£Όμμμ€.
μ’μ κ³ λ§μ!
pull μμ²μ νκ±°λ JS Fiddleμ μ¬μ©νλ κ²μ κ³ λ €ν΄ λ³΄μ ¨μ΅λκΉ?
μλ
νμΈμ ,
λλ¨ν΄!! νμΌμ νμ λ° λ³νμΌλ‘ κ°μ Έμ¬ μ μμ΅λκΉ?
μ§κΈ λΉμ μ μν΄ μΌνκ³ μμ΅λλ€.
2015λ
9μ 29μΌ νμμΌ μ€ν 3μ 32λΆ, Arindam Mojumder [email protected]
μΌλ€:
λͺ¨λ λΈλΌμ°μ μ λν νμ λ° λ³νμ΄ ν¬ν¨λ μ 체 μμ μ½λ. μΊνΈ
νμΌμ 첨λΆν©λλ€. μ μκ² λ©μΌμ λ³΄λ΄ νμΌμ μμ§νκ±°λ μ΄ λ§ν¬λ₯Ό λ°©λ¬Ένμμμ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -144011634
.
_μλ§ μ±_
_PHP/MySQL κ°λ°μ_
_νμ΄μ€λΆ
https://www.facebook.com/pages/Kodework/741342762609839 // λ§ν¬λμΈ
https://www.linkedin.com/company/kodework_
_μ΄λ©μΌ:_ μλ§λ₯΄. [email protected] [email protected]
_λͺ¨λ°μΌ: *+91 7040980700
*νκ³Ό: *κ°λ°
*μ§μ:_ [email protected]
_μ£Όμ:_ E-4 Vicente Greens, Socoro,
ν¬λ₯΄λ³΄λ¦Ό, κ³ μ 403521.
_μΉμ¬μ΄νΈ:_ www.kodework.com
μλ νμΈμ, νΉν IEμμ λ³ν(νμ )μ΄ μλνλλ‘ νλ λ° μ΄λ €μμ κ²ͺκ³ μμ΅λλ€. μμ±λ μΊλ²μ€μλ μ€μ λ‘ νμ λ μμκ° ν¬ν¨λμ΄ μμ§λ§ μΌλ°μ μΌλ‘ μμμ μ λ°λ§ νμλ©λλ€.
μ€ν¬λ¦½νΈ μ€νμΌμ λ€μκ³Ό κ°μ΅λλ€.
$('#<id of element>').htmlToCanvas({
width: 1000, // dimension of your html page
height: 600, // dimension of your html page
complete: function(){
var image = this.htmlToCanvas.toBinrary(); // will return base64 image data
$('<img emelent>').attr("src",image); // use this as a src of any img element
}
});
htmlToCanvas.js νμΌ
(ν¨μ($){
var canvasCounter = 0;
var canvas, cnvs, ctx, elementArr, callback, _this;
$.fn.htmlToCanvas = function(options){
var defaults = {width: 1000, height: 600, complete: null};
callback = $.extend(defaults, options);
_this = this;
return this.each(function(){
createImage('#'+$(this)[0].id);
});
}
$.fn.htmlToCanvas.toBinrary = function() {
return cnvs.toDataURL("image/jpeg",1);
// return cnvs.toDataURL({
// format: 'png',
// left: 0,
// top: 0,
// width: 200,
// height: 150
// })
}
$.fn.htmlToCanvas.removeCanvas = function() {
canvas.remove();
}
function createImage(divobj)
{
////console.log(divobj);
if(canvas) canvas.remove();
canvas = $('<canvas id="canvas" width="' + callback.width + '" height="'+ callback.height +'" style="display: block;"></canvas>');
$('body').append(canvas);
cnvs = document.getElementById('canvas')
ctx = cnvs.getContext("2d");
ctx.fillStyle = $(divobj).css('background-color');
ctx.fillRect(0,0,callback.width, callback.height);
canvasCounter = 0;
elementArr = [];
$(divobj + " img").each(function(index){
elementArr.push({type: 'img', zindex: $(this).css('z-index'), imgobj: $(this)});
console.log($(this));
});
$(divobj + " div").each(function(index){
elementArr.push({type: 'txt', zindex: $(this).css('z-index'), imgobj: $(this)});
});
elementArr.sort(function (a, b) {
//var a_zindex = a && a.zindex || "",
//b_zindex = b && b.zindex || "";
//return a_zindex.localeCompare(b_zindex);
var dif = Number(a.zindex - b.zindex);
//alert('cal '+dif);
return (dif);
});
//--------- background images ----------
if($(divobj).css('background-image') != 'none'){
var background = new Image();
var back_source = $(divobj).css('background-image');
back_source = back_source.substring(4, back_source.length-1);
back_source = back_source.replace('"', '');
back_source = back_source.replace('"', '');
//background.src = back_source;
$.ajax({
type: 'POST',
url: 'data/imagedata.php',
data: {'imgurl': back_source},
success: function(_data){
//console.log(_data);
var imagedata = 'data:image/jpeg;base64,' + _data;
background.src = imagedata;
background.onload = function(){
for (var w = 0; w < canvas.attr('width'); w += background.width) {
for (var h = 0; h < canvas.attr('height'); h += background.height){
ctx.drawImage(background, w, h);
}
}
if(elementArr.length > 0){
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
},
error: function(xhr, textstatus){
////console.log(textstatus);
}
});
} else {
if(elementArr.length > 0){
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
}
function htmlToCanvas(type, obj){
if(type == 'img'){
var canvas_img = new Image();
canvas_img.crossOrigin = "*"; // This enables CORS
canvas_img.src = obj.attr('src');
//console.log(canvas_img.src);
var matrix = getObjMatrix(obj);
matrix = matrix.substring(7,matrix.length-1).split(', ');
canvas_img.onload = function(){
//console.log('onload');
ctx.save();
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
ctx.drawImage(canvas_img, 0, 0);
ctx.restore();
putAnotherElementToCanvas();
}
/* $.ajax({
type: 'POST',
url: 'data/imagedata.php',
data: {'imgurl': obj.attr('src')},
success: function(_data){
var imagedata = 'data:image/png;base64,' + _data;
canvas_img.src = imagedata;
canvas_img.onload = function(){
ctx.save();
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
ctx.drawImage(canvas_img, 0, 0);
ctx.restore();
putAnotherElementToCanvas();
}
},
error: function(xhr, textstatus){
////console.log(textstatus);
}
});*/
} else if(type == 'txt'){
ctx.save();
var matrix = getObjMatrix(obj);
matrix = matrix.substring(7,matrix.length-1).split(', ');
ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
ctx.fillStyle = obj.css('background-color');
ctx.fillRect(0, -7, obj.width(), obj.height());
ctx.fillStyle = obj.css('color');
ctx.font = (obj.css('font-size') + ' ' + obj.css('font-family')).toString();
ctx.textAlign = obj.css('text-align');
var xpos;
if(obj.css('text-align') == 'left'){
xpos = matrix[4];
} else if(obj.css('text-align') == 'center'){
xpos = Number(matrix[4]) + (obj.width()*matrix[0])/2;
} else if(obj.css('text-align') == 'right'){
xpos = Number(matrix[4]) + (obj.width()*matrix[0]);
}
ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], xpos, matrix[5]);
var lh = obj.css('font-size').replace('px', '')*1.2;
wrapText(ctx, obj.text(), 0, lh/2, obj.width()+25, lh);
ctx.restore();
putAnotherElementToCanvas();
}
}
function putAnotherElementToCanvas(){
canvasCounter++;
console.log(canvasCounter+ ' - ' +elementArr.length)
if(canvasCounter < elementArr.length){
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
function postCanvas()
{
var tempCanvas = document.createElement('canvas');
tempCanvas.width = cnvs.width;
tempCanvas.height = cnvs.height;
tempCanvas.getContext('2d').drawImage(cnvs, 0, 0);
// cnvs.width = 170;
// cnvs.height = 102;
cnvs.getContext('2d').drawImage(tempCanvas, 0, 0, tempCanvas.width, tempCanvas.height, 0, 0, cnvs.width, cnvs.height);
$.isFunction(callback.complete) && callback.complete.call(_this);
canvas.remove();
}
function wrapText(context, text, x, y, maxWidth, lineHeight) {
var words = text.split(' ');
var line = '';
for(var n = 0; n < words.length; n++) {
var testLine = line + words[n] + ' ';
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if(testWidth > maxWidth) {
context.fillText(line, x, y);
line = words[n] + ' ';
y += lineHeight;
}
else {
line = testLine;
}
}
context.fillText(line, x, y);
}
function getObjMatrix(obj) {
var matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform") ||
obj.css("-ms-transform") ||
obj.css("-o-transform") ||
obj.css("transform");
return matrix;
}
})(μ μ΄μΏΌλ¦¬);
NS
λ°°κ²½ μ΄λ―Έμ§ λ° svg κ·Έλν½μΌλ‘ μ λ°μ΄νΈλμμ΅λλ€.
// μΊλ²μ€μ HTML λ° λ°±μλμ μ΄λ―Έμ§ μ μ₯
(ν¨μ($) {
var canvasCounter = 0;
var canvas, cnvs, ctx, elementArr, callback, _this;
$.fn.htmlToCanvas = function(options) {
var defaults = {
width: 1000,
height: 600,
complete: null
};
callback = $.extend(defaults, options);
_this = this;
return this.each(function() {
createImage('#' + $(this)[0].id);
});
}
$.fn.htmlToCanvas.toBinrary = function() {
return cnvs.toDataURL("image/jpeg", 1);
}
$.fn.htmlToCanvas.removeCanvas = function() {
canvas.remove();
}
function createImage(divobj) {
if (canvas) canvas.remove();
canvas = $('<canvas id="canvas" width="' + callback.width + '" height="' + callback.height + '" style="display: block;"></canvas>');
$('body').append(canvas);
cnvs = document.getElementById('canvas')
ctx = cnvs.getContext("2d");
ctx.fillStyle = $(divobj).css('background-color');
ctx.fillRect(0, 0, callback.width, callback.height);
canvasCounter = 0;
elementArr = [];
$(divobj + " img").each(function(index) {
elementArr.push({
type: 'img',
zindex: $(this).css('z-index'),
imgobj: $(this)
});
});
$(divobj + " div.text-field").each(function(index) {
elementArr.push({
type: 'txt',
zindex: $(this).css('z-index'),
imgobj: $(this)
});
});
/*======================== for svg rendar pm7014.10.15 ========================*/
$(divobj + " div.hotsPot svg").each(function(index) {
elementArr.push({
type: 'svg',
zindex: $(this).parent().css('z-index'),
imgobj: $(this)
});
});
/*======================== for svg rendar End pm7014.10.15 ========================*/
elementArr.sort(function(a, b) {
var dif = Number(a.zindex - b.zindex);
return (dif);
});
//--------- background images ----------
if ($(divobj).css('background-image') != 'none') {
var background = new Image();
var back_source = $(divobj).css('background-image');
back_source = back_source.substring(4, back_source.length - 1);
back_source = back_source.replace('"', '');
back_source = back_source.replace('"', '');
background.crossOrigin = "*"; // This enables CORS
background.src = back_source;
background.onload = function() {
for (var w = 0; w < canvas.attr('width'); w += background.width) {
for (var h = 0; h < canvas.attr('height'); h += background.height) {
ctx.drawImage(background, w, h);
}
}
if (elementArr.length > 0) {
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
} else {
if (elementArr.length > 0) {
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
}
function htmlToCanvas(type, obj) {
if (type == 'img') {
var canvas_img = new Image();
canvas_img.crossOrigin = "*"; // This enables CORS
canvas_img.src = obj.attr('src');
var matrix = getObjMatrix(obj);
matrix = matrix.substring(7, matrix.length - 1).split(', ');
canvas_img.onload = function() {
ctx.save();
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
ctx.drawImage(canvas_img, 0, 0);
ctx.restore();
putAnotherElementToCanvas();
}
} else if (type == 'txt') {
ctx.save();
var matrix = getObjMatrix(obj);
matrix = matrix.substring(7, matrix.length - 1).split(', ');
ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
ctx.fillStyle = obj.css('background-color');
ctx.fillRect(0, -7, obj.width(), obj.height());
ctx.fillStyle = obj.css('color');
ctx.font = (obj.css('font-size') + ' ' + obj.css('font-family')).toString();
ctx.textAlign = obj.css('text-align');
var xpos;
if (obj.css('text-align') == 'left') {
xpos = matrix[4];
} else if (obj.css('text-align') == 'center') {
xpos = Number(matrix[4]) + (obj.width() * matrix[0]) / 2;
} else if (obj.css('text-align') == 'right') {
xpos = Number(matrix[4]) + (obj.width() * matrix[0]);
}
ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], xpos, matrix[5]);
var lh = obj.css('font-size').replace('px', '') * 1.2;
wrapText(ctx, obj.text(), 0, lh / 2, obj.width() + 25, lh);
ctx.restore();
putAnotherElementToCanvas();
/*======================== for svg rendar pm7014.10.15 ========================*/
} else if (type == 'svg') {
svgObj = setAttributes(obj);
var data = "data:image/svg+xml;base64," + window.btoa($(obj).parent().html());
var svg_img = new Image();
svg_img.src = data;
var svgMatrix = getObjMatrix(obj.parent());
svgMatrix = svgMatrix.substring(7, svgMatrix.length - 1).split(', ');
svg_img.onload = function() {
ctx.save();
ctx.transform(svgMatrix[0], svgMatrix[1], svgMatrix[2], svgMatrix[3], svgMatrix[4], svgMatrix[5]);
ctx.drawImage(svg_img, 0, 0);
ctx.restore();
putAnotherElementToCanvas();
};
}
/* ======================== for svg rendar pm7014.10.15 ======================== */
}
function setAttributes(el) {
el.attr("version", "1.1");
el.attr("xmlns", "http://www.w3.org/2000/svg");
el.attr("xmlns:xlink", "http://www.w3.org/1999/xlink");
return el;
}
function putAnotherElementToCanvas() {
canvasCounter++;
//console.log(canvasCounter+ ' - ' +elementArr.length)
if (canvasCounter < elementArr.length) {
htmlToCanvas(elementArr[canvasCounter].type, elementArr[canvasCounter].imgobj);
} else {
postCanvas();
}
}
function postCanvas() {
var tempCanvas = document.createElement('canvas');
tempCanvas.width = cnvs.width;
tempCanvas.height = cnvs.height;
tempCanvas.getContext('2d').drawImage(cnvs, 0, 0);
// cnvs.width = 170;
// cnvs.height = 102;
cnvs.getContext('2d').drawImage(tempCanvas, 0, 0, tempCanvas.width, tempCanvas.height, 0, 0, cnvs.width, cnvs.height);
$.isFunction(callback.complete) && callback.complete.call(_this);
canvas.remove();
}
function wrapText(context, text, x, y, maxWidth, lineHeight) {
var words = text.split(' ');
var line = '';
for (var n = 0; n < words.length; n++) {
var testLine = line + words[n] + ' ';
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if (testWidth > maxWidth) {
context.fillText(line, x, y);
line = words[n] + ' ';
y += lineHeight;
} else {
line = testLine;
}
}
context.fillText(line, x, y);
}
function getObjMatrix(obj) {
var matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform") ||
obj.css("-ms-transform") ||
obj.css("-o-transform") ||
obj.css("transform");
return matrix;
}
})(μ μ΄μΏΌλ¦¬);
CSS νμ λ° λ³νμ΄ μλ²½νκ² μλνμ§ μμ΅λλ€ ... λ΄ μ½λμ μ΄λ¬ν νλͺ©μ΄ μμ΅λλ€.
λ³ν: νμ (-13deg);
z-μΈλ±μ€: 40;
. μ
λ°μ΄νΈ λΆνλ립λλ€.
λλ μ΄κ²μ μν΄ λ§€νΈλ¦μ€λ₯Ό μ¬μ©νμ΅λλ€. μ΄κ±Έλ‘ ν΄λ΄.
2015λ 10μ 15μΌ λͺ©μμΌ μ€ν 1μ 57λΆμ Yo Yo [email protected]μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
CSS νμ λ° λ³νμ΄ μλ²½νκ² μλνμ§ μμ΅λλ€ ...μ΄ λ¬Όκ±΄μ΄ μμ΅λλ€.
λ΄ μ½λμμ
λ³ν: νμ (-13deg);
z-μΈλ±μ€: 40;
. μ λ°μ΄νΈ λΆνλ립λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -148316296
.
_μ°Έκ³ : Durga Pujaλ‘ μΆλ°ν©λλ€.
https://en.wikipedia.org/wiki/Durga_Puja 20~23μΌ ν΄κ°
μμ._
λ§μμ λ΄μ
_μλ¦°λ€ λͺ¨μ λ_
HTML5 λ° jQuery ν 리λ
_μΈλμ€λ·ν
ν¬λλ‘μ§μ€_ http://www.indusnet.co.in
ISO 9001:2008 λ° ISO 27001:2005 μΈμ¦ κΈ°μ
μ§ν‘ :
νλ:+919830307843,+918420200614
μ ν: +91-33-32902857/23576070
μμ μ λΆλ΄(λ―Έκ΅ λ° μΊλλ€): +1-888-652-2121
μκ΅ : +44-020-81444070
μ΄ λ©μμ§μλ κΆνμ΄ μκ±°λ κΈ°λ°μΌ μ μλ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€.
INDUS NET TECHNOLOGIESμ μμ°μ
λλ€.
http://www.indusnet.co.in/. λ°λ μ¬λμκ²λ§ ν΄λΉλ©λλ€.
ν΄κ²°λ©λλ€. μμ μΈμ΄ μλ κ²½μ° μΉμΈλμ§ μμ΅λλ€.
μ΄ λ©μμ§λ₯Ό μ½κ±°λ, μΈμνκ±°λ, μ¬λ³Έμ 보κ΄νκ±°λ, λ°°ν¬νκ±°λ, μ¬μ©νκΈ° μν΄
λλ κ·Έ μΌλΆ. μ΄ λ©μμ§κ° μλͺ» μμ λλ©΄ μλ €μ£ΌμΈμ.
λ°μ μΈμκ² μ¦μ μ°λ½νκ³ μ΄ λ©μμ§μ λͺ¨λ μ¬λ³Έμ μμ νμμμ€. μΈλμ€λ·
TECHNOLOGIES http://www.indusnet.co.in/ μ λ€μμ λν μ±
μμ μ§μ§ μμ΅λλ€.
λ°μ΄λ¬μ€μ κ°μΌλ λ©μΌ.
@arindamm μ΄λ μͺ½μΈκ°μ? μ λ°μ΄νΈλ νμΌμ 보λ΄μ£Όμ€ μ μμ΅λκΉ?
@arindamm : μ νν μ΄λμ μΆκ°ν΄μΌ νλμ§λ³΄λ€ μμ μ½λλ₯Ό λ§νλ κ²μ΄λΌλ©΄.
μ΄λ―Έ μΆκ°λμμΌλ μ΄μ λ©μΌμ 첨λΆλ js νμΌμ νμΈν΄μ£ΌμΈμ.
2015λ 10μ 15μΌ λͺ©μμΌ μ€ν 3μ 52λΆμ Yo Yo [email protected]μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@arindamm https://github.com/arindamm : μ λν΄ μ΄μΌκΈ°νλ€λ©΄
μ νν μΆκ°ν μμΉλ³΄λ€ μμ μ½λμ λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -148344194
.
_μ°Έκ³ : Durga Pujaλ‘ μΆλ°ν©λλ€.
https://en.wikipedia.org/wiki/Durga_Puja 20~23μΌ ν΄κ°
μμ._
λ§μμ λ΄μ
_μλ¦°λ€ λͺ¨μ λ_
HTML5 λ° jQuery ν 리λ
_μΈλμ€λ·ν
ν¬λλ‘μ§μ€_ http://www.indusnet.co.in
ISO 9001:2008 λ° ISO 27001:2005 μΈμ¦ κΈ°μ
μ§ν‘ :
νλ:+919830307843,+918420200614
μ ν: +91-33-32902857/23576070
μμ μ λΆλ΄(λ―Έκ΅ λ° μΊλλ€): +1-888-652-2121
μκ΅ : +44-020-81444070
μ΄ λ©μμ§μλ κΆνμ΄ μκ±°λ κΈ°λ°μΌ μ μλ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€.
INDUS NET TECHNOLOGIESμ μμ°μ
λλ€.
http://www.indusnet.co.in/. λ°λ μ¬λμκ²λ§ ν΄λΉλ©λλ€.
ν΄κ²°λ©λλ€. μμ μΈμ΄ μλ κ²½μ° μΉμΈλμ§ μμ΅λλ€.
μ΄ λ©μμ§λ₯Ό μ½κ±°λ, μΈμνκ±°λ, μ¬λ³Έμ 보κ΄νκ±°λ, λ°°ν¬νκ±°λ, μ¬μ©νκΈ° μν΄
λλ κ·Έ μΌλΆ. μ΄ λ©μμ§κ° μλͺ» μμ λλ©΄ μλ €μ£ΌμΈμ.
λ°μ μΈμκ² μ¦μ μ°λ½νκ³ μ΄ λ©μμ§μ λͺ¨λ μ¬λ³Έμ μμ νμμμ€. μΈλμ€λ·
TECHNOLOGIES http://www.indusnet.co.in/ μ λ€μμ λν μ±
μμ μ§μ§ μμ΅λλ€.
λ°μ΄λ¬μ€μ κ°μΌλ λ©μΌ.
@arindamm @niklasvh μ΄ λ¬Έμ μ λν μ λ°μ΄νΈκ° μμ΅λκΉ? μΌλΆ ν μ€νΈλ₯Ό μΈλ‘λ‘ μ λ ¬νλ €κ³ νλλ° μ λλ‘ λμ€μ§ μμ΅λλ€. IE 11μμλ μ μλνμ§λ§ IE 9μμλ μλνμ§ μμ΅λλ€.
μ£μ‘ ν΄μ.
2015λ 10μ 19μΌ μμμΌ μ€ν 3μ 45λΆμ Ranga [email protected]μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@arindamm https://github.com/arindamm @niklasvh
https://github.com/niklasvh μ΄ λ¬Έμ μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
μΌλΆ ν μ€νΈλ₯Ό μΈλ‘λ‘ μ λ ¬νλ €κ³ νλλ° μ λλ‘ λμ€μ§ μμ΅λλ€.
IE 11μμλ μ μλνμ§λ§ IE 9μμλ μλνμ§ μμ΅λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -149174708
.
_μ°Έκ³ : Durga Pujaλ‘ μΆλ°ν©λλ€.
https://en.wikipedia.org/wiki/Durga_Puja 20~23μΌ ν΄κ°
μμ._
λ§μμ λ΄μ
_μλ¦°λ€ λͺ¨μ λ_
HTML5 λ° jQuery ν 리λ
_μΈλμ€λ·ν
ν¬λλ‘μ§μ€_ http://www.indusnet.co.in
ISO 9001:2008 λ° ISO 27001:2005 μΈμ¦ κΈ°μ
μ§ν‘ :
νλ:+919830307843,+918420200614
μ ν: +91-33-32902857/23576070
μμ μ λΆλ΄(λ―Έκ΅ λ° μΊλλ€): +1-888-652-2121
μκ΅ : +44-020-81444070
μ΄ λ©μμ§μλ κΆνμ΄ μκ±°λ κΈ°λ°μΌ μ μλ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€.
INDUS NET TECHNOLOGIESμ μμ°μ
λλ€.
http://www.indusnet.co.in/. λ°λ μ¬λμκ²λ§ ν΄λΉλ©λλ€.
ν΄κ²°λ©λλ€. μμ μΈμ΄ μλ κ²½μ° μΉμΈλμ§ μμ΅λλ€.
μ΄ λ©μμ§λ₯Ό μ½κ±°λ, μΈμνκ±°λ, μ¬λ³Έμ 보κ΄νκ±°λ, λ°°ν¬νκ±°λ, μ¬μ©νκΈ° μν΄
λλ κ·Έ μΌλΆ. μ΄ λ©μμ§κ° μλͺ» μμ λλ©΄ μλ €μ£ΌμΈμ.
λ°μ μΈμκ² μ¦μ μ°λ½νκ³ μ΄ λ©μμ§μ λͺ¨λ μ¬λ³Έμ μμ νμμμ€. μΈλμ€λ·
TECHNOLOGIES http://www.indusnet.co.in/ μ λ€μμ λν μ±
μμ μ§μ§ μμ΅λλ€.
λ°μ΄λ¬μ€μ κ°μΌλ λ©μΌ.
@arindamm @niklasvh : μλ νμΈμ μ μλ, overflow :hidden λ° margin-left: -42px; λ΄ μ΄λ―Έμ§μ μ μ©λμ§ μμ΅λλ€. μΉμ νκ² λμκ² μ루μ μ μ°Έμ‘°νκ±°λ νμΌμ μ λ°μ΄νΈν μ μμ΅λλ€. μ λ°.
λλ κ·Έ λΆλΆμμ μΌνμ§ μμλ€. λμλ릴 μ μμ΄ μ£μ‘ν©λλ€. λΉμ μ λΉμ μ
μ체 ν¨μλ₯Ό λ§λ€κ³ canvas.draw() ν¨μλ‘ μ΄λ―Έμ§λ₯Ό μλ¦
λλ€.
2015λ 10μ 29μΌ λͺ©μμΌ μ€μ 11μ 12λΆμ Yo Yo [email protected]μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@arindamm https://github.com/arindamm @niklasvh
https://github.com/niklasvh : μλ νμΈμ μ μλ, μ€λ²νλ‘ : μ¨κΉμ΄ μλλλ€.
λ΄ μ΄λ―Έμ§μ μ μ©λ©λλ€. μΉμ νκ² λμκ² μ루μ μ μ°Έμ‘°νμμμ€
νμΌμ μ λ°μ΄νΈν©λλ€. μ λ°.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/niklasvh/html2canvas/issues/220#issuecomment -152082507
.
λ§μμ λ΄μ
_μλ¦°λ€ λͺ¨μ λ_
HTML5 λ° jQuery ν 리λ
_μΈλμ€λ·ν
ν¬λλ‘μ§μ€_ http://www.indusnet.co.in
ISO 9001:2008 λ° ISO 27001:2005 μΈμ¦ κΈ°μ
μ§ν‘ :
νλ:+919830307843,+918420200614
μ ν: +91-33-32902857/23576070
μμ μ λΆλ΄(λ―Έκ΅ λ° μΊλλ€): +1-888-652-2121
μκ΅ : +44-020-81444070
μ΄ λ©μμ§μλ κΆνμ΄ μκ±°λ κΈ°λ°μΌ μ μλ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€.
INDUS NET TECHNOLOGIESμ μμ°μ
λλ€.
http://www.indusnet.co.in/. λ°λ μ¬λμκ²λ§ ν΄λΉλ©λλ€.
ν΄κ²°λ©λλ€. μμ μΈμ΄ μλ κ²½μ° μΉμΈλμ§ μμ΅λλ€.
μ΄ λ©μμ§λ₯Ό μ½κ±°λ, μΈμνκ±°λ, μ¬λ³Έμ 보κ΄νκ±°λ, λ°°ν¬νκ±°λ, μ¬μ©νκΈ° μν΄
λλ κ·Έ μΌλΆ. μ΄ λ©μμ§κ° μλͺ» μμ λλ©΄ μλ €μ£ΌμΈμ.
λ°μ μΈμκ² μ¦μ μ°λ½νκ³ μ΄ λ©μμ§μ λͺ¨λ μ¬λ³Έμ μμ νμμμ€. μΈλμ€λ·
TECHNOLOGIES http://www.indusnet.co.in/ μ λ€μμ λν μ±
μμ μ§μ§ μμ΅λλ€.
λ°μ΄λ¬μ€μ κ°μΌλ λ©μΌ.
μ¬κΈ°μ μ€λͺ
λ ν΄κ²° λ°©λ²μ μνν μ μμ΅λλ€.
http://www.jjoe64.com/2015/10/html2canvas-and-css-transform-rotate.html
@ jjoe64 https://github.com/niklasvh/html2canvas/issues/209#issuecomment -152904727
μ΄κ²μ μμ§ κ²ν λμ§ μμλ€κ³ μΆμΈ‘ν©λλ€.
μμ§ μ λ ¬μ μν΄ μλνλ λ° νμν λ²μμ λλ€(κ°λ¨ν ꡬνμ΄κΈ°λ₯Ό λ°λμ§λ§ λΆλͺ ν κ·Έλ μ§ μμμ΅λλ€).
π
img = document.createElement("img")
img.src = canvas.toDataURL()
newCanvas = document.createElement('canvas')
ctx = newCanvas.getContext("2d")
newCanvas.height = 350
newCanvas.width = 200
ctx.translate(185, 35)
ctx.rotate(90 * Math.PI/180)
ctx.drawImage(img,0,0); #draw it
canvasURL = newCanvas.toDataURL()
html2canvasμμ μΊλ²μ€λ₯Ό μ»μ΅λλ€. κ·Έλ° λ€μ μμ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ 90λ νμ λ newCanvasλ₯Ό λ§λλλ€.
μ¬μ© μ¬λ‘μ λ°λΌ λμ΄, λλΉ, μμ± λ³ν
box-shadow css3κ° μλνμ§ μμ΅λλ€ οΌ κ·Έλλ κ°μ¬ν©λλ€
λ³νμ 1.0.0μμ λΆλΆμ μΌλ‘ μ§μλ©λλ€.
@niklasvh μ νν μ΄λ€ λ³νμ΄ μ§μλκ³ μ§μλμ§ μλμ§μ λν μ λ³΄κ° μμ΅λκΉ?
νμ μ΄ μλνμ§ μλ κ² κ°μ΅λλ€
κ°μ₯ μ μ©ν λκΈ
@liteelips λλ ν μ€νΈ νμ μ΄ νμν©λλ€ :(