01. Introduction

 

데스크탑과 모바일 시스템이 보급화 됨에 따라 다양하고 개성있는 배경화면의 수요가 증가하고 있다.

그러나 데스크탑과 모바일 환경을 동시에 만족하는 배경화면은 많지 않은 것이 현실이다.

초 고화질 배경화면이 아닌 이상, 보통의 배경화면 제작자들은 처음부터 세로길이가 큰 배경화면과 가로길이가 큰 배경화면을 별도로 제작하고, 배포한다.

 

배경화면은 모니터의 해상도에 맞춰서 제작되는데, 일반적으로 많이 활용하는 데스크탑 전용의 이미지 크기는 가로x세로 픽셀단위로 800x600, 1280x1024, 2560x1440 등이 있다.

모바일의 배경화면은 세로길이가 더 큰 파일들에 대한 수요가 크며, 이미지 크기는 600x800, 1024x1280, 1440x2560 등이 있다.

세로길이/가로길이로 나타낼 수 있는 비율은 aspect ratio라고 하는데, [1-2] 예를 들면 4:3 비율의 Aspect ratio는 1.33이다.

 

 

450px-Filmaspectratios.svg.png

[Figure 1.1] Aspect ratio [3]

 

 

배경화면을 저장하는 유저들은 보통 Aspect ratio를 구분하지 않고 하나의 폴더에 저장한다. 필자도 그러하다.

배경화면의 저장과 활용에 있어서 Aspect ratio를 하나하나 인지하고 폴더로 구분하는 일은 매우 귀찮고 피곤하다.

이런 일에 몇가지 귀찮은 일이 더 있다면 똑같은 파일이 이름만 다르게 저장되는 경우와 저화질 배경화면을 솎아내는 일이다.

 

파일이 한두개면 눈 때중으로 대충 이미지 봐가면서 폴더에 옮겨주면 되는데, 100개~1000개 이상의 파일이라면 시간 좀 들여서 자동화 프로그램을 만드는 것이 좋다.

본 게시물의 목적은 이런 귀찮은 문제를 해결하는 것이다.

 

02. Assumption

 

먼저 모든 이미지 파일의 확장자는 *.jpg로 설정했다.

간혹 *.png 확장자가 있을 수 있는데, 삭제를 하거나 *.jpg로 변환해주었다.

 

모든 이미지 파일의 파일명은 Emiya로 통일시켰다.

파일의 넘버링은 N=1, 2, 3, ... End 이며 Emiya (N).jpg가 된다.

개발자|사용자가 통일된 파일명(Emiya)과 파일의 수를 인지하고 있어야 한다.

 

Cap 2020-01-16 15-06-59-473.png

[Figure 2.1] 파일명과 넘버링이 완료된 이미지들

 

간혹가다가 넘버링을 01, 02, 03, 04, 05 로 하는 사람이 있는데, 앞에 0을 붙이는 방식은 8진수 방식이다.

따라서 08은 존재하여도, 09는 있을 수 없다. 명백한 오류다.

그 어떤 OS 에서도 숫자를 01, 02, 03으로 넘버링하지 않는다. (모든 OS라고 단언한 것은 솔직히 오바 같은데... 그냥 단언하겠다.)

그래서 본 게시글에서도 한자리 숫자 앞에 0을 붙이지 않았다.

 

03. Programming

 

Virtical_sorting.m

% [A] system 설정

    clc; clear all; close all; fclose('all');

 

% [B] Warning 메시지 차단

    w = warning ('off','all');

    warning(w);

 

% [C] 기본 변수설정

    chHori      = 'Horizontal';

    chVert      = 'Virtical';

    FileName    = 'Emiya';

    iLastNumber = 24;

 

% [D] 폴더 생성

    mkdir(chHori);

    mkdir(chVert);

 

