Created
April 18, 2020 09:16
-
-
Save teknosains/5110a7c5ff5aa2361614b66febf3ae72 to your computer and use it in GitHub Desktop.
// source https://jsbin.com/lijudez
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mini.css/3.0.1/mini-default.min.css"> | |
</head> | |
<body style='background-color:#fff;'> | |
<div class="container" style="border:1px solid #ddd;padding:10px"> | |
<div class="row"> | |
<div class="col-sm-12 col-md-12 col-lg-12"> | |
Hapus dulu Background photo mahasiswa disini: | |
<a href="https://www.remove.bg/" target="_blank">www.remove.bg</a> | |
, Lalu Upload file transparannya <input type="file" id="uploadFile"/> | |
<hr> | |
</div> | |
</div> | |
<div class="row"> | |
<div clas="col-sm-12 col-md-4 col-lg-4" style="text-align:center;border:1px solid #ddd;padding:10px"> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-sm-12 col-md-12 col-lg-12"> | |
<img id="photoMahasiwa" width="265" | |
title="Copy Image url lalu paste di www.remove.bg untuk hapus background"> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-sm-12 col-md-12 col-lg-12"> | |
<hr> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-sm-12 col-md-12 col-lg-12" > | |
<img id="photoTemplate" width="320" title="Template Jas harus transparan"> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div clas="col-sm-12 col-md-8 col-lg-8" style="text-align:center;border:1px solid #ddd;padding:10px"> | |
<button type="button" id="resetCanvas">Reset</button> | |
<h4>Drag Image Here</h4> | |
<canvas id="canvas" style="background-color:#3767d7" width="380" height="520" style="border: 1px solid gray" /> | |
</div> | |
</div> | |
</div> | |
<script id="jsbin-javascript"> | |
/* | |
* Author: Budi K | |
* Reference: https://stackoverflow.com/users/149636/lostsource | |
*/ | |
(function(window, document, undefined) { | |
'use strict'; | |
let requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || | |
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; | |
window.requestAnimationFrame = requestAnimationFrame; | |
let imagesOnCanvas = []; | |
// buat photo mahasiswa bisa di Drag/Drop | |
let photoMahasiwa = document.getElementById('photoMahasiwa'); | |
photoMahasiwa.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,h_360,w_265/v1587114925/pas-foto-bacground-biru-removebg-preview_k9z26a.png'; | |
photoMahasiwa.draggable = true; | |
photoMahasiwa.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
// buat template bisa di drag/drop | |
let photoTemplate = document.getElementById('photoTemplate'); | |
photoTemplate.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,w_320/v1587121489/background-jas-final_iwllzp.png'; | |
photoTemplate.draggable = true; | |
photoTemplate.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
canvas.addEventListener('drop', function(e) { | |
drop(e); | |
}); | |
canvas.addEventListener('dragover', function(e) { | |
allowDrop(e); | |
}); | |
function renderScene() { | |
requestAnimationFrame(renderScene); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
ctx.clearRect(0, 0, canvas.width, canvas.height); | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
// render image to canvas | |
if (obj.fromUpload) { | |
obj.context.drawImage(obj.image, obj.x, obj.y, obj.width, obj.height); | |
} else { | |
obj.context.drawImage(obj.image, obj.x, obj.y); | |
} | |
} | |
} | |
requestAnimationFrame(renderScene); | |
window.addEventListener("load", function() { | |
let canvas = document.getElementById('canvas'); | |
canvas.onmousedown = function(e) { | |
let downX = e.offsetX; | |
let downY = e.offsetY; | |
// scan images on canvas to determin if event hit an object | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
if (!isPointInRange(downX, downY, obj)) { | |
continue; | |
} | |
startMove(obj, downX, downY); | |
break; | |
} | |
} | |
}, false); | |
function startMove(obj, downX, downY) { | |
let canvas = document.getElementById('canvas'); | |
let origX = obj.x, | |
origY = obj.y; | |
canvas.onmousemove = function(e) { | |
let moveX = e.offsetX, | |
moveY = e.offsetY; | |
let diffX = moveX - downX, | |
diffY = moveY - downY; | |
obj.x = origX + diffX; | |
obj.y = origY + diffY; | |
} | |
canvas.onmouseup = function() { | |
// stop moving | |
canvas.onmousemove = function() {}; | |
} | |
} | |
function isPointInRange(x, y, obj) { | |
console.log("X: " + x + " Y: " + y); | |
console.log("Object Height, width:" + obj.height + ", " + obj.width); | |
console.log("Object X,Y: " + obj.x + "," + obj.y) | |
return !( | |
x < obj.x || | |
x > obj.x + obj.width || | |
y < obj.y || | |
y > obj.y + obj.height | |
); | |
} | |
function allowDrop(e) { | |
e.preventDefault(); | |
} | |
function drag(e) { | |
//store the position of the mouse relativly to the image position | |
e.dataTransfer.setData("mouse_position_x", e.clientX - e.target.offsetLeft); | |
e.dataTransfer.setData("mouse_position_y", e.clientY - e.target.offsetTop); | |
e.dataTransfer.setData("image_id", e.target.id); | |
} | |
function drop(e) { | |
e.preventDefault(); | |
let image = document.getElementById(e.dataTransfer.getData("image_id")); | |
console.log(image); | |
let mouse_position_x = e.dataTransfer.getData("mouse_position_x"); | |
let mouse_position_y = e.dataTransfer.getData("mouse_position_y"); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: image, | |
x: e.clientX - canvas.offsetLeft - mouse_position_x, | |
y: e.clientY - canvas.offsetTop - mouse_position_y, | |
width: image.offsetWidth, | |
height: image.offsetHeight, | |
fromUpload: false | |
}); | |
} | |
// reset Canvas | |
document.getElementById('resetCanvas') | |
.addEventListener('click', function(e) { | |
imagesOnCanvas = []; | |
renderScene(); | |
}); | |
// upload file | |
const uploadFile = document.getElementById('uploadFile'); | |
uploadFile.addEventListener('change', function(e) { | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
let reader = new FileReader(); | |
reader.onload = function(event){ | |
let img = new Image(265, 360); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: img, | |
x: 4, | |
y: 10, | |
width: 265, | |
height: 360, | |
fromUpload: true | |
}); | |
img.src = event.target.result; | |
} | |
reader.readAsDataURL(e.target.files[0]); | |
}); | |
})(window, document); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">/* | |
* Author: Budi K | |
* Reference: https://stackoverflow.com/users/149636/lostsource | |
*/ | |
(function(window, document, undefined) { | |
'use strict'; | |
let requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || | |
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; | |
window.requestAnimationFrame = requestAnimationFrame; | |
let imagesOnCanvas = []; | |
// buat photo mahasiswa bisa di Drag/Drop | |
let photoMahasiwa = document.getElementById('photoMahasiwa'); | |
photoMahasiwa.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,h_360,w_265/v1587114925/pas-foto-bacground-biru-removebg-preview_k9z26a.png'; | |
photoMahasiwa.draggable = true; | |
photoMahasiwa.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
// buat template bisa di drag/drop | |
let photoTemplate = document.getElementById('photoTemplate'); | |
photoTemplate.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,w_320/v1587121489/background-jas-final_iwllzp.png'; | |
photoTemplate.draggable = true; | |
photoTemplate.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
canvas.addEventListener('drop', function(e) { | |
drop(e); | |
}); | |
canvas.addEventListener('dragover', function(e) { | |
allowDrop(e); | |
}); | |
function renderScene() { | |
requestAnimationFrame(renderScene); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
ctx.clearRect(0, 0, canvas.width, canvas.height); | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
// render image to canvas | |
if (obj.fromUpload) { | |
obj.context.drawImage(obj.image, obj.x, obj.y, obj.width, obj.height); | |
} else { | |
obj.context.drawImage(obj.image, obj.x, obj.y); | |
} | |
} | |
} | |
requestAnimationFrame(renderScene); | |
window.addEventListener("load", function() { | |
let canvas = document.getElementById('canvas'); | |
canvas.onmousedown = function(e) { | |
let downX = e.offsetX; | |
let downY = e.offsetY; | |
// scan images on canvas to determin if event hit an object | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
if (!isPointInRange(downX, downY, obj)) { | |
continue; | |
} | |
startMove(obj, downX, downY); | |
break; | |
} | |
} | |
}, false); | |
function startMove(obj, downX, downY) { | |
let canvas = document.getElementById('canvas'); | |
let origX = obj.x, | |
origY = obj.y; | |
canvas.onmousemove = function(e) { | |
let moveX = e.offsetX, | |
moveY = e.offsetY; | |
let diffX = moveX - downX, | |
diffY = moveY - downY; | |
obj.x = origX + diffX; | |
obj.y = origY + diffY; | |
} | |
canvas.onmouseup = function() { | |
// stop moving | |
canvas.onmousemove = function() {}; | |
} | |
} | |
function isPointInRange(x, y, obj) { | |
console.log("X: " + x + " Y: " + y); | |
console.log("Object Height, width:" + obj.height + ", " + obj.width); | |
console.log("Object X,Y: " + obj.x + "," + obj.y) | |
return !( | |
x < obj.x || | |
x > obj.x + obj.width || | |
y < obj.y || | |
y > obj.y + obj.height | |
); | |
} | |
function allowDrop(e) { | |
e.preventDefault(); | |
} | |
function drag(e) { | |
//store the position of the mouse relativly to the image position | |
e.dataTransfer.setData("mouse_position_x", e.clientX - e.target.offsetLeft); | |
e.dataTransfer.setData("mouse_position_y", e.clientY - e.target.offsetTop); | |
e.dataTransfer.setData("image_id", e.target.id); | |
} | |
function drop(e) { | |
e.preventDefault(); | |
let image = document.getElementById(e.dataTransfer.getData("image_id")); | |
console.log(image); | |
let mouse_position_x = e.dataTransfer.getData("mouse_position_x"); | |
let mouse_position_y = e.dataTransfer.getData("mouse_position_y"); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: image, | |
x: e.clientX - canvas.offsetLeft - mouse_position_x, | |
y: e.clientY - canvas.offsetTop - mouse_position_y, | |
width: image.offsetWidth, | |
height: image.offsetHeight, | |
fromUpload: false | |
}); | |
} | |
// reset Canvas | |
document.getElementById('resetCanvas') | |
.addEventListener('click', function(e) { | |
imagesOnCanvas = []; | |
renderScene(); | |
}); | |
// upload file | |
const uploadFile = document.getElementById('uploadFile'); | |
uploadFile.addEventListener('change', function(e) { | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
let reader = new FileReader(); | |
reader.onload = function(event){ | |
let img = new Image(265, 360); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: img, | |
x: 4, | |
y: 10, | |
width: 265, | |
height: 360, | |
fromUpload: true | |
}); | |
img.src = event.target.result; | |
} | |
reader.readAsDataURL(e.target.files[0]); | |
}); | |
})(window, document);</script></body> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Author: Budi K | |
* Reference: https://stackoverflow.com/users/149636/lostsource | |
*/ | |
(function(window, document, undefined) { | |
'use strict'; | |
let requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || | |
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; | |
window.requestAnimationFrame = requestAnimationFrame; | |
let imagesOnCanvas = []; | |
// buat photo mahasiswa bisa di Drag/Drop | |
let photoMahasiwa = document.getElementById('photoMahasiwa'); | |
photoMahasiwa.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,h_360,w_265/v1587114925/pas-foto-bacground-biru-removebg-preview_k9z26a.png'; | |
photoMahasiwa.draggable = true; | |
photoMahasiwa.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
// buat template bisa di drag/drop | |
let photoTemplate = document.getElementById('photoTemplate'); | |
photoTemplate.src = 'https://res.cloudinary.com/cepot/image/upload/c_scale,w_320/v1587121489/background-jas-final_iwllzp.png'; | |
photoTemplate.draggable = true; | |
photoTemplate.addEventListener('dragstart', function(e) { | |
drag(e); | |
}); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
canvas.addEventListener('drop', function(e) { | |
drop(e); | |
}); | |
canvas.addEventListener('dragover', function(e) { | |
allowDrop(e); | |
}); | |
function renderScene() { | |
requestAnimationFrame(renderScene); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
ctx.clearRect(0, 0, canvas.width, canvas.height); | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
// render image to canvas | |
if (obj.fromUpload) { | |
obj.context.drawImage(obj.image, obj.x, obj.y, obj.width, obj.height); | |
} else { | |
obj.context.drawImage(obj.image, obj.x, obj.y); | |
} | |
} | |
} | |
requestAnimationFrame(renderScene); | |
window.addEventListener("load", function() { | |
let canvas = document.getElementById('canvas'); | |
canvas.onmousedown = function(e) { | |
let downX = e.offsetX; | |
let downY = e.offsetY; | |
// scan images on canvas to determin if event hit an object | |
for (let x = 0, len = imagesOnCanvas.length; x < len; x++) { | |
let obj = imagesOnCanvas[x]; | |
if (!isPointInRange(downX, downY, obj)) { | |
continue; | |
} | |
startMove(obj, downX, downY); | |
break; | |
} | |
} | |
}, false); | |
function startMove(obj, downX, downY) { | |
let canvas = document.getElementById('canvas'); | |
let origX = obj.x, | |
origY = obj.y; | |
canvas.onmousemove = function(e) { | |
let moveX = e.offsetX, | |
moveY = e.offsetY; | |
let diffX = moveX - downX, | |
diffY = moveY - downY; | |
obj.x = origX + diffX; | |
obj.y = origY + diffY; | |
} | |
canvas.onmouseup = function() { | |
// stop moving | |
canvas.onmousemove = function() {}; | |
} | |
} | |
function isPointInRange(x, y, obj) { | |
console.log("X: " + x + " Y: " + y); | |
console.log("Object Height, width:" + obj.height + ", " + obj.width); | |
console.log("Object X,Y: " + obj.x + "," + obj.y) | |
return !( | |
x < obj.x || | |
x > obj.x + obj.width || | |
y < obj.y || | |
y > obj.y + obj.height | |
); | |
} | |
function allowDrop(e) { | |
e.preventDefault(); | |
} | |
function drag(e) { | |
//store the position of the mouse relativly to the image position | |
e.dataTransfer.setData("mouse_position_x", e.clientX - e.target.offsetLeft); | |
e.dataTransfer.setData("mouse_position_y", e.clientY - e.target.offsetTop); | |
e.dataTransfer.setData("image_id", e.target.id); | |
} | |
function drop(e) { | |
e.preventDefault(); | |
let image = document.getElementById(e.dataTransfer.getData("image_id")); | |
console.log(image); | |
let mouse_position_x = e.dataTransfer.getData("mouse_position_x"); | |
let mouse_position_y = e.dataTransfer.getData("mouse_position_y"); | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: image, | |
x: e.clientX - canvas.offsetLeft - mouse_position_x, | |
y: e.clientY - canvas.offsetTop - mouse_position_y, | |
width: image.offsetWidth, | |
height: image.offsetHeight, | |
fromUpload: false | |
}); | |
} | |
// reset Canvas | |
document.getElementById('resetCanvas') | |
.addEventListener('click', function(e) { | |
imagesOnCanvas = []; | |
renderScene(); | |
}); | |
// upload file | |
const uploadFile = document.getElementById('uploadFile'); | |
uploadFile.addEventListener('change', function(e) { | |
let canvas = document.getElementById('canvas'); | |
let ctx = canvas.getContext('2d'); | |
let reader = new FileReader(); | |
reader.onload = function(event){ | |
let img = new Image(265, 360); | |
imagesOnCanvas.push({ | |
context: ctx, | |
image: img, | |
x: 4, | |
y: 10, | |
width: 265, | |
height: 360, | |
fromUpload: true | |
}); | |
img.src = event.target.result; | |
} | |
reader.readAsDataURL(e.target.files[0]); | |
}); | |
})(window, document); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment