Display icons only on mask images Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!How to check whether a string contains a substring in JavaScript?HTML text input allow only numeric inputPreloading images with jQueryHow can I display a JavaScript object?jquery drag imagePreview an image before it is uploadedGetting image width on image load fails on IESwap an image for swf file using JqueryHow to define height of a container by an element within that containerRound to at most 2 decimal places (only if necessary)Local Cross-origin data error

How do living politicians protect their readily obtainable signatures from misuse?

How does light 'choose' between wave and particle behaviour?

Why aren't air breathing engines used as small first stages?

Most bit efficient text communication method?

Has negative voting ever been officially implemented in elections, or seriously proposed, or even studied?

Why is Nikon 1.4g better when Nikon 1.8g is sharper?

Is there a kind of relay only consumes power when switching?

Why do we bend a book to keep it straight?

When a candle burns, why does the top of wick glow if bottom of flame is hottest?

Illegal assignment from sObject to Id

Why do we need to use the builder design pattern when we can do the same thing with setters?

How come Sam didn't become Lord of Horn Hill?

How to write the following sign?

Disembodied hand growing fangs

Is it possible for SQL statements to execute concurrently within a single session in SQL Server?

Converted a Scalar function to a TVF function for parallel execution-Still running in Serial mode

Central Vacuuming: Is it worth it, and how does it compare to normal vacuuming?

What is a fractional matching?

What's the meaning of "fortified infraction restraint"?

Effects on objects due to a brief relocation of massive amounts of mass

Why is it faster to reheat something than it is to cook it?

How to compare two different files line by line in unix?

Dating a Former Employee

Amount of permutations on an NxNxN Rubik's Cube



Display icons only on mask images



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!How to check whether a string contains a substring in JavaScript?HTML text input allow only numeric inputPreloading images with jQueryHow can I display a JavaScript object?jquery drag imagePreview an image before it is uploadedGetting image width on image load fails on IESwap an image for swf file using JqueryHow to define height of a container by an element within that containerRound to at most 2 decimal places (only if necessary)Local Cross-origin data error



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








6















There are two types of images in our json files....



1.Mask images



  • Which have Transparent background as below :

enter image description here



2.Background images :



  • Any normal images

Right now I am displaying Icons on all images as in below codepens....



Icons on Mask images : https://codepen.io/kidsdial/pen/aMPvam



enter image description here



Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej



enter image description here



Sample Json for Mask image :