% [E] 파일의 정보를 긁어오고, Aspect ratio에 맞는 폴더로 이동시킨다.

    for i=1:1:iLastNumber

       

        % [F] 파일이름과 경로를 설정한다.

            chFileName = sprintf('Emiya (%d).jpg', i);

            mvVirticalFolder    = sprintf('%s\\%s', chVert, chFileName);

            mvHorizontalFolder  = sprintf('%s\\%s', chHori, chFileName);

 

        % [G] 이미지 정보를 긁어온다.

            stImage= imfinfo(chFileName);

       

        % [H] 이미지 정보를 임시 변수에 저장한다.

            iSize = stImage.FileSize;

            iWidth = stImage.Width;

            iHeight = stImage.Height;

       

        % [I] 이미지의 Aspect ratio에 따라 폴더로 이동시킨다.

            if iHeight > iWidth

                movefile(chFileName, mvVirticalFolder);

            else

                movefile(chFileName, mvHorizontalFolder);

            end

    end

 

위의 MATLAB 소스코드가 담긴 파일을 이미지 폴더 안에 넣고 실행시키면 아래와 같은 결과를 볼 수 있다.

 

Cap 2020-01-16 16-12-17-041.png

[Figure 3.1] MATLAB 코드 실행 결과

 

소스코드의 [D] 영역에서 Horizontal 폴더와 Virtical 폴더가 만들어진다. 폴더가 이미 생성되어 있으면 그냥 넘어간다.

그리고 파일을 하나하나 긁어내는데 필요한 번호들은 이미 알고 있으므로 [E]와 같은 반복문을 꾸며줄 수 있다.

반복문에 의해 파일의 정보를 긁어올 수 있는데, 이 부분은 [G] 영역이라 할 수 있다.

[G]에서는 이미지 파일의 정보를 긁어오고 그 정보를 구조체로 리턴하는 imfinfo 함수가 활용되었다.

[H] 영역에서는 해당 구조체 안의 맴버들을 불러오고, [I]영역에서 Aspect ratio에 따라 세로길이 폴더(Virtical), 가로길이 폴더(Horizontal)에 넣어준다.

 

04. Exception

 

4.1. 파일 삭제/이동 등의 이유로 번호가 누락된 경우

 

첫번째 예외처리는 중간에 번호가 없는 경우다.

이런 경우는 continue 명령을 이용해서 간단히 해결할 수 있다.

아래의 소스코드에서 [EX1] 항목을 참고하기 바란다.

 

Virtical_sorting_v2.m

% [A] system 설정

    clc; clear all; close all; fclose('all');

 

% [B] Warning 메시지 차단

    w = warning ('off','all');

    warning(w);

 

% [C] 기본 변수설정

    chHori      = 'Horizontal';

    chVert      = 'Virtical';

    FileName    = 'Emiya';

    iLastNumber = 26;

 

% [D] 폴더 생성

    mkdir(chHori);

    mkdir(chVert);

 

% [E] 파일의 정보를 긁어오고, Aspect ratio에 맞는 폴더로 이동시킨다.

    for i=1:1:iLastNumber

       

        % [F] 파일이름과 경로를 설정한다.

            chFileName = sprintf('%s (%d).jpg'FileName, i);

            mvVirticalFolder    = sprintf('%s\\%s', chVert, chFileName);

            mvHorizontalFolder  = sprintf('%s\\%s', chHori, chFileName);

 

        % [EX1] 파일이 없다면 아래의 소스코드는 무시하고, 반복문 중 다음 과정을 실행하도록 지시한다.

            hFile = fopen(chFileName);

            if (hFile == EOF)

                continue;

            end

            fclose(hFile); 

 

        % [G] 이미지 정보를 긁어온다.

            stImage= imfinfo(chFileName);

       

        % [H] 이미지 정보를 임시 변수에 저장한다.

            iSize = stImage.FileSize;

            iWidth = stImage.Width;

            iHeight = stImage.Height;

       

        % [I] 이미지의 Aspect ratio에 따라 폴더로 이동시킨다.

            if iHeight > iWidth

                movefile(chFileName, mvVirticalFolder);

            else

                movefile(chFileName, mvHorizontalFolder);

            end

    end

 

 

파일은 총 24개다.

그러나 예제의 검증을 위해 마지막 파일의 번호를 Emiya 26으로 고쳤다.

[C] 영역의 iLastNumber 변수값도 26으로 고쳐주었다.

 

