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;
There are two types of images in our json files....
1.Mask images
- Which have Transparent background as below :
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
Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej
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>
javascript jquery json html5 if-statement
|
show 12 more comments
There are two types of images in our json files....
1.Mask images
- Which have Transparent background as below :
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
Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej
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>
javascript jquery json html5 if-statement
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
|
show 12 more comments
There are two types of images in our json files....
1.Mask images
- Which have Transparent background as below :
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
Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej
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>
javascript jquery json html5 if-statement
There are two types of images in our json files....
1.Mask images
- Which have Transparent background as below :
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
Icons on Background images : https://codepen.io/kidsdial/pen/jJXbej
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
javascript jquery json html5 if-statement
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
|
show 12 more comments
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
|
show 12 more comments
2 Answers
2
active
oldest
votes
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>
Thanks, if we give condition for('bg_image') == -1
, than it will work fine, instead can we give condition formask_
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
|
show 10 more comments
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)
...
Yes, usually it will be likemask_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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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>
Thanks, if we give condition for('bg_image') == -1
, than it will work fine, instead can we give condition formask_
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
|
show 10 more comments
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>
Thanks, if we give condition for('bg_image') == -1
, than it will work fine, instead can we give condition formask_
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
|
show 10 more comments
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>
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>
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 formask_
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
|
show 10 more comments
Thanks, if we give condition for('bg_image') == -1
, than it will work fine, instead can we give condition formask_
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
|
show 10 more comments
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)
...
Yes, usually it will be likemask_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
add a comment |
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)
...
Yes, usually it will be likemask_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
add a comment |
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)
...
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)
...
answered Mar 25 at 6:19
mastermindmastermind
872713
872713
Yes, usually it will be likemask_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
add a comment |
Yes, usually it will be likemask_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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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