"layers" : [

"src" : "image1.png",
"name" : "mask_image_1"
,


Sample Json for Background images :



"layers" : [

"src" : "image2.png",
"name" : "bg_image"
,


Requirement :



but i want to display icons only on Mask images but not on Background images....



So I used below code , but that did't helped me :



if (layer.name == mask_image_1) 

imageUrl: imageUrl,



name of mask images will be start with "mask_" in JSON






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>












share|improve this question
























  • A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

    – Harshana
    Mar 25 at 6:37











  • @Harshana Updated the json file.....

    – vickey colors
    Mar 25 at 6:49











  • You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

    – keypaul
    Mar 25 at 6:56












  • @keypaul can you please tell which term you are referring here ?

    – vickey colors
    Mar 25 at 6:58











  • Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

    – keypaul
    Mar 25 at 7:01


















6















There are two types of images in our json files....



1.Mask images



  • Which have Transparent background as below :

enter image description here



2.Background images :



  • Any normal images

Right now I am displaying Icons on all images as in below codepens....



Icons on Mask images : https://codepen.io/kidsdial/pen/aMPvam



enter image description here



Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej



enter image description here



Sample Json for Mask image :



"layers" : [

"src" : "image1.png",
"name" : "mask_image_1"
,


Sample Json for Background images :



"layers" : [

"src" : "image2.png",
"name" : "bg_image"
,


Requirement :



but i want to display icons only on Mask images but not on Background images....



So I used below code , but that did't helped me :



if (layer.name == mask_image_1) 

imageUrl: imageUrl,



name of mask images will be start with "mask_" in JSON






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>












share|improve this question
























  • A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

    – Harshana
    Mar 25 at 6:37











  • @Harshana Updated the json file.....

    – vickey colors
    Mar 25 at 6:49











  • You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

    – keypaul
    Mar 25 at 6:56












  • @keypaul can you please tell which term you are referring here ?

    – vickey colors
    Mar 25 at 6:58











  • Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

    – keypaul
    Mar 25 at 7:01














6












6








6


1






There are two types of images in our json files....



1.Mask images



  • Which have Transparent background as below :

enter image description here



2.Background images :



  • Any normal images

Right now I am displaying Icons on all images as in below codepens....



Icons on Mask images : https://codepen.io/kidsdial/pen/aMPvam



enter image description here



Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej



enter image description here



Sample Json for Mask image :



"layers" : [

"src" : "image1.png",
"name" : "mask_image_1"
,


Sample Json for Background images :



"layers" : [

"src" : "image2.png",
"name" : "bg_image"
,


Requirement :



but i want to display icons only on Mask images but not on Background images....



So I used below code , but that did't helped me :



if (layer.name == mask_image_1) 

imageUrl: imageUrl,



name of mask images will be start with "mask_" in JSON






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>












share|improve this question
















There are two types of images in our json files....



1.Mask images



  • Which have Transparent background as below :

enter image description here



2.Background images :



  • Any normal images

Right now I am displaying Icons on all images as in below codepens....



Icons on Mask images : https://codepen.io/kidsdial/pen/aMPvam



enter image description here



Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej



enter image description here



Sample Json for Mask image :



"layers" : [

"src" : "image1.png",
"name" : "mask_image_1"
,


Sample Json for Background images :



"layers" : [

"src" : "image2.png",
"name" : "bg_image"
,


Requirement :



but i want to display icons only on Mask images but not on Background images....



So I used below code , but that did't helped me :



if (layer.name == mask_image_1) 

imageUrl: imageUrl,



name of mask images will be start with "mask_" in JSON






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>





var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');

var mask = $(".container").mask(
imageUrl: imageUrl,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return event.offsetY
;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>






javascript jquery json html5 if-statement






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 25 at 6:43







vickey colors

















asked Mar 22 at 10:12









vickey colorsvickey colors

144222




144222












  • A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

    – Harshana
    Mar 25 at 6:37











  • @Harshana Updated the json file.....

    – vickey colors
    Mar 25 at 6:49











  • You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

    – keypaul
    Mar 25 at 6:56












  • @keypaul can you please tell which term you are referring here ?

    – vickey colors
    Mar 25 at 6:58











  • Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

    – keypaul
    Mar 25 at 7:01


















  • A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

    – Harshana
    Mar 25 at 6:37











  • @Harshana Updated the json file.....

    – vickey colors
    Mar 25 at 6:49











  • You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

    – keypaul
    Mar 25 at 6:56












  • @keypaul can you please tell which term you are referring here ?

    – vickey colors
    Mar 25 at 6:58











  • Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

    – keypaul
    Mar 25 at 7:01

















A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

– Harshana
Mar 25 at 6:37





A simple json object and by removing the process of entire json object will help to identify the root cause easily. Can you make a simple code and update it in codepen?

– Harshana
Mar 25 at 6:37













@Harshana Updated the json file.....

– vickey colors
Mar 25 at 6:49





@Harshana Updated the json file.....

– vickey colors
Mar 25 at 6:49













You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

– keypaul
Mar 25 at 6:56






You can use indexOf to check if term exists in a string. developer.mozilla.org/it/docs/Web/JavaScript/Reference/…. Or if you can edit your JSON why not add other attribuite for the Mask images? mask: true

– keypaul
Mar 25 at 6:56














@keypaul can you please tell which term you are referring here ?

– vickey colors
Mar 25 at 6:58





@keypaul can you please tell which term you are referring here ?

– vickey colors
Mar 25 at 6:58













Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

– keypaul
Mar 25 at 7:01






Yournamevalue.indexOf('mask_'). There're a lot of option to check substring stackoverflow.com/questions/1789945/…

– keypaul
Mar 25 at 7:01













2 Answers
2






active

oldest

votes


















4





+50









You have to define new property name for json(data) function and then you can make condition like.



if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';



Here I have updated full code :






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








share|improve this answer























  • Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 7:20











  • @vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

    – Bhavin Solanki
    Mar 25 at 7:21











  • okay, i will try now.....

    – vickey colors
    Mar 25 at 7:22











  • @vickeycolors if it works for you, can you please accept and upvote my answer

    – Bhavin Solanki
    Mar 25 at 7:22











  • is this correct ? if(name.indexOf('mask_ ')! == -1)

    – vickey colors
    Mar 25 at 7:23


















0














as you said Mask image name starts with mask_ so u can search for this if it found in the name @0 location then can do ...



if (layer.name.search("mask_") == 0) 

...






share|improve this answer























  • Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 6:24











  • I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

    – vickey colors
    Mar 25 at 6:24











  • i got solution by other answer, thanks for your support....

    – vickey colors
    Apr 1 at 6:22











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55297319%2fdisplay-icons-only-on-mask-images%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









4





+50









You have to define new property name for json(data) function and then you can make condition like.



if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';



Here I have updated full code :






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








share|improve this answer























  • Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 7:20











  • @vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

    – Bhavin Solanki
    Mar 25 at 7:21











  • okay, i will try now.....

    – vickey colors
    Mar 25 at 7:22











  • @vickeycolors if it works for you, can you please accept and upvote my answer

    – Bhavin Solanki
    Mar 25 at 7:22











  • is this correct ? if(name.indexOf('mask_ ')! == -1)

    – vickey colors
    Mar 25 at 7:23















4





+50









You have to define new property name for json(data) function and then you can make condition like.



if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';



Here I have updated full code :






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








share|improve this answer























  • Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 7:20











  • @vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

    – Bhavin Solanki
    Mar 25 at 7:21











  • okay, i will try now.....

    – vickey colors
    Mar 25 at 7:22











  • @vickeycolors if it works for you, can you please accept and upvote my answer

    – Bhavin Solanki
    Mar 25 at 7:22











  • is this correct ? if(name.indexOf('mask_ ')! == -1)

    – vickey colors
    Mar 25 at 7:23













4





+50







4





+50



4




+50





You have to define new property name for json(data) function and then you can make condition like.



if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';



Here I have updated full code :






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








share|improve this answer













You have to define new property name for json(data) function and then you can make condition like.



if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';



Here I have updated full code :






var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>








var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>





var target;
var imageUrl = "https://i.imgur.com/As37YCl.png";

let jsonData =
"layers" : [

"x" : 0,
"height" : 788,
"layers" : [

"x" : 0,
"height" : 788,
"src" : "lRtZPoj.jpg",
"y" : 0,
"width" : 940,
"type" : "image",
"name" : "bg_image"

],
"y" : 0,
"width" : 940,
"type" : "group",
"name" : "fb_post_5"

]
;

$(document).ready(function()

// upload image onclick

$('.container').click(function(e)
// filtering out non-canvas clicks
if (e.target.tagName !== 'CANVAS') return;

// getting absolute points relative to container
const absX = e.offsetX + e.target.parentNode.offsetLeft + e.currentTarget.offsetLeft;
const absY = e.offsetY + e.target.parentNode.offsetTop + e.currentTarget.offsetTop;

const $canvasList = $(this).find('canvas');
// moving all canvas parents on the same z-index
$canvasList.parent().css(zIndex: 0);

$canvasList.filter(function () // filtering only applicable canvases
const bbox = this.getBoundingClientRect()
return (
absX >= bbox.left && absX <= bbox.left + bbox.width &&
absY >= bbox.top && absY <= bbox.top + bbox.height)
).each(function () // checking white in a click position
const x = absX - this.parentNode.offsetLeft - e.currentTarget.offsetLeft;
const y = absY - this.parentNode.offsetTop - e.currentTarget.offsetTop;
const pixel = this.getContext('2d').getImageData(x, y, 1, 1).data;
if (pixel[3] === 255)
$(this).parent().css(zIndex: 2)
target = this.id;
console.log(target);
setTimeout(() =>
$('#fileup').click();
, 20);

)
);


function getAllSrc(layers)
let arr = [];
layers.forEach(layer =>
if (layer.src)
arr.push(
src: layer.src,
x: layer.x,
y: layer.y,
name: layer.name
);
else if (layer.layers)
let newArr = getAllSrc(layer.layers);
if (newArr.length > 0)
newArr.forEach((
src,
x,
y,
name
) =>
arr.push(
src,
x: (layer.x + x),
y: (layer.y + y),
name: (name)
);
);


);
return arr;


function json(data)


var width = 0;
var height = 0;

let arr = getAllSrc(data.layers);

let layer1 = data.layers;
width = layer1[0].width;
height = layer1[0].height;
let counter = 0;
let table = [];

for (let
src,
x,
y,
name
of arr)
$(".container").css('width', width + "px").css('height', height + "px").addClass('temp');
if(name.indexOf('bg_image') == -1)
var imageUrl1 = imageUrl;
else
var imageUrl1 = '';

var mask = $(".container").mask(
imageUrl: imageUrl1,
maskImageUrl: 'https://i.imgur.com/' + src,
onMaskImageCreate: function(img)

img.css(
"position": "absolute",
"left": x + "px",
"top": y + "px"
);

,
id: counter
);
table.push(mask);
fileup.onchange = function()

let mask2 = table[target];
mask2.loadImage(URL.createObjectURL(fileup.files[0]));
document.getElementById('fileup').value = "";
;
counter++;
// get the text


drawText(data);


json(jsonData);
); // end of document ready


// extempl code - get the text

const fonts = []; // caching duplicate fonts

function drawText(layer)

if (layer.type === 'image') return;

if (!layer.type
// extempl code end



// jq plugin

(function($)
var JQmasks = [];
$.fn.mask = function(options)
// This is the easiest way to have default options.
var settings = $.extend(
// These are the defaults.
maskImageUrl: undefined,
imageUrl: undefined,
scale: 1,
id: new Date().getUTCMilliseconds().toString(),
x: 0, // image start position
y: 0, // image start position
onMaskImageCreate: function(div) ,
, options);


var container = $(this);

let prevX = 0,
prevY = 0,
draggable = false,
img,
canvas,
context,
image,
timeout,
initImage = false,
startX = settings.x,
startY = settings.y,
div;

container.mousePosition = function(event)
return ;


container.selected = function(ev)
var pos = container.mousePosition(ev);
var item = $(".masked-img canvas").filter(function()
var offset = $(this).offset()
var x = pos.x - offset.left;
var y = pos.y - offset.top;
var d = this.getContext('2d').getImageData(x, y, 1, 1).data;
return d[0] > 0
);

JQmasks.forEach(function(el)
var id = item.length > 0 ? $(item).attr("id") : "";
if (el.id == id)
el.item.enable();
else el.item.disable();
);
;

container.enable = function()
draggable = true;
$(canvas).attr("active", "true");
div.css(
"z-index": 2
);


container.disable = function()
draggable = false;
$(canvas).attr("active", "false");
div.css(
"z-index": 1
);


container.onDragStart = function(evt)
if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;

$(canvas).attr("active", "true");
container.selected(evt);
prevX = evt.clientX;
prevY = evt.clientY;
var img = new Image();
evt.originalEvent.dataTransfer.setDragImage(img, 10, 10);
evt.originalEvent.dataTransfer.setData('text/plain', 'anything');


;

container.getImagePosition = function()
return
x: settings.x,
y: settings.y,
scale: settings.scale
;
;

container.onDragOver = function(evt)

if (evt.target.getContext)
var pixel = evt.target.getContext('2d').getImageData(evt.offsetX, evt.offsetY, 1, 1).data;
if (pixel[3] === 255)
if (draggable && $(canvas).attr("active") === "true")
var x = settings.x + evt.clientX - prevX;
var y = settings.y + evt.clientY - prevY;
if (x == settings.x && y == settings.y)
return; // position has not changed
settings.x += evt.clientX - prevX;
settings.y += evt.clientY - prevY;
prevX = evt.clientX;
prevY = evt.clientY;
updateStyle();

else
evt.stopPropagation();
return false;


;

function updateStyle()

//context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.globalCompositeOperation = "source-over";
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = settings.maskImageUrl;
image.onload = function()
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0, image.width, image.height);
div.css(
"width": image.width,
"height": image.height
);
img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = settings.imageUrl;
img.onload = function()
settings.x = settings.x == 0 && initImage ? (canvas.width - (img.width * settings.scale)) / 2 : settings.x;
settings.y = settings.y == 0 && initImage ? (canvas.height - (img.height * settings.scale)) / 2 : settings.y;
context.globalCompositeOperation = 'source-atop';
context.drawImage(img, settings.x, settings.y, img.width * settings.scale, img.height * settings.scale);
initImage = false;
;
;
;

// change the draggable image
container.loadImage = function(imageUrl)
console.log("load");
//if (img)
// img.remove();
// reset the code.
settings.y = startY;
settings.x = startX;
prevX = prevY = 0;
settings.imageUrl = imageUrl;
initImage = true;
updateStyle();
;

// change the masked Image
function loadMaskImage(imageUrl)
canvas = document.createElement("canvas");
context = canvas.getContext('2d');
canvas.setAttribute("draggable", "true");
canvas.setAttribute("id", settings.id);
settings.maskImageUrl = imageUrl;
div = $("<div/>",
"class": "masked-img"
).append(canvas);

// div.find("canvas").on('touchstart mousedown', function(event)
div.find("canvas").on('dragstart', function(event)
if (event.handled === false) return;
event.handled = true;
container.onDragStart(event);
);

div.find("canvas").on('touchend mouseup', function(event)
if (event.handled === false) return;
event.handled = true;
container.selected(event);
);

div.find("canvas").bind("dragover", container.onDragOver);
container.append(div);
if (settings.onMaskImageCreate)
settings.onMaskImageCreate(div);
container.loadImage(settings.imageUrl);
;
loadMaskImage(settings.maskImageUrl);
JQmasks.push(
item: container,
id: settings.id
)
return container;
;
(jQuery));

.container 
background: gold;
position: relative;



.container img
position:absolute;
top:0;
bottom:250px;
left:0;
right:0;
margin:auto;
z-index:999;


.masked-img
overflow: hidden;
position: relative;


.txtContainer position:absolute; text-align:center; color:#FFF

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input id="fileup" name="fileup" type="file" style="display:none" >

<div class="container">

</div>






share|improve this answer












share|improve this answer



share|improve this answer










answered Mar 25 at 7:12









Bhavin SolankiBhavin Solanki

4,06421534




4,06421534












  • Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 7:20











  • @vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

    – Bhavin Solanki
    Mar 25 at 7:21











  • okay, i will try now.....

    – vickey colors
    Mar 25 at 7:22











  • @vickeycolors if it works for you, can you please accept and upvote my answer

    – Bhavin Solanki
    Mar 25 at 7:22











  • is this correct ? if(name.indexOf('mask_ ')! == -1)

    – vickey colors
    Mar 25 at 7:23

















  • Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 7:20











  • @vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

    – Bhavin Solanki
    Mar 25 at 7:21











  • okay, i will try now.....

    – vickey colors
    Mar 25 at 7:22











  • @vickeycolors if it works for you, can you please accept and upvote my answer

    – Bhavin Solanki
    Mar 25 at 7:22











  • is this correct ? if(name.indexOf('mask_ ')! == -1)

    – vickey colors
    Mar 25 at 7:23
















Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

– vickey colors
Mar 25 at 7:20





Thanks, if we give condition for ('bg_image') == -1, than it will work fine, instead can we give condition for mask_ means icons should display only for these types : mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

– vickey colors
Mar 25 at 7:20













@vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

– Bhavin Solanki
Mar 25 at 7:21





@vickeycolors yes, we can you just need to reverse the condition ('mask_ ') !== -1

– Bhavin Solanki
Mar 25 at 7:21













okay, i will try now.....

– vickey colors
Mar 25 at 7:22





okay, i will try now.....

– vickey colors
Mar 25 at 7:22













@vickeycolors if it works for you, can you please accept and upvote my answer

– Bhavin Solanki
Mar 25 at 7:22





@vickeycolors if it works for you, can you please accept and upvote my answer

– Bhavin Solanki
Mar 25 at 7:22













is this correct ? if(name.indexOf('mask_ ')! == -1)

– vickey colors
Mar 25 at 7:23





is this correct ? if(name.indexOf('mask_ ')! == -1)

– vickey colors
Mar 25 at 7:23













0














as you said Mask image name starts with mask_ so u can search for this if it found in the name @0 location then can do ...



if (layer.name.search("mask_") == 0) 

...






share|improve this answer























  • Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 6:24











  • I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

    – vickey colors
    Mar 25 at 6:24











  • i got solution by other answer, thanks for your support....

    – vickey colors
    Apr 1 at 6:22















0














as you said Mask image name starts with mask_ so u can search for this if it found in the name @0 location then can do ...



if (layer.name.search("mask_") == 0) 

...






share|improve this answer























  • Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 6:24











  • I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

    – vickey colors
    Mar 25 at 6:24











  • i got solution by other answer, thanks for your support....

    – vickey colors
    Apr 1 at 6:22













0












0








0







as you said Mask image name starts with mask_ so u can search for this if it found in the name @0 location then can do ...



if (layer.name.search("mask_") == 0) 

...






share|improve this answer













as you said Mask image name starts with mask_ so u can search for this if it found in the name @0 location then can do ...



if (layer.name.search("mask_") == 0) 

...







share|improve this answer












share|improve this answer



share|improve this answer










answered Mar 25 at 6:19









mastermindmastermind

872713




872713












  • Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 6:24











  • I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

    – vickey colors
    Mar 25 at 6:24











  • i got solution by other answer, thanks for your support....

    – vickey colors
    Apr 1 at 6:22

















  • Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

    – vickey colors
    Mar 25 at 6:24











  • I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

    – vickey colors
    Mar 25 at 6:24











  • i got solution by other answer, thanks for your support....

    – vickey colors
    Apr 1 at 6:22
















Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

– vickey colors
Mar 25 at 6:24





Yes, usually it will be like mask_image_1 , mask_image_2 , mask_pic_1 , mask_pic_2

– vickey colors
Mar 25 at 6:24













I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

– vickey colors
Mar 25 at 6:24





I updated your code here: codepen.io/kidsdial/pen/gEEPjQ , but i dont see any results, did i done something wrong ?

– vickey colors
Mar 25 at 6:24













i got solution by other answer, thanks for your support....

– vickey colors
Apr 1 at 6:22





i got solution by other answer, thanks for your support....

– vickey colors
Apr 1 at 6:22

















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55297319%2fdisplay-icons-only-on-mask-images%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript