parent
236f68461b
commit
be49de4401
@ -0,0 +1,3 @@
|
||||
# Pixel-Art-Maker-Website
|
||||
Description
|
||||
A website for drawing pixel art on an adjustable size canvas, with the ability to extract drawings into PNG images too using only html, css and javascript.
|
@ -0,0 +1,74 @@
|
||||
body{
|
||||
font-family: 'Saira', sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin:0;
|
||||
padding: 0;
|
||||
background-color: aqua;
|
||||
|
||||
}
|
||||
h1{text-align: center;}
|
||||
|
||||
.draw{
|
||||
border:2px solid grey;
|
||||
user-select: none;
|
||||
display:flex;
|
||||
flex-direction: column;
|
||||
height: 500px;
|
||||
width: 500px;
|
||||
background-color: white ;
|
||||
}
|
||||
.buttonrow{
|
||||
margin: 0.2%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
button{
|
||||
margin: 1%;
|
||||
width: 8%;
|
||||
background-color: rgb(252, 252, 127);
|
||||
border-color: grey;
|
||||
border-radius: 15%;
|
||||
font-size: medium;
|
||||
}
|
||||
#selectcol{
|
||||
|
||||
margin-right:1%;
|
||||
border-radius: 30%;
|
||||
border-width: 1px;
|
||||
background-color: rgb(252, 252, 127);
|
||||
|
||||
}
|
||||
#download{
|
||||
width:20%;
|
||||
}
|
||||
|
||||
input{
|
||||
|
||||
background-color: rgb(252, 252, 127);
|
||||
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 500px){
|
||||
.draw{
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
}
|
||||
.buttonrow{
|
||||
margin: 2%;
|
||||
|
||||
|
||||
}
|
||||
button{
|
||||
width: 20%;
|
||||
}
|
||||
#download{
|
||||
width:40%;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Pixel Art Drawing</title>
|
||||
<link rel='stylesheet' href='css/style.css'>
|
||||
<script src='js/script.js' defer></script>
|
||||
<script src="https://www.xarg.org/download/pnglib.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Pixel Art Maker</h1>
|
||||
<dev class="draw">
|
||||
</dev>
|
||||
|
||||
<dev class="buttonrow">
|
||||
<button id="clear">Clear</button>
|
||||
<button id="backfill">Filler</button>
|
||||
<button id="border">Grid:On</button>
|
||||
</dev>
|
||||
<dev class="buttonrow">
|
||||
<input type="color" id="selectcol"></input>
|
||||
|
||||
<input id="size" placeholder="example: 16x16 (square)">
|
||||
<button id="sizesubmit">Submit</button>
|
||||
|
||||
</dev>
|
||||
<dev class="buttonrow"> <button id='download'>Download</button></dev>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,146 @@
|
||||
|
||||
const box=document.getElementsByClassName("draw")[0];
|
||||
|
||||
let x=16; //Default Sizes
|
||||
let y=16;
|
||||
let boxsize=1/x*100;
|
||||
|
||||
let selectedcolor="rgb(0,0,0)"; //Default Selected Color
|
||||
|
||||
|
||||
let mousedown = false //Help variable that informs if the left mouse button is pressed.
|
||||
document.body.onmousedown = () => (mousedown = true)
|
||||
document.body.onmouseup = () => (mousedown = false)
|
||||
|
||||
|
||||
|
||||
|
||||
function clearscr(){ //Function for clearing the canvas
|
||||
const pixels = document.querySelectorAll('.pixel');
|
||||
pixels.forEach((pixel) => {
|
||||
pixel.style.backgroundColor='rgb(255,255,255)';});
|
||||
}
|
||||
|
||||
function inpcolor(e){ //Function that changes the selected color.
|
||||
selectedcolor = e.target.value;
|
||||
}
|
||||
|
||||
function submitfun(){ //function that gets called when you press the submit button to change the canvas size.
|
||||
|
||||
sizeinp=document.getElementById('size');
|
||||
textsize = sizeinp.value;
|
||||
let textarray= textsize.split("x");
|
||||
x=parseInt(textarray[0]);
|
||||
y=parseInt(textarray[0]);
|
||||
if(x>150){x=150;
|
||||
y=150;}
|
||||
boxsize=1/x*100;
|
||||
|
||||
removegridelements(box); //update canvas with new sizes.
|
||||
CreateGrid();
|
||||
clearscr();
|
||||
}
|
||||
|
||||
function gridbuttonfun(e){ //function that turns the pixels grid on and off.s
|
||||
if (e.target.innerHTML == "Grid:On"){
|
||||
const pixels = document.querySelectorAll('.pixel');
|
||||
pixels.forEach((pixel) => {
|
||||
pixel.style.outline='none';
|
||||
e.target.innerHTML = "Grid:Off"});}
|
||||
else if (e.target.innerHTML=="Grid:Off"){
|
||||
const pixels = document.querySelectorAll('.pixel');
|
||||
pixels.forEach((pixel) => {
|
||||
pixel.style.outline='1px solid grey';
|
||||
e.target.innerHTML = "Grid:On"});
|
||||
}
|
||||
}
|
||||
|
||||
function createpng(){ //function that creates a png image of the canvas.
|
||||
|
||||
const pixelarray=document.getElementsByClassName("pixel");
|
||||
var p = new PNGlib(x, x, 256);
|
||||
|
||||
for (var i = 0; i < x; i++){
|
||||
for (var j = 0; j < x; j++){
|
||||
var getpix = pixelarray[j*x+i];
|
||||
var colorpix=getpix.style.backgroundColor.split('rgb(');
|
||||
colorpix=colorpix[1];
|
||||
var colorarray= (colorpix).split(',');
|
||||
p.buffer[p.index(i, j)] = p.color(parseInt(colorarray[0]),parseInt(colorarray[1]),parseInt(colorarray[2]));}
|
||||
}
|
||||
document.write('<a href="data:image/png;base64,' + p.getBase64() + '" download="download"> click to download </a>');
|
||||
}
|
||||
|
||||
|
||||
function fillbackground(){ //function that changes every pixel in the canvas into the selected color.
|
||||
const pixels = document.querySelectorAll('.pixel');
|
||||
pixels.forEach((pixel) => {
|
||||
pixel.style.backgroundColor=selectedcolor;});
|
||||
}
|
||||
|
||||
function removegridelements(e){ //function that removes all the pixels of the canvas.
|
||||
while (e.firstChild) {
|
||||
e.removeChild(e.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function changeColor(e) { //function that changes the color of a pixel.
|
||||
|
||||
if (e.type === 'mouseover' && !mousedown) return
|
||||
|
||||
e.target.style.backgroundColor = selectedcolor;
|
||||
|
||||
}
|
||||
|
||||
function CreateGrid(){ //function that creates the pixel in the canvas.
|
||||
|
||||
for (let i=0;i<x;i++){
|
||||
let devrow = document.createElement("dev");
|
||||
|
||||
devrow.classList.add("row");
|
||||
|
||||
devrow.style.display="flex";
|
||||
devrow.style.height= `${boxsize}%`;
|
||||
devrow.style.width="100%";
|
||||
|
||||
for (let j=0;j<y;j++){
|
||||
let devbox = document.createElement("dev");
|
||||
devbox.classList.add("pixel");
|
||||
devbox.style.height=`100%`;
|
||||
devbox.style.width= `${boxsize}%`;
|
||||
devbox.style.outline="1px solid grey";
|
||||
devbox.style.outline.offset= "-1px";
|
||||
|
||||
devbox.addEventListener('mouseover', changeColor);
|
||||
devbox.addEventListener('mousedown', changeColor);
|
||||
devrow.appendChild(devbox) ;
|
||||
}
|
||||
|
||||
|
||||
box.appendChild(devrow);
|
||||
}}
|
||||
|
||||
|
||||
|
||||
CreateGrid(); //default creation of the canvas.
|
||||
clearscr();
|
||||
|
||||
//A list of event listeners for user inputs.
|
||||
const clear = document.getElementById('clear');
|
||||
clear.addEventListener('click',clearscr);
|
||||
|
||||
const filler = document.getElementById("backfill");
|
||||
filler.addEventListener('click',fillbackground);
|
||||
|
||||
const colorpicker = document.getElementById("selectcol");
|
||||
colorpicker.addEventListener("input", inpcolor);
|
||||
|
||||
const gridbutton = document.getElementById("border");
|
||||
gridbutton.addEventListener("click",gridbuttonfun);
|
||||
|
||||
const sizesubmit = document.getElementById('sizesubmit');
|
||||
sizesubmit.addEventListener("click",submitfun);
|
||||
|
||||
const downloadbut = document.getElementById('download');
|
||||
downloadbut.addEventListener("click",createpng);
|
Loading…
Reference in new issue