Cap 2020-01-16 16-31-33-593.png

 

[Figure 4.1] 파일 순서가 듬성듬성 있는 상황을 억지로 만들어 봄

 

이전의 Virtical_sorting.m 소스코드에서는 24번 파일과 25번 파일이 없다면서 에러 메시지를 출력했을 것이다.

그러나 Virtical_sorting_v2.m 를 실행시키면, 중간에 번호 몇개 없다고 째째하게 에러 메시지를 출력하지 않는 모습을 볼 수 있다.

 

4.2. 중복 이미지가 있는 경우

 

두번째 예외처리는

중복이미지가 있는지 여부를 검사하고, 중복 이미지가 있다면 다른 폴더로 이동시키는 것이다.

특별한 알고리즘이 있는 것은 아니고, 그냥 크기를 비교해서 다른 폴더(Overlab) 에 이동시키는 코드를 작성하는 것이다.

 

이미지의 패턴을 비교해서 중복 이미지를 삭제하는 알고리즘은...

머신러닝을 써야 하지 않을까? 까라면 까겠는데, 굳이 그러고 싶지 않다.

 

Cap 2020-01-16 16-39-30-547.png

[Figure 4.2] 중복 이미지가 있으면서, 번호가 누락 된 경우 (1~500까지의 번호가 존재함)

 

이미지의 끝 번호를 N이라고 가정할 때, 

Aspect ratio 구분 전의 중복검사는 NxN회만 하면 되지만,

Aspect ratio 구분 후의 중복비교는 폴더별로 NxN회의 중복검사를 해야 하므로 NxNx2가 된다.

그래서 필자는 Aspect ratio 전에 중복검사를 하는 방식을 취했다.

[Ex2] 영역을 참고하기 바란다.

[Ex2] 영역의 기본적인 소스코드는 Virtical_sorting_v2.m 과 많이 유사하다.

 

Virtical_sorting_v3.m

system 설정

    clc; clear all; close all; fclose('all');

 

Warning 메시지 차단

    w = warning ('off','all');

    warning(w);

 

기본 변수설정

    chHori      = 'Horizontal';

    chVert      = 'Virtical';

    chOver      = 'Overlab';  중복 이미지를 담아두는 폴더명을 정의했다.

    FileName    = 'Emiya';

    iLastNumber = 1000;     값을 넉넉하게 1000으로 올렸다. 어짜피 파일 넘버가 어긋나면 무시하게 되어있다.

 

폴더 생성

    mkdir(chHori);    % 가로 길이가 더 큰 이미지 파일을 담는 폴더

    mkdir(chVert);    % 세로 길이가 더 큰 이미지 파일을 담는 폴더

    mkdir(chOver);   % 중복이미지 검사 결과, 중복에 해당하는 이미지 파일을 담는 폴더

 

% 파일의 정보를 긁어오고, Aspect ratio에 맞는 폴더로 이동시킨다.

    for i=1:1:iLastNumber

       

        % 파일이름과 경로를 설정한다.

            chFileName = sprintf('%s (%d).jpg'FileName, i);

            mvVirticalFolder    = sprintf('%s\\%s', chVert, chFileName);

            mvHorizontalFolder  = sprintf('%s\\%s', chHori, chFileName);

 

        % 파일이 없다면 아래의 소스코드는 무시하고, 반복문 중 다음 과정을 실행하도록 지시한다.

            hFile = fopen(chFileName);

            if (hFile == -1)

                continue;

            end

            fclose(hFile);

       

        % 이미지 정보를 긁어온다.

            stImage= imfinfo(chFileName);

            fprintf('[Original %d] : ', i);

           

        % 이미지 정보를 임시 변수에 저장한다.

            iSize   = stImage.FileSize;

            iWidth  = stImage.Width;

            iHeight = stImage.Height;

           

        % [Ex2] 중복 이미지를 검사한다. 넘버는 k로 설정했다. i, j, k 순서가 옳지만 i와 j 형태가 비슷하기에, k로 설정한 것이다.

            for k=1:1:iLastNumber

                % 같은 파일을 검사하는 것은 의미가 없다.

                    if i==k

                        continue;

                    end

               

                % 중복 검사를 할 파일명을 설정한다.

                    chOverlabFile       = sprintf('Emiya (%d).jpg', k);

                    mvOverlabFolder     = sprintf('%s\\%s', chOver, chOverlabFile);

                   

                % 중복 파일이 실존하는지 검사한다.

                    hFile = fopen(chOverlabFile);

                    if (hFile == -1)

                        continue;

                    end

                    fclose(hFile);

                   

                % 중복파일의 정보를 긁어온다.

                    stOv_Image = imfinfo(chOverlabFile);

                    iOv_Size   = stOv_Image.FileSize;

                   

                % 파일 크기를 비교한다. 파일 크기가 같다면 삭제한다.

                    if iSize == iOv_Size

                       fprintf('%d ', k);

                       movefile(chOverlabFile, mvOverlabFolder);

                    end

            end

        % [Ex2_e] 중복 검사 코드의 끝

       

        % 이미지의 Aspect ratio에 따라 폴더로 이동시킨다.

            if iHeight > iWidth

                movefile(chFileName, mvVirticalFolder);

            else

                movefile(chFileName, mvHorizontalFolder);

            end

           

            fprintf('\n');

    end

 

 

 

 

