Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <title>HTML5 canvas vertical image transition and magical magnifying glass with persistent feature</title>
- </head>
- <body>
- <canvas id="myCanvas" width="512" height="512"></canvas>
- <style>
- canvas {
- display: block;
- margin-left: auto;
- margin-right: auto;
- /* drawing magnifying glass on canvas since CSS3 cursor does not have a bigger size to match viewing result when zooming on web page */
- cursor: none;
- }
- </style>
- <script>
- /*
- Code based on https://slicker.me/javascript/image_transition_effect.htm
- A fun test can be made with images from https://github.com/zhengyima/DeepNude_NoWatermark_withModel or https://github.com/stacklikemind/deepnude_official
- Server needed because we save drawing of local files when using persistent magnifying glass on mouse up: https://stackoverflow.com/questions/22710627/tainted-canvases-may-not-be-exported
- Get magnifying glass cursor (80x50 pixels view and 5 pixels border) with this Linux command:
- echo "iVBORw0KGgoAAAANSUhEUgAAAHsAAABTCAYAAAC/OHgkAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
- kT1Iw0AcxV9TpaKVDu0g4pChOlkUFXHUKhShQqgVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg
- +AHi6OSk6CIl/i8ptIj14Lgf7+497t4BQr3MNKtrHNB020wl4mImuyoGXtGHEMKIYUxmljEnSUl0
- HF/38PH1LsazOp/7c/SrOYsBPpF4lhmmTbxBPL1pG5z3iSOsKKvE58SjJl2Q+JHrisdvnAsuCzwz
- YqZT88QRYrHQxkobs6KpEU8RR1VNp3wh47HKeYuzVq6y5j35C4M5fWWZ6zSHkMAiliBBhIIqSijD
- pr5K0EmxkKL9eAf/oOuXyKWQqwRGjgVUoEF2/eB/8LtbKz854SUF40D3i+N8DAOBXaBRc5zvY8dp
- nAD+Z+BKb/krdWDmk/RaS4seAaFt4OK6pSl7wOUOMPBkyKbsSn6aQj4PvJ/RN2WB8C3Qu+b11tzH
- 6QOQpq6SN8DBITBSoOz1Du/uae/t3zPN/n4AxWpyyLh2Xo8AAAAGYktHRAD/AP8A/6C9p5MAAAAJ
- cEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfmCw8TLTg1MowgAAAAGXRFWHRDb21tZW50AENyZWF0
- ZWQgd2l0aCBHSU1QV4EOFwAAAOJJREFUeNrt3ckNwzAQBMGl4fxTpnPwgzq6OgJBhRHIl9bM7NGJ
- 1tUP8GHQCTZswdaj+971MPHwtmULtmALtmALtmDDFmzBFmzBFmzBFmzBFmzBhi3Ygi3Ygi3Ygi3Y
- gi3Ygg1bsAVbsAVbsAVbsAVbsAVbsGELtmALtmALtmALtv5qjV89nX7fsKH7jL+1bdlWbtlW/oID
- A8CzFrDvt9gF28phWzlsK4fdXjnsEDjsEDrsEDjsEDrsEDjs0BUNdmjlsEMrhx1aOezQymGHVg47
- BA47hA47BA47hA47BA47hP4DpbAehj+p6uEAAAAASUVORK5CYII=" | base64 -d > magnifying_glass.png
- */
- // https://www.quora.com/Is-%E2%80%98let%E2%80%99-or-%E2%80%98var%E2%80%99-more-appropriate-for-declaring-variables-in-JavaScript/answer/Glenn-Anderson?ch=10&oid=146277096&share=3e76ca68&target_type=answer
- var imageInit = new Image();
- imageInit.src = "input.png";
- var image = new Image();
- image.src = "output.png";
- var canvas = document.getElementById("myCanvas");
- var context = canvas.getContext("2d");
- var row, imageWidth, imageHeight;
- var magnifyingGlass = new Image();
- magnifyingGlass.src = "magnifying_glass.png";
- context.drawImage(imageInit, 0, 0);
- image.onload = function() {
- imageWidth = image.width;
- imageHeight = image.height;
- row = 0;
- };
- var img;
- var animation;
- var animationFinished = true;
- var backwards = false;
- document.addEventListener("keypress", function() {
- //console.log(row);
- animationFinished = false;
- cancelAnimationFrame(animation);
- if (!backwards) {
- img = image;
- animate();
- backwards = true;
- }
- else {
- img = imageInit;
- animateBackwards();
- backwards = false;
- }
- });
- var drawing = false;
- var imgBak = new Image();
- imgBak.src = imageInit.src;
- canvas.addEventListener("mousedown", function(e) {
- drawing = true;
- });
- canvas.addEventListener("mouseup", function(e) {
- drawing = false;
- });
- canvas.addEventListener("mousemove", function(e) {
- if (animationFinished) {
- if (!drawing) {
- // https://stackoverflow.com/questions/10403214/html5-canvas-mouse-coordinates/10403520#10403520
- var rect = canvas.getBoundingClientRect();
- var x = e.clientX - rect.left;
- var y = e.clientY;
- //console.log(x, y);
- context.drawImage(imgBak, 0, 0);
- context.drawImage(image, x - 80, y - 50, 80, 50, x - 80, y - 50, 80, 50);
- context.drawImage(magnifyingGlass, x - 85, y - 55);
- }
- else {
- var rect = canvas.getBoundingClientRect();
- var x = e.clientX - rect.left;
- var y = e.clientY;
- context.drawImage(imgBak, 0, 0);
- context.drawImage(image, x - 80, y - 50, 80, 50, x - 80, y - 50, 80, 50);
- imgBak.src = canvas.toDataURL();
- context.drawImage(magnifyingGlass, x - 85, y - 55);
- }
- }
- });
- function animate() {
- context.drawImage(img, 0, row, imageWidth, row, 0, row, imageWidth, row);
- if (row < imageHeight) {
- ++row;
- animation = requestAnimationFrame(animate);
- }
- else {
- imgBak.src = image.src;
- animationFinished = true;
- }
- }
- function animateBackwards() {
- context.drawImage(img, 0, row, imageWidth, row, 0, row, imageWidth, row);
- if (row > 0) {
- --row;
- animation = requestAnimationFrame(animateBackwards);
- }
- else {
- imgBak.src = imageInit.src;
- animationFinished = true;
- }
- }
- </script>
- </body>
- </html>
Add Comment
Please, Sign In to add comment