Html2canvas: -webkit-transform: μž‘λ™ν•˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2013λ…„ 05μ›” 31일  Β·  37μ½”λ©˜νŠΈ  Β·  좜처: niklasvh/html2canvas

λ³€ν™˜ CSSκ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

img 클래슀="이미지 개체" id="3" src="이미지/λŒ€ν˜•/μŒμ‹.png" μŠ€νƒ€μΌ="-webkit-transform: 맀트릭슀(0.5, 0.42, -0.42, 0.5, 120, 52);"

이 κΈ°λŠ₯이 μ ˆμ‹€νžˆ ν•„μš”ν•©λ‹ˆλ‹€. 맀트릭슀λ₯Ό κ΅¬ν˜„ν•˜μ—¬ μ½”λ“œλ₯Ό νŽΈμ§‘ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ”μ΄ κΈ°λŠ₯을 μΌν–ˆλ‹€
ν•¨μˆ˜ renderImage(ctx, μš”μ†Œ, 이미지, 경계, ν…Œλ‘λ¦¬, matx) {}
μ—¬κΈ°μ—μ„œ "matx" λ§€κ°œλ³€μˆ˜λ₯Ό ν•˜λ‚˜ 더 μ „λ‹¬ν–ˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μ΄λ―Έμ§€μ˜ ν–‰λ ¬ κ°’μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 행렬을 "ctx"에 ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€.
ν…μŠ€νŠΈ ν•„λ“œμ—μ„œλ„ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

λ„μ™€μ£Όμ„Έμš”.

Feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@liteelips λ‚˜λ„ ν…μŠ€νŠΈ νšŒμ „μ΄ ν•„μš”ν•©λ‹ˆλ‹€ :(

λͺ¨λ“  37 λŒ“κΈ€

λ³€ν™˜μ€ 아직 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

114 #184 #209

ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ˜μ§€λŠ” μ•Šμ§€λ§Œ μ—¬μ „νžˆ (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
   }
  });

// μΊ”λ²„μŠ€μ— HTML 및 λ°±μ—”λ“œμ— 이미지 μ €μž₯

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 인증 κΈ°μ—…

2008λ…„ Dun & Bradstreetμ—μ„œ 인도 IT SME 1μœ„ 평가

지톑 :

μŠ€μΉ΄μ΄ν”„ : arindam_mojumder

폭도:+919830307843,+918420200614
μ „ν™”: +91-33-32902857/23576070
μˆ˜μ‹ μž λΆ€λ‹΄(λ―Έκ΅­ 및 μΊλ‚˜λ‹€): +1-888-652-2121
영ꡭ : +44-020-81444070

팩슀 : 0760-284-6062

이 λ©”μ‹œμ§€μ—λŠ” κΆŒν•œμ΄ μžˆκ±°λ‚˜ 기밀일 수 μžˆλŠ” 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
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 인증 κΈ°μ—…

2008λ…„ Dun & Bradstreetμ—μ„œ 인도 IT SME 1μœ„ 평가

지톑 :

μŠ€μΉ΄μ΄ν”„ : arindam_mojumder

폭도:+919830307843,+918420200614
μ „ν™”: +91-33-32902857/23576070
μˆ˜μ‹ μž λΆ€λ‹΄(λ―Έκ΅­ 및 μΊλ‚˜λ‹€): +1-888-652-2121
영ꡭ : +44-020-81444070

팩슀 : 0760-284-6062

이 λ©”μ‹œμ§€μ—λŠ” κΆŒν•œμ΄ μžˆκ±°λ‚˜ 기밀일 수 μžˆλŠ” 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
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 인증 κΈ°μ—…

2008λ…„ Dun & Bradstreetμ—μ„œ 인도 IT SME 1μœ„ 평가

지톑 :

μŠ€μΉ΄μ΄ν”„ : arindam_mojumder

폭도:+919830307843,+918420200614
μ „ν™”: +91-33-32902857/23576070
μˆ˜μ‹ μž λΆ€λ‹΄(λ―Έκ΅­ 및 μΊλ‚˜λ‹€): +1-888-652-2121
영ꡭ : +44-020-81444070

팩슀 : 0760-284-6062

이 λ©”μ‹œμ§€μ—λŠ” κΆŒν•œμ΄ μžˆκ±°λ‚˜ 기밀일 수 μžˆλŠ” 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
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 인증 κΈ°μ—…

2008λ…„ Dun & Bradstreetμ—μ„œ 인도 IT SME 1μœ„ 평가

지톑 :

μŠ€μΉ΄μ΄ν”„ : arindam_mojumder

폭도:+919830307843,+918420200614
μ „ν™”: +91-33-32902857/23576070
μˆ˜μ‹ μž λΆ€λ‹΄(λ―Έκ΅­ 및 μΊλ‚˜λ‹€): +1-888-652-2121
영ꡭ : +44-020-81444070

팩슀 : 0760-284-6062

이 λ©”μ‹œμ§€μ—λŠ” κΆŒν•œμ΄ μžˆκ±°λ‚˜ 기밀일 수 μžˆλŠ” 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
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

이것은 아직 κ²€ν† λ˜μ§€ μ•Šμ•˜λ‹€κ³  μΆ”μΈ‘ν•©λ‹ˆλ‹€.

수직 정렬을 μœ„ν•΄ μž‘λ™ν•˜λŠ” 데 ν•„μš”ν•œ λ²ˆμ—­μž…λ‹ˆλ‹€(κ°„λ‹¨ν•œ κ΅¬ν˜„μ΄κΈ°λ₯Ό λ°”λžμ§€λ§Œ λΆ„λͺ…νžˆ 그렇지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€).

πŸ‘

          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 μ •ν™•νžˆ μ–΄λ–€ λ³€ν™˜μ΄ μ§€μ›λ˜κ³  μ§€μ›λ˜μ§€ μ•ŠλŠ”μ§€μ— λŒ€ν•œ 정보가 μžˆμŠ΅λ‹ˆκΉŒ?

νšŒμ „μ΄ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