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

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

by HanaV 2023. 4. 12.
728x90

์ด์ „ ๊ธ€: JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (tistory.com)

 

 

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Alpha ๋ฒ„์ „์—์„œ๋Š” ๋‚œ์ˆ˜๋กœ ํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ํ•œ ๋‹จ๊ณ„๋ฅผ ์—…ํ•ด์„œ ์ง„์งœ ์ด๋ฏธ์ง€์— ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ผ๋ฐ˜ ํŒŒ์ผ(BMP, JPG, PNG, TIF, GIF ๋“ฑ)์€ ์ด๋ฏธ์ง€์ฒ˜๋ฆฌํ•˜๊ธฐ ๋งŽ์ด ์–ด๋ ค์šด๋ฐ, RAW ์ด๋ฏธ

hanav.tistory.com

 

0. ํ‹€ ์ค€๋น„ํ•˜๊ธฐ

์šฐ์„  ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€(inImage)์™€ ์˜์ƒ์ฒ˜๋ฆฌ๋ฅผ ๊ฑฐ์นœ ์ด๋ฏธ์ง€(outImage)๋ฅผ ๋ถ„๋ฆฌํ•ด ์ค„ ํ•„์š”๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, out์— ๋Œ€ํ•œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋„ ์ „๋ถ€ ์ง€์ •ํ•ด ์ค€๋‹ค.

out ๋ณ€์ˆ˜ ์ถ”๊ฐ€
outCanvas ์ถ”๊ฐ€
outCanvas๋„ ์ดˆ๊ธฐ์ค€๋น„์‹œ์ผœ์คŒ

 

์บ”๋ฒ„์Šค๊ฐ€ ์ค€๋น„๋œ ๋ชจ์Šต

๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋ฅผ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” selectํƒญ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก selectAlgorithm ํ•จ์ˆ˜๋„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  outImage๋„ displayImage ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ธฐ์กด ํ•จ์ˆ˜์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

ํšจ๊ณผ๋ฅผ ์ ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ outImage ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํŽธํ•˜๊ฒŒ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด๋‘์ž.

 

ํšจ๊ณผ๋Š” ๋Œ€๋ถ€๋ถ„ ์ด์ „ ๊ธ€(๋ฐ‘ ๋งํฌ)๊ณผ ๋กœ์ง์ด ๊ฐ™์•„ ์„ค๋ช…์„ ์ƒ๋žตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Alpha๋ฒ„์ „ ์ฐธ๊ณ ํ•˜๊ธฐ: https://hanav.tistory.com/130

 

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

*์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต์šฉ์œผ๋กœ rgb๋ฅผ ์ž„์˜์˜ ์ˆซ์ž(math.random()*256)๋กœ ๋Œ€์ฒดํ•จ. *์ •์‚ฌ๊ฐํ˜•์ธ GrayScale์ด๋ฏธ์ง€๋ผ ๊ฐ€์ •ํ•จ. 1. ์ด๋ฏธ์ง€ ์›๋ณธ ๊ทธ๋Œ€๋กœ //ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€ function display(image, height, width) { for(var i=0; i

hanav.tistory.com

 

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

inImage์™€ outImage๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค.

            function equalImage() {
                out(inH, inW);

                for(var i=0; i<outH; i++) {
                    for (var k=0; k<outW; k++) {
                        outImage[i][k] = inImage[i][k];
                    }
                }
                displayImage();
            }

 

2. ๋ฐ๊ธฐ ์กฐ์ ˆํ•˜๊ธฐ

๋ฐ๊ธฐ๋Š” ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ (prompt์‚ฌ์šฉํ•˜๊ธฐ) ๊ทธ๋งŒํผ ๋”ํ•ด์ค€๋‹ค.

          function brightness() {
                out(inH, inW);

                for(var i=0; i<outH; i++)
                    outImage[i] = new Array(outW);
                var value = parseInt(prompt("๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š”", "50"));
                for(var i=0; i<inH; i++) {
                    for (var k=0; k<inW; k++) {
                        if (inImage[i][k] + value < 0 )
                            outImage[i][k] = 0;
                        else if (inImage[i][k] + value > 255 )
                            outImage[i][k] = 255;
                        else 
                            outImage[i][k] = inImage[i][k]+value;
                    }
                }
                displayImage();
            }

 

3. ๊ณ ๋Œ€๋น„

           function blackWhite() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {

                            if (inImage[i][k] > (0 + 255)/2) {
                                outImage[i][k] =  255;
                            } else {
                                outImage[i][k] = 0;
                            }
                        }
                    }
                
                displayImage();
            }

 

4. ์ƒ‰์ƒ ๋ฐ˜์ „

           function reverseImage() {
                out(inH, inW);

                for(var i=0; i<inH; i++) {
                    for (var k=0; k<inW; k++) {
                        outImage[i][k] = 255 - inImage[i][k];
                    }
                }
                displayImage();
            }

 

5. ์ขŒ์šฐ/์ƒํ•˜๋ฐ˜์ „

         function rightToLeft() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                        outImage[i][k] = inImage[i][outW - k -1];
                        }
                    }
                
                displayImage();
            }



            function upToDown() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                        outImage[i][k] = inImage[outH - i - 1][k];
                        }
                    }
                
                displayImage();
            }

 

6. 90๋„/180๋„/270๋„ ํšŒ์ „

            function rotation_90() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                        outImage[i][k] = inImage[inH-1-k][i];
                        }
                    }
                
                displayImage();
            }


            function rotation_180() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                        outImage[i][k] = inImage[inH-1-i][inW - 1 - k];
                        }
                    }
                
                displayImage();
            }



            function rotation_270() {
                out(inH, inW);

                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                        outImage[i][k] = inImage[k][inW-1-i];
                        }
                    }
                
                displayImage();
            }

 

 

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

         function reduceImage() {
                    out(parseInt(inH/2), parseInt(inW/2));


                    for (i=0; i<outH; i++) {
                        for (k=0; k<outW; k++) {
                            outImage[i][k] = (inImage[i*2+1][k*2+1] +inImage[i*2+1][k*2]+inImage[i*2][k*2+1]+inImage[i*2][k*2])/4;
                        }
                    }
                    
                displayImage();
            }

 

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

์‚ฌ์‹ค ์ €๋ฒˆ์— ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋Œ€๋กœ ํ•˜๋Š” ๊ฑด ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ณด๊ฐ„๋ฒ•(๊ทธ๋ƒฅ *4 ํ•˜๋Š” ๊ฑฐ)์ด๋ž‘ ๋‹ค๋ฅผ ๊ฒŒ ์—†์–ด์„œ ํ™”์งˆ๊ฐœ์„ ์„ ์œ„ํ•ด ์ข€ ๋” ์ƒ๊ฐ์ค‘์ด๋‹ค.

            function expandImage() {

                out(inH*2, inW*2);


                for (i=0; i<outH; i++) {
                    for (k=0; k<outW; k++) {
                                outImage[i][k] = inImage[parseInt(i/2)][parseInt(k/2)];
                    }
                }

                    }
                }

                displayImage();

            }

 

9. ๋ธ”๋Ÿฌํšจ๊ณผ(์ถ”๊ฐ€)

๊ณ„์† ํ‰๊ท ์„ ๋‚ด๋‹ค๋ณด๋‹ˆ ์ฃผ๋ณ€ ๊ฐ’๋“ค์„ ๋”ํ•ด์„œ ๋‚˜๋ˆ„๋ฉด ๋ช…๋„๊ฐ€ ๋น„์Šทํ•ด์ง€๋‹ˆ ๋ธ”๋Ÿฌ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋ฌธ๋“ ๋“ค์—ˆ๋‹ค. 
์ฒ˜์Œ์—๋Š” ์ฃผ๋ณ€ 3x3 ๋ฐฐ์—ด์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ํ–ˆ๋Š”๋ฐ, ํšจ๊ณผ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ž‘์•„์„œ 5x5๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟจ๋‹ค.

            function BlurImage() {

                out(inH, inW);

                for (i=2; i<outH-2; i++) {
                    for (k=1; k<outW-2; k++) {
                        outImage[i][k] = (inImage[i-2][k-2] + inImage[i-2][k-1] + inImage[i-2][k] + inImage[i-2][k+1] + inImage[i-2][k+2] + 
                                        inImage[i-1][k-2] + inImage[i-1][k-1] + inImage[i-1][k] + inImage[i-1][k+1] + inImage[i-1][k+2] + 
                                        inImage[i][k-2] + inImage[i][k-1] + inImage[i][k] + inImage[i][k+1] + inImage[i][k+2] + 
                                        inImage[i+1][k-2] + inImage[i+1][k-1] + inImage[i+1][k] + inImage[i+1][k+1] + inImage[i+1][k+2] + 
                                        inImage[i+2][k-2] + inImage[i+2][k-1] + inImage[i+2][k] + inImage[i+2][k+1] + inImage[i+2][k+2])/25;
                    }
                }
                
                displayImage();

            }

 

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

"); wcs_do();