๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Frontend

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Alpha ver.) : ์ด๋ฏธ์ง€ ๋ฐ๊ธฐ์กฐ์ ˆ, ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ๋ฏธ๋Ÿฌ๋ง, ํšŒ์ „, ํ™•๋Œ€/์ถ•์†Œ, ๋‹ค์ด์•„๋ชฌ๋“œ๋กœ ๋งŒ๋“ค๊ธฐ

by HanaV 2023. 4. 11.
728x90

*์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต์šฉ์œผ๋กœ rgb๋ฅผ ์ž„์˜์˜ ์ˆซ์ž(math.random()*256)๋กœ ๋Œ€์ฒดํ•จ.
*์ •์‚ฌ๊ฐํ˜•์ธ GrayScale์ด๋ฏธ์ง€๋ผ ๊ฐ€์ •ํ•จ.

 

1. ์ด๋ฏธ์ง€ ์›๋ณธ ๊ทธ๋Œ€๋กœ

//ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€
        function display(image, height, width) {
            
                for(var i=0; i<height; i++) {
                    for (var k=0; k<width; k++) {

                        var space = "";
                        if (image[i][k] < 10)
                            space = "00";
                        else if (image[i][k] <100)
                            space = "0";

                        document.write(space + image[i][k] + " ");
                    }
                    document.write("<br>");
                }
                document.write("<br><br>");
        }

์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋Š” 5~10 ์ค‘์—์„œ ๋žœ๋คํ•˜๊ฒŒ ์ •ํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.

//์ด๋ฏธ์ง€ํŒŒ์ผ ์„ ํƒํ•˜๋ฉด ํฌ๊ธฐ๊ฐ€ ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋คํ•˜๊ฒŒ ํ•˜์ž
        inHeight = inWidth = Math.floor(Math.random() * 6 + 5); //5~10ํฌ๊ธฐ ์˜์ƒ
        //๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด
        inImage = new Array(inHeight);
            for (i=0; i<inHeight; i++) {
                inImage[i] = new Array(inWidth);
            }
        
        //ํŒŒ์ผ์—์„œ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ
        for (i=0; i<inHeight; i++) {
            for (k=0; k<inWidth; k++) {
                //์—ฌ๊ธฐ์„œ [i][k] ๊ฐ’์„ ์ฝ๊ธฐ
                inImage[i][k] = Math.floor(Math.random() * 256);
            }
        }

        display(inImage, inHeight, inWidth);
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
display(inImage, inHeight, inWidth);

 

2. ์ด๋ฏธ์ง€ ๋ฐ๊ธฐ ์กฐ์ ˆ

์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด inImage์™€ outImage๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€๊ณ , ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ด ์ฃผ์—ˆ๋‹ค.
outImage๋Š” ๋ฐ˜๋ณต๋˜์–ด ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋”ฐ๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

   function out(height, width) {
            outHeight = height;
            outWidth = width;
            outImage = new Array(height);
            for(i=0; i<height; i++) {
                outImage[i] = new Array(width);
            }
        }

ํ•ญ์ƒ 0๊ณผ 255 ์‚ฌ์ด์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ์กฐ๊ฑด์„ ์ ์šฉ์‹œ์ผœ ์ค€๋‹ค.

      function brightness(image, height, width, number) {
            document.write("==image brightness " + number + "==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    
                    if (number>0) {
                        if (image[i][k] + number > 255) {
                            outImage[i][k] =  255;
                        } else {
                            outImage[i][k] = image[i][k] + number;
                        }
                    } else {
                        if (image[i][k] + number < 0) {
                            outImage[i][k] = 0;
                        } else {
                            outImage[i][k] = image[i][k] + number;
                        }
                    }
                }
            }
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
     brightness(inImage, inHeight, inWidth, 100);
     brightness(inImage, inHeight, inWidth, -100);

 

3. ์ด๋ฏธ์ง€ ํ‘๋ฐฑ์ฒ˜๋ฆฌ

์›๋ž˜ rgb ์„ธ ๊ฐ’์ด ์žˆ์œผ๋ฉด r=g=b์ธ ์ƒํƒœ๊ฐ€ ํ‘๋ฐฑ(์ฑ„๋„๊ฐ€ 0) ์ฒ˜๋ฆฌ๋˜๋Š”๋ฐ, ๊ฐ’์ด ํ•˜๋‚˜์ด๋ฏ€๋กœ 127.5๋ณด๋‹ค ํฌ๋ฉด 255, 127.5๋ณด๋‹ค ์ž‘์œผ๋ฉด 0์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ๋กœ ํ•œ๋‹ค.

function blackWhite(image, height, width) {
            document.write("==image only with black and white==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {

                        if (image[i][k] > (0 + 255)/2) {
                            outImage[i][k] =  255;
                        } else {
                            outImage[i][k] = 0;
                        }
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
blackWhite(inImage, inHeight, inWidth);

 

4. ์ด๋ฏธ์ง€ ์ƒ‰์ƒ ๋ฐ˜์ „์‹œํ‚ค๊ธฐ

๊ฐ„๋‹จํ•˜๊ฒŒ 255์—์„œ ์ด์ „ ๊ฐ’์„ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค.

     function colorInversion(image, height, width) {
            document.write("==image color inversion==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = 255 - image[i][k];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
colorInversion(inImage, inHeight, inWidth);

 

5. ์ด๋ฏธ์ง€ ๋ฏธ๋Ÿฌ๋ง์‹œํ‚ค๊ธฐ (์ขŒ์šฐ๋ฐ˜์ „๊ณผ ์ƒํ•˜๋ฐ˜์ „)

       function rightToLeft(image, height, width) {
            document.write("==image right to left mirroring==<br>");

            out(height, width);

            outImage.fil

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = image[i][width - k -1];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }



        function upToDown(image, height, width) {
            document.write("==image up to down mirroring==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = image[height - i - 1][k];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€      
      rightToLeft(inImage, inHeight, inWidth);
      upToDown(inImage, inHeight, inWidth);

 

6. ์ด๋ฏธ์ง€ ํšŒ์ „ (90๋„, 180๋„, 270๋„)

       function rotation_90(image, height, width) {
            document.write("==image 90 degree clockwise==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = image[height-1-k][i];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }



        function rotation_180(image, height, width) {
            document.write("==image 180 degree clockwise==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = image[height - 1 - i][width - 1 -k];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }




        function rotation_270(image, height, width) {
            document.write("==image 270 degree clockwise==<br>");

            out(height, width);

            for (i=0; i<height; i++) {
                for (k=0; k<width; k++) {
                    outImage[i][k] = image[k][width - 1 - i];
                    }
                }
            
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
		rotation_90(inImage, inHeight, inWidth);
        rotation_180(inImage, inHeight, inWidth);
        rotation_270(inImage, inHeight, inWidth);

 

7. ์ด๋ฏธ์ง€ 2๋ฐฐ ์ถ•์†Œํ•˜๊ธฐ

์ด๋ฏธ์ง€ ์ถ•์†Œ๋Š” ์ผ๋‹จ ๋ฐฐ์—ด์˜ ํ–‰๋ ฌ ํฌ๊ธฐ๋ฅผ 1/2๋ฐฐ๋กœ ์ค„์—ฌ์•ผ ํ•˜๋ฏ€๋กœ, outImage ๋ฐฐ์—ด๋„ 1/2๋ฐฐ์ธ ํฌ๊ธฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. (ํ™€์ˆ˜๋ผ๋ฉด ๊ทธ๋ƒฅ ์ œ์ผ ๋์˜ ํ–‰๋ ฌ์„ ์ œ๊ฑฐํ•˜์˜€๋‹ค.)
๋˜ํ•œ, ์ถ•์†Œ๋  ๋•Œ 2x2 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด 1x1ํฌ๊ธฐ๋กœ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ค ๊ฐœ์˜ value๊ฐ’์˜ ํ‰๊ท ์„ ๋‚ด์–ด ์ƒˆ๋กœ์šด ํ•˜๋‚˜์˜ value๋ฅผ ์ง€์ •ํ•˜์˜€๋‹ค.

ํ™€์ˆ˜ ์ง์ˆ˜ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์€ ๋ชซ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜์ธ parseInt()๋กœ ๋Œ€์ฒดํ•˜๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

      function reduceImage(image, height, width) {
            document.write("==image x2 reduction==<br>");
            var h, w = 0;
            if (height % 2 == 0) {
                h = height/2;
                w = width/2;
            } else {
                h = (height-1)/2;
                w = (width-1)/2;
            }
                out( h, w);

                for (i=0; i<h; i++) {
                    for (k=0; k<w; k++) {
                        outImage[i][k] = Math.round((image[i*2+1][k*2+1] +image[i*2+1][k*2]+image[i*2][k*2+1]+image[i*2][k*2])/4);
                    }
                }
                  
            display(outImage, outHeight, outWidth);
        }
//๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
reduceImage(inImage, inHeight, inWidth);

 

8. ์ด๋ฏธ์ง€ 2๋ฐฐ ํ™•๋Œ€ํ•˜๊ธฐ

์‚ฌ์‹ค ์ฒ˜์Œ์— ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์€ ์ฃผ๋ณ€ ๋ฐฐ์—ด์˜ ํ‰๊ท ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ตฌํ•ด์„œ ๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ค„๊ณ , while๋ฌธ์„ ํƒˆ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์›ํ•  ๋•Œ๊นŒ์ง€ ์ค„์ด๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, ๊ฐ’์ด ๋งŽ์ง€ ์•Š๋‹ค ๋ณด๋‹ˆ ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.
๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ value๋ฅผ 2x2 ์ด 4๊ฐœ์˜ value๋กœ ๋Š˜๋ฆฌ๋Š” ์‹์œผ๋กœ ํ™•๋Œ€๋ฅผ ํ• ๊นŒ ํ–ˆ๋‹ค๊ฐ€ ์ฃผ๋ณ€ 4๊ฐœ์˜ ํ‰๊ท ์œผ๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ ํ•ด๋ณด์•˜๋‹ค. ๊ทผ๋ฐ ํ•˜๊ณ  ๋ณด๋‹ˆ ๋”ฑํžˆ ์˜๋ฏธ๊ฐ€ ์žˆ์—ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.. ๊ฐ’์ด ๊ฐ„๋‹จํ•  ๋•Œ ์ด๊ฒƒ์ €๊ฒƒ ํ•ด๋ณด๋Š” ๊ฑฐ์— ์˜๋ฏธ๋ฅผ ๋‘๊ธฐ๋กœ ํ–ˆ๋‹ค ใ…œใ…œ

       function expandImage(image, height, width) {
            document.write("==image x2 expansion==<br>");
            var h = height * 2;
            var w = width * 2;
                out( h, w);

                for (i=0; i<h; i++) {
                    for (k=0; k<w; k++) {

                        if ((i <= 0) || (i >= h-1)){
                            if ((k <= 0) || (k >= w-1)) {
                                outImage[i][k] = Math.round((image[parseInt(i/2)][parseInt(k/2)] +0+0+0)/4);
                            } else {
                                outImage[i][k] = Math.round((image[parseInt(i/2)][parseInt((k+1)/2)] +image[parseInt(i/2)][parseInt((k+1)/2)]+0+0)/4);
                            }
                        }
                        else if ((k <= 0) || (k >= w-1)) {
                            outImage[i][k] = Math.round((image[parseInt((i+1)/2)][parseInt(k/2)] +image[parseInt((i+1)/2)-1][parseInt(k/2)]+0+0)/4);
                        } else {
                            outImage[i][k] = Math.round((image[parseInt((i+1)/2)][parseInt((k+1)/2)] +image[parseInt((i+1)/2)-1][parseInt((k+1)/2)]+image[parseInt((i+1)/2)][parseInt((k+1)/2)-1]+image[parseInt((i+1)/2)-1][parseInt((k+1)/2)-1])/4);
                        }
                    }
                }
                  
            display(outImage, h, w);
        }
 //๋ฉ”์ธ ์ฝ”๋“œ๋ถ€
 expandImage(inImage, inHeight, inWidth);

 

9. ์ด๋ฏธ์ง€ 45๋„ ํšŒ์ „ํ•˜๊ธฐ 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐฐ์—ด์„ ๋‹ค์ด์•„๋ชฌ๋“œ์ฒ˜๋Ÿผ ๋Œ๋ฆฌ๊ณ , ๋‚˜๋จธ์ง€์—๋Š” 0 ๊ฐ’์„ ๋„ฃ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ๊ทœ์น™์„ ์ฐพ์•˜๋‹ค. (์ด๊ฑด ๊ทœ์น™์„ ์ฐพ๋Š” ๊ฒŒ ๋” ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค)
์ด๋ฒˆ์—” ๋นˆ์ž๋ฆฌ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— outImage ๋ฐฐ์—ด์„ ๋จผ์ € 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผฐ๋‹ค. ๊ทธ ํ›„์— ์ฐพ์€ ๊ทœ์น™์„ ์ ์šฉ์‹œ์ผฐ๋‹ค.

       function diamond(image, height, width) {
            document.write("==make it diamond==<br>");
            
            var h = height * 2 -1;
            var w = width * 2 -1;

            outHeight = h;
            outWidth = w;
            outImage = new Array(h);
            for(i=0; i<h; i++) {
                outImage[i] = new Array(w).fill(0);
            }

            for (i=0; i<height; i++) {
                    for (k=0; k<width; k++) {
                        outImage[i + k][k + width -1 - i] = image[i][k];
                    }
            }


            display(outImage, outHeight, outWidth);
        }

 

 

728x90

'๐Ÿ–ฅ๏ธ > Frontend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): ํ™•๋Œ€ ์‹œ ํ™”์งˆ๊ฐœ์„ ์— ๋Œ€ํ•œ ์ƒ๊ฐ  (0) 2023.04.13
JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): ํžˆ์Šคํ† ๊ทธ๋žจ ์ฒ˜๋ฆฌ, ๊ณฑํ•˜๊ธฐ, ์นดํˆฐํšจ๊ณผ  (0) 2023.04.13
JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): ๋งˆ์Šคํฌ ์‚ฌ์šฉํ•ด์„œ ์— ๋ณด์‹ฑ, ๋ธ”๋Ÿฌ, ๊ฐ€์šฐ์‹œ์•ˆ ๋ธ”๋Ÿฌ, ๋ชจ์…˜๋ธ”๋Ÿฌ, ์ƒคํ”„๋‹, ์—ฃ์ง€  (0) 2023.04.13
JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง€ ๋ฐ๊ธฐ์กฐ์ ˆ, ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ๋ฏธ๋Ÿฌ๋ง, ํšŒ์ „, ํ™•๋Œ€/์ถ•์†Œ, ๋ธ”๋Ÿฌํšจ๊ณผ  (0) 2023.04.12
JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ  (0) 2023.04.12

"); wcs_do();