Drawing App
About this app
A fun drawing app where you can create and edit images.
Drawing App Apagar Terminar Créditos App criado por Renovato, galinhamagricela, maiconjexon e JunyTony. Editor de Imagens Invertido Arte Pop Caneta Mágica
Related apps
Put this on your site
Source
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Drawing App</title>
<meta name="description" content="A fun drawing app where you can create and edit images.">
<meta name="keywords" content="drawing, app, image, edit, colors, effects, credits">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript">
try {
// App Javascript Goes Here. Place your entire script content inside the try block for error handling.
// This will run when the DOM is ready.
document.addEventListener("DOMContentLoaded", function() {
// Variables
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
let isDrawing = false;
let color = '#FF0000';
// Event Listeners
canvas.addEventListener('mousedown', startDrawing);
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('mouseup', stopDrawing);
canvas.addEventListener('mouseout', stopDrawing);
const eraseButton = document.getElementById('erase-button');
eraseButton.addEventListener('click', erase);
const colorButtons = document.querySelectorAll('.color-button');
colorButtons.forEach(button => {
button.addEventListener('click', changeColor);
});
const finishButton = document.getElementById('finish-button');
finishButton.addEventListener('click', showCredits);
// Functions
function startDrawing(e) {
isDrawing = true;
draw(e);
}
function draw(e) {
if (!isDrawing) return;
context.lineWidth = 5;
context.lineCap = 'round';
context.strokeStyle = color;
context.lineTo(e.clientX, e.clientY);
context.stroke();
context.beginPath();
context.moveTo(e.clientX, e.clientY);
}
function stopDrawing() {
isDrawing = false;
context.beginPath();
}
function erase() {
context.clearRect(0, 0, canvas.width, canvas.height);
}
function changeColor(e) {
color = e.target.dataset.color;
}
function showCredits() {
const creditsContainer = document.getElementById('credits-container');
creditsContainer.style.display = 'block';
}
const imageEditor = document.getElementById('image-editor');
const imageInput = document.getElementById('image-input');
const effectButtons = document.querySelectorAll('.effect-button');
imageInput.addEventListener('change', function(e) {
const reader = new FileReader();
reader.onload = function(event) {
const img = new Image();
img.onload = function() {
imageEditor.width = img.width;
imageEditor.height = img.height;
imageEditor.getContext('2d').drawImage(img, 0, 0);
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
});
effectButtons.forEach(button => {
button.addEventListener('click', applyEffect);
});
function applyEffect(e) {
const effect = e.target.dataset.effect;
const imageData = imageEditor.getContext('2d').getImageData(0, 0, imageEditor.width, imageEditor.height);
const data = imageData.data;
switch (effect) {
case 'invert':
for (let i = 0; i < data.length; i += 4) {
data[i] = 255 - data[i];
data[i + 1] = 255 - data[i + 1];
data[i + 2] = 255 - data[i + 2];
}
break;
case 'popart':
for (let i = 0; i < data.length; i += 4) {
const red = data[i];
const green = data[i + 1];
const blue = data[i + 2];
const average = (red + green + blue) / 3;
data[i] = average < 128 ? 2 * average : 255;
data[i + 1] = average < 128 ? 0 : 2 * (average - 128);
data[i + 2] = average < 128 ? 0 : 2 * (average - 128);
}
break;
case 'magicpen':
for (let i = 0; i < data.length; i += 4) {
data[i] = 255 - data[i];
data[i + 1] = 255 - data[i + 1];
data[i + 2] = 255;
}
break;
}
imageEditor.getContext('2d').putImageData(imageData, 0, 0);
}
});
} catch (error) {
// This will throw the error to the parent window.
throw error;
}
</script>
<style>
#canvas {
background-color: #FFFFFF;
cursor: crosshair;
}
.color-button {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 10px;
cursor: pointer;
}
#credits-container {
display: none;
margin-top: 20px;
}
#image-editor {
margin-top: 20px;
border: 1px solid #000000;
}
.effect-button {
margin-right: 10px;
cursor: pointer;
}
</style>
</head>
<body>
<div id="main-container" class="container">
<canvas id="canvas" width="800" height="600"></canvas>
<div>
<button id="erase-button" class="btn btn-warning"><i class="fa fa-eraser"></i> Apagar</button>
<div class="btn-group">
<button class="btn btn-danger color-button" data-color="#FF0000"></button>
<button class="btn btn-success color-button" data-color="#00FF00"></button>
<button class="btn btn-primary color-button" data-color="#0000FF"></button>
</div>
<button id="finish-button" class="btn btn-info"><i class="fa fa-check"></i> Terminar</button>
</div>
<div id="credits-container">
<h2>Créditos</h2>
<p>App criado por Renovato, galinhamagricela, maiconjexon e JunyTony.</p>
</div>
<div>
<h2>Editor de Imagens</h2>
<input type="file" id="image-input" accept="image/*">
<canvas id="image-editor"></canvas>
<div>
<button class="btn btn-secondary effect-button" data-effect="invert">Invertido</button>
<button class="btn btn-secondary effect-button" data-effect="popart">Arte Pop</button>
<button class="btn btn-secondary effect-button" data-effect="magicpen">Caneta Mágica</button>
</div>
</div>
</div>
</body>
</html>
NEW APPS
These are apps made by the community!