mirror of
https://github.com/niklasvh/html2canvas.git
synced 2023-08-10 21:13:10 +03:00
Added support for base64 encoded images as sources
This commit is contained in:
parent
9f924dfbab
commit
39551dac1f
@ -28,6 +28,16 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (typeof Array.prototype.indexOf == "undefined") {
|
||||||
|
Array.prototype.indexOf = function(elem) {
|
||||||
|
if (!this.length) return -1;
|
||||||
|
for (var i = 0, len = this.length; i < len; i++) {
|
||||||
|
if (this[i] == elem) return i
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a render of the element el
|
* Creates a render of the element el
|
||||||
* @constructor
|
* @constructor
|
||||||
@ -173,7 +183,6 @@ html2canvas.prototype.init = function(){
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
html2canvas.prototype.start = function(){
|
html2canvas.prototype.start = function(){
|
||||||
// console.log(this.images);
|
|
||||||
if (this.images.length == 0 || this.imagesLoaded==this.images.length/2){
|
if (this.images.length == 0 || this.imagesLoaded==this.images.length/2){
|
||||||
|
|
||||||
this.log('Finished loading '+this.imagesLoaded+' images, Started parsing');
|
this.log('Finished loading '+this.imagesLoaded+' images, Started parsing');
|
||||||
@ -294,11 +303,13 @@ html2canvas.prototype.finish = function(){
|
|||||||
html2canvas.prototype.drawBackground = function(el,bounds,ctx){
|
html2canvas.prototype.drawBackground = function(el,bounds,ctx){
|
||||||
|
|
||||||
// TODO add support for multi background-images
|
// TODO add support for multi background-images
|
||||||
var background_image = this.getCSS(el,"background-image").split(",")[0];
|
var background_image = this.getCSS(el,"background-image");
|
||||||
var background_repeat = this.getCSS(el,"background-repeat").split(",")[0];
|
var background_repeat = this.getCSS(el,"background-repeat").split(",")[0];
|
||||||
|
|
||||||
if (typeof background_image != "undefined" && /^(1|none)$/.test(background_image)==false && /^(-webkit|-moz|linear-gradient|-o-)/.test(background_image)==false){
|
if (!background_image.match(/data:image\/.*;base64,/i))
|
||||||
|
background_image = this.getCSS(el,"background-image").split(",")[0];
|
||||||
|
|
||||||
|
if (typeof background_image != "undefined" && /^(1|none)$/.test(background_image)==false && /^(-webkit|-moz|linear-gradient|-o-)/.test(background_image)==false){
|
||||||
background_image = this.backgroundImageUrl(background_image);
|
background_image = this.backgroundImageUrl(background_image);
|
||||||
var image = this.loadImage(background_image);
|
var image = this.loadImage(background_image);
|
||||||
|
|
||||||
@ -439,7 +450,10 @@ html2canvas.prototype.drawBackground = function(el,bounds,ctx){
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
html2canvas.prototype.backgroundImageUrl = function(src){
|
html2canvas.prototype.backgroundImageUrl = function(src){
|
||||||
if (src.substr(0,5)=='url("'){
|
if (src.match(/data:image\/.*;base64,/i)) {
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
if (src.toLowerCase().substr(0,5)=='url("'){
|
||||||
src = src.substr(5);
|
src = src.substr(5);
|
||||||
src = src.substr(0,src.length-2);
|
src = src.substr(0,src.length-2);
|
||||||
}else{
|
}else{
|
||||||
@ -610,7 +624,6 @@ html2canvas.prototype.getBorderData = function(el){
|
|||||||
|
|
||||||
html2canvas.prototype.drawBorders = function(el,ctx, bounds,clip){
|
html2canvas.prototype.drawBorders = function(el,ctx, bounds,clip){
|
||||||
|
|
||||||
|
|
||||||
var x = bounds.left;
|
var x = bounds.left;
|
||||||
var y = bounds.top;
|
var y = bounds.top;
|
||||||
var w = bounds.width;
|
var w = bounds.width;
|
||||||
@ -961,7 +974,7 @@ html2canvas.prototype.getImages = function(el) {
|
|||||||
|
|
||||||
if (background_image && background_image != "1" && background_image != "none" && background_image.substring(0,7)!="-webkit" && background_image.substring(0,3)!="-o-" && background_image.substring(0,4)!="-moz"){
|
if (background_image && background_image != "1" && background_image != "none" && background_image.substring(0,7)!="-webkit" && background_image.substring(0,3)!="-o-" && background_image.substring(0,4)!="-moz"){
|
||||||
// TODO add multi image background support
|
// TODO add multi image background support
|
||||||
var src = this.backgroundImageUrl(background_image.split(",")[0]);
|
var src = this.backgroundImageUrl(background_image.match(/data:image\/.*;base64,/i) ? background_image : background_image.split(",")[0]);
|
||||||
this.preloadImage(src);
|
this.preloadImage(src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -991,7 +1004,14 @@ html2canvas.prototype.preloadImage = function(src){
|
|||||||
|
|
||||||
|
|
||||||
if (this.getIndex(this.images,src)==-1){
|
if (this.getIndex(this.images,src)==-1){
|
||||||
if (this.isSameOrigin(src)){
|
if (src.match(/data:image\/.*;base64,/i)) {
|
||||||
|
var img = new Image();
|
||||||
|
img.src = src.replace(/url\(['"]|['"]\)$/img, '');
|
||||||
|
this.images.push(src);
|
||||||
|
this.images.push(img);
|
||||||
|
this.imagesLoaded++;
|
||||||
|
this.start();
|
||||||
|
} else if(this.isSameOrigin(src)){
|
||||||
this.images.push(src);
|
this.images.push(src);
|
||||||
// console.log('a'+src);
|
// console.log('a'+src);
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
|
@ -46,6 +46,11 @@
|
|||||||
div{
|
div{
|
||||||
display:block;
|
display:block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.encoded {
|
||||||
|
background:url("data:image/jpeg;base64,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");
|
||||||
|
background-position: center center;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@ -88,11 +93,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="medium">
|
<div class="medium">
|
||||||
|
|
||||||
<div style="background:url(image.jpg) no-repeat -15% 25px;"></div>
|
<div style="background:url(image.jpg) no-repeat -15% 25px;"></div>
|
||||||
<div style="background-image:url(image.jpg), url(image2.jpg); background-repeat: repeat-x; background-position: 50px 50px, 100px 100px;"></div>
|
<div style="background-image:url(image.jpg), url(image2.jpg); background-repeat: repeat-x; background-position: 50px 50px, 100px 100px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="medium">
|
||||||
|
<div class="encoded"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user