Cap 2020-01-16 17-14-02-219.png

[Figure 4.3] 중복 검사와 Aspect 구별 결과

 

위의 그림을 보면 중복 이미지검사가 잘 이루어졌음을 알 수 있다.

[Figure 4.2]를 보면 67번 이미지와 200번 이미지가 같은 파일임을 알 수 있다.

Virtical_sorting_v3.m 실행 결과로서 Overlab에 200번 이미지가 있고, Virtical 폴더에 67번 이미지가 있음을 [Figure 4.3]을 통해 볼 수 있다.

본 게시글에서는 파일이 한개씩 중복이 되지만, 두개 이상 중복되어도 다 솎아 낼 수 있으니 걱정하지 말고 사용하기 바란다.

 

소스코드 중간중간에 fprintf 함수가 사용되었는데, 이것은 중복파일이 도출되었을 때, 어떤 번호끼리 매칭되었는지 알고싶어서 넣어보았다.

fprintf 함수가 들어있는 라인들을 모두 삭제해도 기능상 아무 문제가 없다.

 

4.3 용량 구분과 표기

 

배경화면은 때때로 디자인이나 색감보다 화질이 우선시 된다.

왜냐하면 배경화면의 원본을 그대로 출력하기 보다, 이미지를 잘라서 쓰는 크롭기능이나, 늘려서 쓰는 매핑기능을 더 많이 이용하기 때문이다.

이처럼 원본의 화질은, 원본의 가공시 더 중요하게 부각된다.

 

그리고 배경화면으로 쓰지도 않을 더러운 화질의 이미지를 고화질의 이미지와 같이 보관할 이유가 없다.

저화질의 이미지 파일들이 많은 용량을 차지하지는 않지만, 파일의 이름을 일괄적으로 변경하거나, 파일들의 위치를 일괄적으로 이동시키는 경우에는 분명한 속도 저하를 유발시킨다.

 

고화질의 이미지와 저화질의 이미지를 구분과정에서 기술적인 문제가 발생하는데, 화질의 차이가 극적이지 않다면 사람의 눈으로 쉽게 구분이 어렵다는 문제가 있다.

구분을 한다고 치더라도, 노가다가 한-두번이어야지, 10회 이상 이미지 판독을 하고 있으면 엄청나게 귀찮고, 피곤하게 느껴질 것이다.

이런 단순 노가다 작업은 즉시 생산성 저하로 이어진다.

 

애매하게 나쁘거나 애매하게 좋은 화질은 구분하기 어렵다. 이런 Classification 문제는 머신러닝을 이용하면 매우 효과적이다.

그러나 언제 머신러닝 함수 테스트해보고, 선행학습은 언제시키고 있냐... 귀찮으니까 용량으로 구분하겠다.

일반적으로 이미지 파일의 화질은 파일의 크기에 비례한다.

물론 이미지의 색상정보가 적어서 저화질이어도 고화질처럼 보일 수는 있다. 그러나 이런 경우는 매우 드물다.

다소 부정확하더라도 파일의 크기로 소팅한다면 조금 빠른 성능을 기대할 수 있다.

 

먼저, 고화질이냐 저화질이냐의 추상적인 개념을 숫자로 정량화 시킬 필요가 있다.

고화질의 이미지 크기 기준은 2 [MB] 이상으로 설정하겠다.

저화질의 이미지 크기 기준은 2 [MB] 이하로 설정하겠다.

고화질은 Aspect ratio에 따라 폴더 구분이 되겠지만, 저화질은 그냥 쓰래기통(Trash) 폴더로 옮겨버리겠다.

 

소스코드를 작성하면서 유의해야 할점은 MATLAB이 이미지의 크기를 나타내는 단위가 Mega byte가 아니라는 점이다.

MATLAB에서 이미지 파일의 크기를 불러올 때, 크기의 단위는 일반적인 Byte 단위를 사용한다.

MATLAB에서 Emiya (200).jpg의 이미지 크기를 불러오면 294,931 값이 도출되는 것으로 보아 알 수 있다.

Emiya (200).jpg의 크기는 288 [kB] 인데, 풀어서 보면 294,931 [Byte] 와 같다.

 

Cap 2020-01-16 17-58-43-001.png

[Figure 4.4] Emiya (200).jpg의 크기

 

 

 

Virtical_sorting_v4.m

system 설정

    clc; clear all; close all; fclose('all');

 

Warning 메시지 차단

    w = warning ('off','all');

    warning(w);

 

기본 변수설정

    chHori      = 'Horizontal';

    chVert      = 'Virtical';

    chOver      = 'Overlab';  중복 이미지를 담아두는 폴더명을 정의했다.

    FileName    = 'Emiya';

    iLastNumber = 1000;     값을 넉넉하게 1000으로 올렸다. 어짜피 파일 넘버가 어긋나면 무시하게 되어있다.

 

폴더 생성

    mkdir(chHori);    % 가로 길이가 더 큰 이미지 파일을 담는 폴더

    mkdir(chVert);    % 세로 길이가 더 큰 이미지 파일을 담는 폴더

    mkdir(chOver);   % 중복이미지 검사 결과, 중복에 해당하는 이미지 파일을 담는 폴더

 

% 파일의 정보를 긁어오고, Aspect ratio에 맞는 폴더로 이동시킨다.

    for i=1:1:iLastNumber

       

        % 파일이름과 경로를 설정한다.

            chFileName              = sprintf('%s (%d).jpg'FileName, i);

            mvVirticalFolder       = sprintf('%s\\%s', chVert, chFileName);

            mvHorizontalFolder  = sprintf('%s\\%s', chHori, chFileName);

 

        % 파일이 없다면 아래의 소스코드는 무시하고, 반복문 중 다음 과정을 실행하도록 지시한다.

            hFile = fopen(chFileName);

            if (hFile == -1)

                continue;

            end

            fclose(hFile);

       

        % 이미지 정보를 긁어온다.

            stImage= imfinfo(chFileName);

            fprintf('[Original %d] : ', i);

           

        % 이미지 정보를 임시 변수에 저장한다.

            iSize   = stImage.FileSize;

            iWidth  = stImage.Width;

            iHeight = stImage.Height;

           

        % [Ex2] 중복 이미지를 검사한다. 넘버는 k로 설정했다. i, j, k 순서가 옳지만 i와 j 형태가 비슷하기에, k로 설정한 것이다.

            for k=1:1:iLastNumber

                % 같은 파일을 검사하는 것은 의미가 없다.

                    if i==k

                        continue;

                    end

               

                % 중복 검사를 할 파일명을 설정한다.

                    chOverlabFile       = sprintf('%s (%d).jpg', FileName, k);

                    mvOverlabFolder     = sprintf('%s\\%s', chOver, chOverlabFile);

                   

                % 중복 파일이 실존하는지 검사한다.

                    hFile = fopen(chOverlabFile);

                    if (hFile == -1)

                        continue;

                    end

                    fclose(hFile);

                   

                % 중복파일의 정보를 긁어온다.

                    stOv_Image = imfinfo(chOverlabFile);

                    iOv_Size   = stOv_Image.FileSize;

                   

                % 파일 크기를 비교한다. 파일 크기가 같다면 삭제한다.

                    if iSize == iOv_Size

                       fprintf('%d ', k);

                       movefile(chOverlabFile, mvOverlabFolder);

                    end

            end

        % [Ex2_e] 중복 검사 코드의 끝

       
        % [Ex3] 이미지의 크기에 따라, 저화질 이미지는 Trash 폴더로 이동시킨다.
            if (iSize < 2e+6)
                mvTrashFolder = sprintf('%s\\%s', chTras, chFileName);
                movefile(chFileName, mvTrashFolder);
                continue;
            end
 

        % 이미지의 Aspect ratio에 따라 폴더로 이동시킨다.

            if iHeight > iWidth

                movefile(chFileName, mvVirticalFolder);

            else

                movefile(chFileName, mvHorizontalFolder);

            end

           

            fprintf('\n');

    end

 

 

 

 

Cap 2020-01-16 18-10-27-328.png

(a) 코드 실행 후, Trash 폴더 상태

 

Cap 2020-01-16 18-11-06-972.png

(b) 코드 실행 후, Horizontal 폴더 상태

 

Cap 2020-01-16 18-12-16-569.png

(c) 코드 실행 후, Virtical 폴더 상태

 

Cap 2020-01-16 18-13-25-745.png

(d) 코드 실행 후, Overlab 폴더 상태

[Figure 4.5] Virtical_sorting_v4.m 실행 후, 폴더 상황

 

[Figure 4.5]는 Virtical_sorting_v4.m 파일을 실행한 모습을 잘 보여주고 있다.

 

 

 

05. Results & Conclusion

 

5.1. Results

본 게시글에서는 배경화면, 짤방, 야짤 등이 매우 많고, 뭔가 한번 정리가 필요 할 때, 파일들을 갈무리하는 목적으로 S/W를 제시했다.

먼저 MATLAB을 이용하여 가로이미지 타입인지, 세로이미지 타입인지를 구분하는 기초적인 S/W를 제시했다.

그 후에 넘버링 건너뛰기, 중복 이미지 거르기, 저화질 이미지 거르기와 같은 예외처리 기능을 추가하여 S/W의 활용성을 높였다.

필자는 이 과정에서 S/W의 추상적인 기능을 정량인 기능으로 표현하고자 노력했고, 어렵지 않고 쉽게 설명하고자 노력했다.

(더 이상 쉽게 설명하기 귀찮다.)

 

5.2 Conclusion

 

baeb3bcf73bf42a11c535e211eef425ecc90c550.jpg EXIF Viewer사진 크기209x209

재밌다.

 

 

후기

 

필자는 서버에 이미지가 매우 많다.

직접 찍은 생활사진도 있고, 배경화면도 있다.

그리고 덕질하는 과정에서 모아진 이미지들도 있고, 인터넷 커뮤니티용 짤방 같은 것도 매우 많다.

최근에는 Python으로 크롤링하는 방법도 배웠기 때문에 마음만 먹으면 웹툰이나 소설 같은 것들도 긁어와서 전자책 같은 형식으로 개인소장 할 수 있다.

그렇게 모아진 자료들은 날짜, 크기, 화질, 재미 등에 따라 구분을 하고 보관할 필요가 있다.

 

이런 코딩을 몰랐던 중고딩 시절의 나는 이런 작업을 100개던, 1,000개든 수작업으로 구분했었다. 그리고 잘 정리했노라고 기뻐했다. 그리고 학부 2학년때 하드디스크를 잃어버렸었다...

아무튼 수작업으로 파일/폴더를 관리하는 사람이 필자 말고도 여럿 있을 것이다.

 

본 게시글은, 파일/폴더 이름을 수작업으로 관리하면서 희열을 느끼는 전산변태들에게 바친다.

 

본 S/W를 아주 조금-만 더 응용하면 *.jpg 뿐만 아니라, *.jpeg, *.JPG, *.JPEG, *.png, *.tif등의 이미지들도 모두 구별해 낼 수 있다.

(물론 파일 확장자에 따라서, 고화질의 기준이 되는 용량 값은 달라질 수 있음을 주의하자.)

파일의 수와 하위 폴더 또한 자동으로 감지하게 만들 수 있다.

위의 두가지만 더 추가해주면, 하위 폴더에 접근하여 이 잡듯 모든 파일들을 변경할 수 있다.

 

그러나 그 부분까지 자동화하면 걷잡을 수 없이 트리(Tree)가 꼬일 수 있다.

의도치 않은 구분은 개인의 삶을 피폐하게 만들 뿐이다.

그래서 본 게시글은 하나의 폴더만 정리하는 선에서 마치고자 한다.

 

이 글의 영광은 나의 프로젝트 보고서를 3시간째 기다리고 있는 나의 선배에게 바친다.

 

Reference

 

[1] "Aspect ratio", Wikipedia, 2020.01.16. 참고함

  - https://en.wikipedia.org/wiki/Aspect_ratio
 

[2] Travelholics, "동영상의 가로/세로 화면 비율에 대한 정리 (21:9, 16:9, 4:3)", Macinjune, 2017.07.

  - https://macinjune.com/all-posts/mac/tip/final-cut/%EB%8F%99%EC%98%81%EC%83%81%EC%9D%98-%EA%B0%80%EB%A1%9C-%EC%84%B8%EB%A1%9C-%ED%99%94%EB%A9%B4-%EB%B9%84%EC%9C%A8%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC-219-169-43/

 

[3] "Aspect ratio (image)", Wikipedia, 2020.01.16. 참고함

  - 

 

번호 제목 글쓴이 날짜 조회 수
공지 [MATLAB] 게시판 열람 권한은 '전문가' 이상입니다. 심플디 2016.10.03 43
» 2020.01.16. 이미지 가로세로 비율(Aspect ratio)에 따른 파일 분류 프로그램 file 오피아 2020.01.16 66
19 2020.01.12. JPG 뿐만 아니라 ARW 이름도 변경시키는 프로그램 오피아 2020.01.12 18
18 2020.01.12. 디지털 카메라 파일이름을 바꾸어보자 file 오피아 2020.01.12 16
17 2019.08.15 MATLAB으로 상대 IP의 안막힌 Port를 알아보자 오피아 2019.08.15 36
16 Plot의 x축을 카테고리로 설정하기 심플디 2018.05.09 32
15 [함수] E-Mail 메시지 보내기 file 심플디 2018.05.02 35
14 [함수] Pushbullet으로 메시지 보내기 file 심플디 2018.05.02 41
13 [함수] 특정 IP에 메시지box 보내기 심플디 2018.05.02 38
12 2016.12.18 사다리꼴 방안 및 심슨공식을 이용한 적분하기 file 심플디 2016.12.18 57
11 2016.12.18 수치해석적으로 근을 찾는 방법 file 심플디 2016.12.18 36
10 2016.12.17 Cubic spline 보간법을 이용한 문제풀이 file 심플디 2016.12.17 105
9 2016.12.06 Seat back 각도와 Offset을 고려한 닭발 그리기 file 심플디 2016.12.07 39
8 2016.10.02 spline 함수 에러 (데이터 사이트는 달라야 합니다.) file 심플디 2016.10.03 63
7 2016.10.02 Bar type 도표 그리기 file 심플디 2016.10.03 32
6 2016.01.16 방학세미나, 링크설계 1, 5일차 file 심플디 2016.01.21 41
5 2016.01.15 방학세미나, 링크설계 1, 4일차 file 심플디 2016.01.21 41
4 2016.01.14 방학세미나, 링크설계 1, 3일차 file 심플디 2016.01.21 35
3 2016.01.13 방학세미나, 링크설계 1, 2일차 file 심플디 2016.01.21 94
2 2016.01.12 방학세미나, 링크설계 1, 1일차 file 심플디 2016.01.21 36