diff --git a/.gitignore b/.gitignore index 3791e70..7623fba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,19 @@ +# 파이썬 가상환경 +.venv + +# 수험자 답안 파일 +output + +회차별채점자료/*/정답파일 +회차별채점자료/*/정답 + +# 열려있는 xlsx파일 +~*.xlsx +psdExport_3.js + +# 포토샵 개발중 +output_json + # ---> Node # Logs logs @@ -131,14 +147,3 @@ dist .yarn/install-state.gz .pnp.* -output - -# xpath notebook -.xbook - -회차별채점자료/*/정답파일 -회차별채점자료/*/정답 - -# 열려있는 xlsx파일 -~*.xlsx -psdExport_3.js diff --git a/00_DIC_2506A_TEST.xlsx b/00_DIC_2506A_TEST.xlsx new file mode 100644 index 0000000..51a6104 Binary files /dev/null and b/00_DIC_2506A_TEST.xlsx differ diff --git a/00_DPI_2506C_TEST.xlsx b/00_DPI_2506C_TEST.xlsx index 90ec997..83e384d 100644 Binary files a/00_DPI_2506C_TEST.xlsx and b/00_DPI_2506C_TEST.xlsx differ diff --git a/01_copyFiles.py b/01_copyFiles.py index fa4c64e..29a4e21 100644 --- a/01_copyFiles.py +++ b/01_copyFiles.py @@ -38,8 +38,8 @@ def copy_dic_subdirs(source_root, target_root_a, target_root_b, target_root_c, t print(f"Skipping {dir_name} under {parent_dir}, as it doesn't match '2교시' or '3교시'.") # 사용법 -exam_round = "2506" -source_directory = r"C:\Users\dra\project\data\제2506회 정기\답안파일\제2506회 디지털정보활용능력 답안파일\충북강원지부\신촌정보통신학교" # 원본 디렉토리 경로 +exam_round = "2507" +source_directory = r"D:\project\GOM\DIC\회차별채점자료\2507\정답" # 원본 디렉토리 경로 target_directory_a = f".\\output\\{exam_round}\\A" # '1교시'의 타겟 경로 target_directory_b = f".\\output\\{exam_round}\\B" # '2교시'의 타겟 경로 diff --git a/250730_DIC_2507A_채점결과.xlsx b/250730_DIC_2507A_채점결과.xlsx new file mode 100644 index 0000000..06c13cb Binary files /dev/null and b/250730_DIC_2507A_채점결과.xlsx differ diff --git a/250730_DIC_2507B_채점결과.xlsx b/250730_DIC_2507B_채점결과.xlsx new file mode 100644 index 0000000..8a8e80f Binary files /dev/null and b/250730_DIC_2507B_채점결과.xlsx differ diff --git a/250730_DIC_2507C_채점결과.xlsx b/250730_DIC_2507C_채점결과.xlsx new file mode 100644 index 0000000..b48358b Binary files /dev/null and b/250730_DIC_2507C_채점결과.xlsx differ diff --git a/250730_DPI_2507B_채점결과.xlsx b/250730_DPI_2507B_채점결과.xlsx new file mode 100644 index 0000000..56bd26b Binary files /dev/null and b/250730_DPI_2507B_채점결과.xlsx differ diff --git a/DIC.code-workspace b/DIC.code-workspace new file mode 100644 index 0000000..362d7c2 --- /dev/null +++ b/DIC.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/DIC_2507A.json b/DIC_2507A.json new file mode 100644 index 0000000..587f9ce --- /dev/null +++ b/DIC_2507A.json @@ -0,0 +1,737 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "$.children[?(@.name=='계곡')].name", + "value": "계곡", + "point": 4 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "$.children[?(@.name=='In the Valley')].name", + "value": "In the Valley", + "point": 4 + }, + "7": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "10": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.colors[0]", + "type": "color", + "value": "fffc09", + "point": 2 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "none", + "point": 0 + }, + "14": { + "ele": "$.children[?(@.name=='산속 계곡에서')].name", + "value": "산속 계곡에서", + "point": 4 + }, + "15": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.names[0]", + "type": "font", + "value": "GulimChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "16": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "17": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.colors[0]", + "type": "color", + "value": "05aa20", + "point": 2 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "$.children[?(@.name=='노란꽃')].name", + "value": "노란꽃", + "point": 4 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "$[?(@.width == 65 && @.height == 35)]", + "type": "size", + "value": { + "width": 65, + "height": 35 + }, + "point": 5 + }, + "27": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지2.jpg", "이미지3.jpg", "이미지1.jpg"], + "point": 4, + "desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "150" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "380" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "168", + "VID100": "0.80000001", + "VID102": "8" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "집을 드나드는 토끼", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "궁서체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "98", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "집을 드나드는 토끼", + "type": "video.Text.Color", + "value": "682f00", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "집을 드나드는 토끼", + "type": "video.Location", + "value": ["0.33229166", "0.93703705"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "집을 드나드는 토끼", + "type": "video.StartTime", + "value": 150, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "집을 드나드는 토끼", + "type": "video.Length", + "value": 120, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "103", + "VID102": "8" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "13", + "Range": "500:560", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 210, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "128", + "VID100": "3" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "20", + "Range": "710:770", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 180, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "67", + "VID101": "4" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "10", + "Range": "920:950", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "동물들의 생활 (Animal Life)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "휴먼옛체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "140", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text.Color", + "value": "d0f29c", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text.Outline", + "value": { + "width": "20", + "color": "1f5617" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "4", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 890, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "60" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Flower", + "point": 5, + "desc": "Flower 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Flower", + "value": { + "name": "생동감", + "option": { + "생동감": "40" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마":["리프트","감마","게인"], + "세피아":["U","V"], + "생동감": "생동감" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": "레이어 쉐이프 타입이 타원인지 체크" + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 120, + "height": 120 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "7097BB", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "반사", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3 + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 60 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "ffe000", + "endColor": "34A159" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "흰 꽃 사이 노란 꽃", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "맑은 고딕", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "30", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "b46Ef8", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "7", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "ffffff", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "사각형": "RECTANGLE" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "RECTANGLE", + "value": { + "width": 150, + "height": 150 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "RECTANGLE", + "value": "7", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "RECTANGLE", + "value": "e8e88e", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "RECTANGLE", + "value": { + "shadow": true, + "width": "3", + "distance": "5", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/DIC_2507B.json b/DIC_2507B.json new file mode 100644 index 0000000..b96e817 --- /dev/null +++ b/DIC_2507B.json @@ -0,0 +1,751 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='My Friend Parrot')].name", + "value": "My Friend Parrot", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.colors[0]", + "type": "color", + "value": "1bc553", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].name", + "value": "내 친구 앵무새", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.colors[0]", + "type": "color", + "value": "ffea00", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, +"2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지1.jpg", "이미지3.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "130" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "320" + }, + "point": 2, + "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )" + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "43", + "VID100": "20", + "VID103": "1.3" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "화려한 앵무새", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "화려한 앵무새", + "type": "video.Text.Color", + "value": "23a23f", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "화려한 앵무새", + "type": "video.Location", + "value": ["0.36354166", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "화려한 앵무새", + "type": "video.StartTime", + "value": 170, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "화려한 앵무새", + "type": "video.Length", + "value": 120, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "99", + "VID100": "60" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "15", + "Range": "440:470", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "173", + "VID101": "250" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "14", + "Range": "590:650", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 180, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "102", + "VID100": "4" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "9", + "Range": "800:830", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "앵무새를 찾아서 (Finding Parrot)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "휴먼옛체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "150", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text.Color", + "value": "aff32a", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "0b00ff" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "1", + "VID507": "3" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 820, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "60" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Valley", + "point": 5, + "desc": "Valley 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Valley", + "value": { + "name": "선명하게", + "option": { + "양": "7" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감", + "흐리게": "반경", + "글로우": ["반경", "밝기", "대비"], + "픽셀효과": "셀크기", + "선명하게": "양" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "모서리가 둥근 사각형": "ROUNDED_RECTANGLE", + "사각형": "RECTANGLE", + "타원": "ELLIPSE" + } + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 335, + "height": 35 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "46A64A", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "중첩", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 50 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "3CB241", + "endColor": "931FAD" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "도깨비골 스카이밸리", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "돋움", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "24", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "AA2318", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "5", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "FFFFFF", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": { + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경":"" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "ELLIPSE", + "value": { + "width": 170, + "height": 170 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "ELLIPSE", + "value": "3", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "ELLIPSE", + "value": "4B7E5C", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "ELLIPSE", + "value": { + "shadow": true, + "width": "5", + "distance": "2", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/DIC_2507C.json b/DIC_2507C.json new file mode 100644 index 0000000..cfb75e2 --- /dev/null +++ b/DIC_2507C.json @@ -0,0 +1,739 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='Wooden Playground')].name", + "value": "Wooden Playground", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.colors[0]", + "type": "color", + "value": "084f0e", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].name", + "value": "나무로 만든 놀이터", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.colors[0]", + "type": "color", + "value": "f5e103", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "110" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "355" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "90", + "VID104": "5", + "VID103": "2" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "다양한 연주 악기들", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "다양한 연주 악기들", + "type": "video.Text.Color", + "value": "ffeb3b", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "다양한 연주 악기들", + "type": "video.Location", + "value": ["0.3125", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "다양한 연주 악기들", + "type": "video.StartTime", + "value": 160, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "다양한 연주 악기들", + "type": "video.Length", + "value": 180, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "173", + "VID105": "30" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "8", + "Range": "475:535", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 180, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "128", + "VID100": "10" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "10", + "Range": "685:715", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 120, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "184", + "VID100": "20" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "19", + "Range": "805:835", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "자연 소리 공원 (Natural Sound Park)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "돋움체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "140", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text.Color", + "value": "ff7419", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "3d30cd" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "13", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 820, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "30" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Flower", + "point": 5, + "desc": "Flower 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Flower", + "value": { + "name": "생동감", + "option": { + "생동감": "40" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": "레이어 쉐이프 타입이 타원인지 체크" + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 120, + "height": 120 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "7097BB", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "반사", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3 + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 60 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "ffe000", + "endColor": "34A159" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "흰 꽃 사이 노란 꽃", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "맑은 고딕", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "30", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "b46Ef8", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "7", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "ffffff", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "사각형": "RECTANGLE" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "RECTANGLE", + "value": { + "width": 150, + "height": 150 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "RECTANGLE", + "value": "7", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "RECTANGLE", + "value": "e8e88e", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "RECTANGLE", + "value": { + "shadow": true, + "width": "3", + "distance": "5", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/DPI_2507B.json b/DPI_2507B.json new file mode 100644 index 0000000..85ba1e9 --- /dev/null +++ b/DPI_2507B.json @@ -0,0 +1,751 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='My Friend Parrot')].name", + "value": "My Friend Parrot", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.colors[0]", + "type": "color", + "value": "1bc553", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].name", + "value": "내 친구 앵무새", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.colors[0]", + "type": "color", + "value": "ffea00", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "120" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "350" + }, + "point": 2, + "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )" + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "43", + "VID100": "10", + "VID103": "1.2" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "재미있는 테마공원", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "바탕체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "재미있는 테마공원", + "type": "video.Text.Color", + "value": "8c3030", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "재미있는 테마공원", + "type": "video.Location", + "value": ["0.32291669", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "재미있는 테마공원", + "type": "video.StartTime", + "value": 160, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "재미있는 테마공원", + "type": "video.Length", + "value": 150, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "94", + "VID101": "7" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "32", + "Range": "470:530", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "99", + "VID100": "70" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "13", + "Range": "650:680", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 210, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "102", + "VID102": "10" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "19", + "Range": "830:890", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "스카이밸리 도깨비골 (Sky Valley)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "150", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text.Color", + "value": "31b45e", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "ffffff" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "3", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 870, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "90" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Valley", + "point": 5, + "desc": "Valley 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Valley", + "value": { + "name": "선명하게", + "option": { + "양": "7" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감", + "흐리게": "반경", + "글로우": ["반경", "밝기", "대비"], + "픽셀효과": "셀크기", + "선명하게": "양" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "모서리가 둥근 사각형": "ROUNDED_RECTANGLE", + "사각형": "RECTANGLE", + "타원": "ELLIPSE" + } + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 335, + "height": 35 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "46A64A", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "중첩", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 50 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "3CB241", + "endColor": "931FAD" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "도깨비골 스카이밸리", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "돋움", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "24", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "AA2318", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "5", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "FFFFFF", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": { + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경":"" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "ELLIPSE", + "value": { + "width": 170, + "height": 170 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "ELLIPSE", + "value": "3", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "ELLIPSE", + "value": "4B7E5C", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "ELLIPSE", + "value": { + "shadow": true, + "width": "5", + "distance": "2", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/extract_psd_layers.py b/extract_psd_layers.py new file mode 100644 index 0000000..56e644e --- /dev/null +++ b/extract_psd_layers.py @@ -0,0 +1,61 @@ +import os +import json +from psd_tools import PSDImage + +def extract_layer_info(psd_path): + psd = PSDImage.open(psd_path) + canvas = [] + layers = [] + + canvas.append({ + "size": psd.size + }) + + for layer in psd: + layers.append({ + "name": layer.name, + "left": layer.left, + "top": layer.top, + "right": layer.right, + "bottom": layer.bottom, + "visible": layer.visible, + "opacity": layer.opacity, + }) + + return { + "file": os.path.basename(psd_path), + "canvas": canvas, + "layerCount": len(psd), + "layers": layers + } + +def walk_and_export_json(root_dir, output_base_dir): + for dirpath, _, filenames in os.walk(root_dir): + for file in filenames: + if file.lower().endswith(".psd"): + full_path = os.path.join(dirpath, file) + print(f"처리중: {full_path}") + + try: + info = extract_layer_info(full_path) + + # 상대 경로 유지 + rel_dir = os.path.relpath(dirpath, root_dir) + output_dir = os.path.join(output_base_dir, rel_dir) + os.makedirs(output_dir, exist_ok=True) + + # JSON 파일 경로 구성 + json_name = os.path.splitext(file)[0] + ".json" + json_path = os.path.join(output_dir, json_name) + + with open(json_path, "w", encoding="utf-8") as f: + json.dump(info, f, ensure_ascii=False, indent=2) + + except Exception as e: + print(f"❌ 오류: {file} - {e}") + +if __name__ == "__main__": + walk_and_export_json( + root_dir=r".\output\2506\A\TEST", + output_base_dir=r".\output_json\2506\A\TEST" + ) diff --git a/gpdpScoring.js b/gpdpScoring.js index 6bec11a..6c9dd0e 100644 --- a/gpdpScoring.js +++ b/gpdpScoring.js @@ -4,6 +4,8 @@ const _ = require('lodash'); const findSimilarString = require('./findSimilarString'); +module.exports = getGpdpScore; + function parseColorToHex(colorString) { // 정규식을 사용하여 B, G, R, A 값 추출 const regex = /B:\s*(\d+),\s*G:\s*(\d+),\s*R:\s*(\d+),\s*A:\s*(\d+)/; @@ -26,8 +28,6 @@ function parseColorToHex(colorString) { return `${rHex}${gHex}${bHex}`; } -module.exports = getGpdpScore; - /** * /Document/Layers/Layer/Shapes/Shape/draw_type 속성값 * > Interior: 내부 채우기 / Outline: 외곽선 @@ -134,7 +134,7 @@ function getGpdpScore(gpdpData, scoringJson, index) { // 채점기준표 문항별 분류 for (const key in scoringData) { - console.log(`[❔]문제번호 : [${index}-${key}]`) + console.log(`❔❔ 문제번호 : [${index}-${key}]`) let ele = scoringData[key].ele; let ele2 = scoringData[key].ele2; @@ -174,7 +174,7 @@ function getGpdpScore(gpdpData, scoringJson, index) { } if (type === "none") { - console.log("❌ 채점하지 않음"); + console.log("⚠️ 채점하지 않음"); scoringResult[key] = "확인필요"; continue; } @@ -379,48 +379,58 @@ function getGpdpScore(gpdpData, scoringJson, index) { let normalizedAnswer = null; let isMatched = false; + const isGradient = type.includes("gradient"); + const isSingleColor = + type.includes("shape") || type.includes("text") || type.includes("clipping"); + + // 정답 색상 정규화 + if (isGradient) { + normalizedAnswer = { + startColor: rightAnswer.startColor.toLowerCase(), + endColor: rightAnswer.endColor.toLowerCase(), + }; + } else if (isSingleColor) { + normalizedAnswer = rightAnswer.toLowerCase?.(); + } + + // 각 항목 비교 for (const item of items) { - if (type.includes('gradient')) { + // 그라데이션 컬러의 채점 + if (isGradient) { + // 시작점과 끝점의 컬러를 구할 xpath구문 const startColorXpath = scoringData[key].startColor; const endColorXpath = scoringData[key].endColor; - const startColorRGB = xpath.select1(startColorXpath, item).value; - const endColorRGB = xpath.select1(endColorXpath, item).value; + // 해당 xpath를 이용 RGB값 추출 + const startColorRGB = xpath.select1(startColorXpath, item)?.value; + const endColorRGB = xpath.select1(endColorXpath, item)?.value; - const startColor = parseColorToHex(startColorRGB); - const endColor = parseColorToHex(endColorRGB); + // RGB to HEX + const userStartColor = parseColorToHex(startColorRGB); + const userEndColor = parseColorToHex(endColorRGB); userAnswer = { - startColor: startColor, - endColor: endColor, - } + startColor: userStartColor, + endColor: userEndColor, + }; - // JSON파일에서 대문자로 입력된 경우 소문자로 변환 - normalizedAnswer = { - startColor: rightAnswer.startColor.toLowerCase(), - endColor: rightAnswer.endColor.toLowerCase(), - } - - // 하나라도 일치하면 정답 - if (JSON.stringify(userAnswer) == JSON.stringify(normalizedAnswer)) { + if (JSON.stringify(userAnswer) === JSON.stringify(normalizedAnswer)) { isMatched = true; break; } } - // else { - else if (type.includes('shape') || type.includes('text') || type.includes('clipping')) { + if (isSingleColor) { const color = parseColorToHex(item.value); userAnswer = color; - normalizedAnswer = rightAnswer.toLowerCase?.(); - // 하나라도 일치하면 정답 if (userAnswer === normalizedAnswer) { isMatched = true; break; } } } + totalScore += compareAndScore(userAnswer, normalizedAnswer, point, key, scoringResult); } diff --git a/psdExport_2.js b/psdExport_2.js index e32b90c..3340d59 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -9,18 +9,17 @@ const { DOMParser } = require('xmldom'); const findSimilarString = require('./findSimilarString'); const getGpdpScore = require('./gpdpScoring.js'); const getToday = require('./getToday.js'); -// const { userInfo } = require('os'); -// const { get } = require('http'); const todayDate = getToday(); -const examRound = '2506'; +const examRound = '2507'; + const DICorDPI = 'DIC' // const DICorDPI = 'DPI' const examTypes = [ - 'A', + // 'A', 'B', - 'C', - 'D' + // 'C', + // 'D' ]; // testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴 @@ -31,19 +30,13 @@ const outputExcelFiles = []; examTypes.forEach(type => { const jsonPath = `./${DICorDPI}_${examRound}${type}.json` - if ( !fs.existsSync(jsonPath)) return; + if (!fs.existsSync(jsonPath)) return; const scoringJson = require(jsonPath); const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : DICorDPI}`; let outputExcelFile = `./${todayDate}_${DICorDPI}_${examRound}${type}_채점결과.xlsx`; if (testMode) { outputExcelFile = `./00_${DICorDPI}_${examRound}${type}_TEST.xlsx`; } - // const scoringJson = require(`./DIC_${examRound}${type}.json`); - // const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : 'DIC'}`; - // let outputExcelFile = `./${todayDate}_DIC_${examRound}${type}_채점결과.xlsx`; - // if (testMode) { - // outputExcelFile = `./00_DIC_${examRound}${type}_TEST.xlsx`; - // 답안 폴더 내부에 디렉토리가 아닌 일반 파일이 있을 경우 디렉토리만 필터링 해서 불러옴 const studentDirs = fs.readdirSync(answerFilesDir).filter(file => { @@ -64,7 +57,6 @@ examTypes.forEach(type => { // DIAT시험 프로젝트로 생성시 gmep확장자로 // 교육용 프로젝프로 생성시 gmdp확장자로 생성됨 - // 두 경우 모두 처리 const gmepFile = fs.readdirSync(studentDir).filter( file => file.toLowerCase().endsWith('.gmep') // || file.toLowerCase().endsWith('.gmdp') @@ -669,11 +661,11 @@ function getGmepScore(gmepData, scoringJson, index) { else { const attributes = fadeoutEffect.attributes; const id = attributes.getNamedItem('ID').value; - const playtime = attributes.getNamedItem('VID8').value; + const duration = attributes.getNamedItem('VID8')?.value; userAnswer = { "ID": id, - "PlayTime": playtime, + "Duration": duration, }; } } diff --git a/~$output.xlsx b/~$output.xlsx deleted file mode 100644 index 7412e05..0000000 Binary files a/~$output.xlsx and /dev/null differ diff --git a/~$제2501회 정기 DIC C형.xlsx b/~$제2501회 정기 DIC C형.xlsx deleted file mode 100644 index 7412e05..0000000 Binary files a/~$제2501회 정기 DIC C형.xlsx and /dev/null differ diff --git a/250703_DIC_2506A_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250703_DIC_2506A_채점결과.xlsx similarity index 100% rename from 250703_DIC_2506A_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250703_DIC_2506A_채점결과.xlsx diff --git a/250703_DIC_2506B_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250703_DIC_2506B_채점결과.xlsx similarity index 100% rename from 250703_DIC_2506B_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250703_DIC_2506B_채점결과.xlsx diff --git a/250703_DIC_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250703_DIC_2506C_채점결과.xlsx similarity index 100% rename from 250703_DIC_2506C_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250703_DIC_2506C_채점결과.xlsx diff --git a/250703_DPI_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250703_DPI_2506C_채점결과.xlsx similarity index 100% rename from 250703_DPI_2506C_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250703_DPI_2506C_채점결과.xlsx diff --git a/250704_DIC_2506A_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250704_DIC_2506A_채점결과.xlsx similarity index 100% rename from 250704_DIC_2506A_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250704_DIC_2506A_채점결과.xlsx diff --git a/250704_DIC_2506B_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250704_DIC_2506B_채점결과.xlsx similarity index 100% rename from 250704_DIC_2506B_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250704_DIC_2506B_채점결과.xlsx diff --git a/250704_DIC_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250704_DIC_2506C_채점결과.xlsx similarity index 100% rename from 250704_DIC_2506C_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250704_DIC_2506C_채점결과.xlsx diff --git a/250704_DPI_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250704_DPI_2506C_채점결과.xlsx similarity index 100% rename from 250704_DPI_2506C_채점결과.xlsx rename to 회차별채점자료/2506/excel_채점결과/250704_DPI_2506C_채점결과.xlsx diff --git a/회차별채점자료/2506/excel_채점결과/250707_DIC_2506A_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506A_채점결과.xlsx new file mode 100644 index 0000000..b7ef024 Binary files /dev/null and b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506A_채점결과.xlsx differ diff --git a/회차별채점자료/2506/excel_채점결과/250707_DIC_2506B_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506B_채점결과.xlsx new file mode 100644 index 0000000..56bac95 Binary files /dev/null and b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506B_채점결과.xlsx differ diff --git a/회차별채점자료/2506/excel_채점결과/250707_DIC_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506C_채점결과.xlsx new file mode 100644 index 0000000..898a05d Binary files /dev/null and b/회차별채점자료/2506/excel_채점결과/250707_DIC_2506C_채점결과.xlsx differ diff --git a/회차별채점자료/2506/excel_채점결과/250707_DPI_2506C_채점결과.xlsx b/회차별채점자료/2506/excel_채점결과/250707_DPI_2506C_채점결과.xlsx new file mode 100644 index 0000000..9df9d91 Binary files /dev/null and b/회차별채점자료/2506/excel_채점결과/250707_DPI_2506C_채점결과.xlsx differ diff --git a/DIC_2506A.json b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506A.json similarity index 99% rename from DIC_2506A.json rename to 회차별채점자료/2506/json_채점기준표/0707/DIC_2506A.json index f17f63d..3352eb3 100644 --- a/DIC_2506A.json +++ b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506A.json @@ -458,7 +458,7 @@ "media": "음악.mp3", "value": { "ID": "1", - "PlayTime": "60" + "Duration": "60" }, "point": 2, "desc": "ID속성-페이드인:0 / 페이드아웃: 1" diff --git a/DIC_2506B.json b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506B.json similarity index 99% rename from DIC_2506B.json rename to 회차별채점자료/2506/json_채점기준표/0707/DIC_2506B.json index 39f7272..b04159e 100644 --- a/DIC_2506B.json +++ b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506B.json @@ -456,7 +456,7 @@ "media": "음악.mp3", "value": { "ID": "1", - "PlayTime": "90" + "Duration": "90" }, "point": 2, "desc": "ID속성-페이드인:0 / 페이드아웃: 1" diff --git a/DIC_2506C.json b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506C.json similarity index 93% rename from DIC_2506C.json rename to 회차별채점자료/2506/json_채점기준표/0707/DIC_2506C.json index 138719c..0e7b9c8 100644 --- a/DIC_2506C.json +++ b/회차별채점자료/2506/json_채점기준표/0707/DIC_2506C.json @@ -458,7 +458,7 @@ "media": "음악.mp3", "value": { "ID": "1", - "PlayTime": "60" + "Duration": "60" }, "point": 2, "desc": "ID속성-페이드인:0 / 페이드아웃: 1" @@ -486,18 +486,19 @@ "3": { "type": "layer.exists", "ele": "//Layer/Name/@value", - "value": "Flower", + "value": "Museum", "point": 5, - "desc": "Flower 레이어가 있는지 여부 체크" + "desc": "Museum 레이어가 있는지 여부 체크" }, "4": { "type": "layer.Effects", - "ele": "//Layer[Name[@value='{search}']]/Effects/Item", - "search": "Flower", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Museum", "value": { - "name": "생동감", + "name": "선명하게", "option": { - "생동감": "40" + "양": "10" } }, "point": 5, @@ -508,7 +509,11 @@ "색조/채도": ["색조", "채도", "명도"], "감마": ["리프트", "감마", "게인"], "세피아": ["U", "V"], - "생동감": "생동감" + "생동감": "생동감", + "흐리게": "반경", + "글로우": ["반경", "밝기", "대비"], + "픽셀효과": "셀크기", + "선명하게": "양" } }, "5": { @@ -527,7 +532,7 @@ "7": { "type": "exists", "ele": "//Layer/Shapes/Shape/shape_type/@value", - "value": "ELLIPSE", + "value": "ROUNDED_RECTANGLE", "point": 3, "desc": "레이어 쉐이프 타입이 타원인지 체크" }, @@ -535,8 +540,8 @@ "type": "shape.size", "ele": "//Layer//op_points", "value": { - "width": 120, - "height": 120 + "width": 90, + "height": 20 }, "point": 3, "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" @@ -544,7 +549,7 @@ "9": { "type": "shape.color", "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", - "value": "7097BB", + "value": "FF0000", "point": 6, "desc": "" }, @@ -552,7 +557,7 @@ "type": "layer.blend.opacity", "ele": "//Layer", "value": { - "BlendOp": "반사", + "BlendOp": "중첩", "Opacity": "80" }, "point": 6 @@ -600,15 +605,16 @@ "5": { "type": "exists", "ele": "//Layer//shape_type/@value", - "value": "ROUNDED_RECTANGLE", - "point": 3 + "value": "RECTANGLE", + "point": 3, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" }, "6": { "type": "shape.size", "ele": "//Layer//op_points", "value": { - "width": 400, - "height": 60 + "width": 380, + "height": 70 }, "point": 3, "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" @@ -619,21 +625,21 @@ "startColor": "gradient_start_color/@value", "endColor": "gradient_end_color/@value", "value": { - "startColor": "ffe000", - "endColor": "34A159" + "startColor": "00C9BA", + "endColor": "A6A600" }, "point": 6 }, "8": { "type": "text.exists", "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", - "value": "흰 꽃 사이 노란 꽃", + "value": "해양 박물관", "point": 5 }, "9": { "type": "exists", "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", - "value": "맑은 고딕", + "value": "바탕체", "point": 3 }, "10": { @@ -646,25 +652,25 @@ "11": { "type": "exists", "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", - "value": "30", + "value": "36", "point": 3 }, "12": { "type": "text.color", "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", - "value": "b46Ef8", + "value": "151DE8", "point": 3 }, "13": { "type": "exists", "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", - "value": "7", + "value": "3", "point": 3 }, "14": { "type": "text.color", "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", - "value": "ffffff", + "value": "FFFFFF", "point": 3 }, "15": { @@ -677,19 +683,21 @@ "16": { "type": "exists", "ele": "//Layer/Shapes/Shape/shape_type/@value", - "value": "RECTANGLE", + "value": "ELLIPSE", "point": 3, "desc": { - "사각형": "RECTANGLE" + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경":"" } }, "17": { "type": "clipping.size", "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", - "option": "RECTANGLE", + "option": "ELLIPSE", "value": { - "width": 150, - "height": 150 + "width": 180, + "height": 180 }, "point": 3, "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" @@ -697,26 +705,26 @@ "18": { "type": "exists", "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", - "option": "RECTANGLE", + "option": "ELLIPSE", "value": "7", "point": 3 }, "19": { "type": "clipping.color", "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", - "option": "RECTANGLE", - "value": "e8e88e", + "option": "ELLIPSE", + "value": "FF3030", "point": 3, "desc": "채우기:secondary_color, 외곽선:primary_color" }, "20": { "type": "shadow", "ele": "//Layer//Shape[shape_type/@value='{option}']", - "option": "RECTANGLE", + "option": "ELLIPSE", "value": { "shadow": true, - "width": "3", - "distance": "5", + "width": "5", + "distance": "3", "blur": "1", "angle": "320" }, diff --git a/DPI_2506C.json b/회차별채점자료/2506/json_채점기준표/0707/DPI_2506C.json similarity index 99% rename from DPI_2506C.json rename to 회차별채점자료/2506/json_채점기준표/0707/DPI_2506C.json index 7fb46a0..0e7b9c8 100644 --- a/DPI_2506C.json +++ b/회차별채점자료/2506/json_채점기준표/0707/DPI_2506C.json @@ -458,7 +458,7 @@ "media": "음악.mp3", "value": { "ID": "1", - "PlayTime": "60" + "Duration": "60" }, "point": 2, "desc": "ID속성-페이드인:0 / 페이드아웃: 1" diff --git a/회차별채점자료/2507/excel_채점기준표/DIC_2507A.xlsx b/회차별채점자료/2507/excel_채점기준표/DIC_2507A.xlsx new file mode 100644 index 0000000..6f8ab2c Binary files /dev/null and b/회차별채점자료/2507/excel_채점기준표/DIC_2507A.xlsx differ diff --git a/회차별채점자료/2507/excel_채점기준표/DIC_2507B.xlsx b/회차별채점자료/2507/excel_채점기준표/DIC_2507B.xlsx new file mode 100644 index 0000000..53e1cfe Binary files /dev/null and b/회차별채점자료/2507/excel_채점기준표/DIC_2507B.xlsx differ diff --git a/회차별채점자료/2507/excel_채점기준표/DIC_2507C.xlsx b/회차별채점자료/2507/excel_채점기준표/DIC_2507C.xlsx new file mode 100644 index 0000000..9d0b830 Binary files /dev/null and b/회차별채점자료/2507/excel_채점기준표/DIC_2507C.xlsx differ diff --git a/회차별채점자료/2507/excel_채점기준표/DPI_2507B.xlsx b/회차별채점자료/2507/excel_채점기준표/DPI_2507B.xlsx new file mode 100644 index 0000000..7347e95 Binary files /dev/null and b/회차별채점자료/2507/excel_채점기준표/DPI_2507B.xlsx differ diff --git a/회차별채점자료/2507/hwp_문제/DIC_2507A(레이어).hwp b/회차별채점자료/2507/hwp_문제/DIC_2507A(레이어).hwp new file mode 100644 index 0000000..499391a Binary files /dev/null and b/회차별채점자료/2507/hwp_문제/DIC_2507A(레이어).hwp differ diff --git a/회차별채점자료/2507/hwp_문제/DIC_2507B(클리핑).hwp b/회차별채점자료/2507/hwp_문제/DIC_2507B(클리핑).hwp new file mode 100644 index 0000000..46ec2ef Binary files /dev/null and b/회차별채점자료/2507/hwp_문제/DIC_2507B(클리핑).hwp differ diff --git a/회차별채점자료/2507/hwp_문제/DIC_2507C(클리핑).hwp b/회차별채점자료/2507/hwp_문제/DIC_2507C(클리핑).hwp new file mode 100644 index 0000000..2c4aa7e Binary files /dev/null and b/회차별채점자료/2507/hwp_문제/DIC_2507C(클리핑).hwp differ diff --git a/회차별채점자료/2507/hwp_문제/DPI_2507B.hwp b/회차별채점자료/2507/hwp_문제/DPI_2507B.hwp new file mode 100644 index 0000000..7354c6b Binary files /dev/null and b/회차별채점자료/2507/hwp_문제/DPI_2507B.hwp differ diff --git a/회차별채점자료/2507/json_채점기준표/0730/DIC_2507A.json b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507A.json new file mode 100644 index 0000000..587f9ce --- /dev/null +++ b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507A.json @@ -0,0 +1,737 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "$.children[?(@.name=='계곡')].name", + "value": "계곡", + "point": 4 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "$.children[?(@.name=='In the Valley')].name", + "value": "In the Valley", + "point": 4 + }, + "7": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "10": { + "ele": "$.children[?(@.name=='In the Valley')].text.font.colors[0]", + "type": "color", + "value": "fffc09", + "point": 2 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "none", + "point": 0 + }, + "14": { + "ele": "$.children[?(@.name=='산속 계곡에서')].name", + "value": "산속 계곡에서", + "point": 4 + }, + "15": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.names[0]", + "type": "font", + "value": "GulimChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "16": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "17": { + "ele": "$.children[?(@.name=='산속 계곡에서')].text.font.colors[0]", + "type": "color", + "value": "05aa20", + "point": 2 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "$.children[?(@.name=='노란꽃')].name", + "value": "노란꽃", + "point": 4 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "$[?(@.width == 65 && @.height == 35)]", + "type": "size", + "value": { + "width": 65, + "height": 35 + }, + "point": 5 + }, + "27": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지2.jpg", "이미지3.jpg", "이미지1.jpg"], + "point": 4, + "desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "150" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "380" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "168", + "VID100": "0.80000001", + "VID102": "8" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "집을 드나드는 토끼", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "궁서체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "집을 드나드는 토끼", + "type": "video.Text", + "value": "98", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "집을 드나드는 토끼", + "type": "video.Text.Color", + "value": "682f00", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "집을 드나드는 토끼", + "type": "video.Location", + "value": ["0.33229166", "0.93703705"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "집을 드나드는 토끼", + "type": "video.StartTime", + "value": 150, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "집을 드나드는 토끼", + "type": "video.Length", + "value": 120, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "103", + "VID102": "8" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "13", + "Range": "500:560", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 210, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "128", + "VID100": "3" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "20", + "Range": "710:770", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 180, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "67", + "VID101": "4" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "10", + "Range": "920:950", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "동물들의 생활 (Animal Life)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "휴먼옛체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text", + "value": "140", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text.Color", + "value": "d0f29c", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "동물들의 생활 (Animal Life)", + "type": "video.Text.Outline", + "value": { + "width": "20", + "color": "1f5617" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "4", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "동물들의 생활 (Animal Life)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 890, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "60" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Flower", + "point": 5, + "desc": "Flower 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Flower", + "value": { + "name": "생동감", + "option": { + "생동감": "40" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마":["리프트","감마","게인"], + "세피아":["U","V"], + "생동감": "생동감" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": "레이어 쉐이프 타입이 타원인지 체크" + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 120, + "height": 120 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "7097BB", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "반사", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3 + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 60 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "ffe000", + "endColor": "34A159" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "흰 꽃 사이 노란 꽃", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "맑은 고딕", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "30", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "b46Ef8", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "7", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "ffffff", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "사각형": "RECTANGLE" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "RECTANGLE", + "value": { + "width": 150, + "height": 150 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "RECTANGLE", + "value": "7", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "RECTANGLE", + "value": "e8e88e", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "RECTANGLE", + "value": { + "shadow": true, + "width": "3", + "distance": "5", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/회차별채점자료/2507/json_채점기준표/0730/DIC_2507B.json b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507B.json new file mode 100644 index 0000000..f5acff2 --- /dev/null +++ b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507B.json @@ -0,0 +1,751 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='My Friend Parrot')].name", + "value": "My Friend Parrot", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.colors[0]", + "type": "color", + "value": "1bc553", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].name", + "value": "내 친구 앵무새", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.colors[0]", + "type": "color", + "value": "ffea00", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, +"2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "130" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "320" + }, + "point": 2, + "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )" + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "43", + "VID100": "20", + "VID103": "1.3" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "화려한 앵무새", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "화려한 앵무새", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "화려한 앵무새", + "type": "video.Text.Color", + "value": "23a23f", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "화려한 앵무새", + "type": "video.Location", + "value": ["0.36354166", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "화려한 앵무새", + "type": "video.StartTime", + "value": 170, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "화려한 앵무새", + "type": "video.Length", + "value": 120, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "99", + "VID102": "60" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "15", + "Range": "440:470", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "173", + "VID101": "250" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "14", + "Range": "590:650", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 180, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "102", + "VID100": "4" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "9", + "Range": "800:830", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "앵무새를 찾아서 (Finding Parrot)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "휴먼옛체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text", + "value": "150", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text.Color", + "value": "aff32a", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "0b00ff" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "1", + "VID507": "3" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "앵무새를 찾아서 (Finding Parrot)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 820, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "60" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Valley", + "point": 5, + "desc": "Valley 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Valley", + "value": { + "name": "선명하게", + "option": { + "양": "7" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감", + "흐리게": "반경", + "글로우": ["반경", "밝기", "대비"], + "픽셀효과": "셀크기", + "선명하게": "양" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "모서리가 둥근 사각형": "ROUNDED_RECTANGLE", + "사각형": "RECTANGLE", + "타원": "ELLIPSE" + } + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 335, + "height": 35 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "46A64A", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "중첩", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 50 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "3CB241", + "endColor": "931FAD" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "도깨비골 스카이밸리", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "돋움", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "24", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "AA2318", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "5", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "FFFFFF", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": { + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경":"" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "ELLIPSE", + "value": { + "width": 170, + "height": 170 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "ELLIPSE", + "value": "3", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "ELLIPSE", + "value": "4B7E5C", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "ELLIPSE", + "value": { + "shadow": true, + "width": "5", + "distance": "2", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/회차별채점자료/2507/json_채점기준표/0730/DIC_2507C.json b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507C.json new file mode 100644 index 0000000..cfb75e2 --- /dev/null +++ b/회차별채점자료/2507/json_채점기준표/0730/DIC_2507C.json @@ -0,0 +1,739 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='Wooden Playground')].name", + "value": "Wooden Playground", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='Wooden Playground')].text.font.colors[0]", + "type": "color", + "value": "084f0e", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].name", + "value": "나무로 만든 놀이터", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='나무로 만든 놀이터')].text.font.colors[0]", + "type": "color", + "value": "f5e103", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "110" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "355" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "90", + "VID104": "5", + "VID103": "2" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "다양한 연주 악기들", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "다양한 연주 악기들", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "다양한 연주 악기들", + "type": "video.Text.Color", + "value": "ffeb3b", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "다양한 연주 악기들", + "type": "video.Location", + "value": ["0.3125", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "다양한 연주 악기들", + "type": "video.StartTime", + "value": 160, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "다양한 연주 악기들", + "type": "video.Length", + "value": 180, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "173", + "VID105": "30" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "8", + "Range": "475:535", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 180, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "128", + "VID100": "10" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "10", + "Range": "685:715", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 120, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "184", + "VID100": "20" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "19", + "Range": "805:835", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "자연 소리 공원 (Natural Sound Park)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "돋움체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text", + "value": "140", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text.Color", + "value": "ff7419", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "3d30cd" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "13", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "자연 소리 공원 (Natural Sound Park)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 820, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "30" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Flower", + "point": 5, + "desc": "Flower 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Flower", + "value": { + "name": "생동감", + "option": { + "생동감": "40" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": "레이어 쉐이프 타입이 타원인지 체크" + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 120, + "height": 120 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "7097BB", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "반사", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3 + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 60 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "ffe000", + "endColor": "34A159" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "흰 꽃 사이 노란 꽃", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "맑은 고딕", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "30", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "b46Ef8", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "7", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "ffffff", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "사각형": "RECTANGLE" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "RECTANGLE", + "value": { + "width": 150, + "height": 150 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "RECTANGLE", + "value": "7", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "RECTANGLE", + "value": "e8e88e", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "RECTANGLE", + "value": { + "shadow": true, + "width": "3", + "distance": "5", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/회차별채점자료/2507/json_채점기준표/0730/DPI_2507B.json b/회차별채점자료/2507/json_채점기준표/0730/DPI_2507B.json new file mode 100644 index 0000000..85ba1e9 --- /dev/null +++ b/회차별채점자료/2507/json_채점기준표/0730/DPI_2507B.json @@ -0,0 +1,751 @@ +{ + "0": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "none", + "point": 0 + }, + "7": { + "ele": "none", + "point": 0 + }, + "8": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "9": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "1": { + "1": { + "ele": "none", + "point": 0 + }, + "2": { + "ele": "none", + "point": 0 + }, + "3": { + "ele": "none", + "point": 0 + }, + "4": { + "ele": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='My Friend Parrot')].name", + "value": "My Friend Parrot", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='My Friend Parrot')].text.font.colors[0]", + "type": "color", + "value": "1bc553", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].name", + "value": "내 친구 앵무새", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='내 친구 앵무새')].text.font.colors[0]", + "type": "color", + "value": "ffea00", + "point": 2 + }, + "17": { + "ele": "none", + "point": 0 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "none", + "point": 0 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "none", + "point": 0 + }, + "27": { + "ele": "$[?(@.width == 65 && @.height == 45)]", + "type": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], + "point": 4, + "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", + "type": "oneAnswer", + "value": { + "speed": "120" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "350" + }, + "point": 2, + "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )" + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "43", + "VID100": "10", + "VID103": "1.2" + }, + "point": 3, + "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" + }, + "5": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "재미있는 테마공원", + "point": 3 + }, + "6": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "바탕체", + "point": 2 + }, + "7": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "재미있는 테마공원", + "type": "video.Text", + "value": "110", + "point": 2 + }, + "8": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "재미있는 테마공원", + "type": "video.Text.Color", + "value": "8c3030", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "재미있는 테마공원", + "type": "video.Location", + "value": ["0.32291669", "0.92962962"], + "point": 2, + "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" + }, + "10": { + "ele": "", + "search": "재미있는 테마공원", + "type": "video.StartTime", + "value": 160, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "11": { + "ele": "", + "search": "재미있는 테마공원", + "type": "video.Length", + "value": 150, + "point": 2, + "desc": "내부적으로 자막의 시작시간과 길이를 계산" + }, + "12": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute", + "type": "Mute", + "media": "동영상.mp4", + "value": "1", + "point": 2 + }, + "13": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "94", + "VID101": "7" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "32", + "Range": "470:530", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "99", + "VID100": "70" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "13", + "Range": "650:680", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 210, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "102", + "VID102": "10" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "19", + "Range": "830:890", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "스카이밸리 도깨비골 (Sky Valley)", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "굴림체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text", + "value": "150", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text.Color", + "value": "31b45e", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "ffffff" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "3", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "스카이밸리 도깨비골 (Sky Valley)", + "type": "opening.Length", + "value": 120, + "point": 2 + }, + "30": { + "ele": "", + "type": "audio.StartTime", + "media": "음악.mp3", + "value": 0, + "point": 2 + }, + "31": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "audio.EndTime", + "media": "음악.mp3", + "value": 870, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "90" + }, + "point": 2, + "desc": "ID속성-페이드인:0 / 페이드아웃: 1" + }, + "33": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "4": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "350"], + "point": 5, + "desc": "캔버스 사이즈 650*350" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "자유 변형 문항은 채점 불가" + }, + "3": { + "type": "layer.exists", + "ele": "//Layer/Name/@value", + "value": "Valley", + "point": 5, + "desc": "Valley 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Valley", + "value": { + "name": "선명하게", + "option": { + "양": "7" + } + }, + "point": 5, + "desc": { + "흑백": "강도", + "밝기/대비": ["밝기", "대비"], + "노출": "노출", + "색조/채도": ["색조", "채도", "명도"], + "감마": ["리프트", "감마", "게인"], + "세피아": ["U", "V"], + "생동감": "생동감", + "흐리게": "반경", + "글로우": ["반경", "밝기", "대비"], + "픽셀효과": "셀크기", + "선명하게": "양" + } + }, + "5": { + "type": "none", + "ele": "", + "point": 6, + "desc": "올가미 도구/이미지 문항은 채점 불가" + }, + "6": { + "type": "exists", + "ele": "//Layer/Effects/Item/Name/@value", + "value": "세피아", + "point": 6, + "desc": "세피아 효과가 있는지 여부 체크" + }, + "7": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "RECTANGLE", + "point": 3, + "desc": { + "모서리가 둥근 사각형": "ROUNDED_RECTANGLE", + "사각형": "RECTANGLE", + "타원": "ELLIPSE" + } + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 335, + "height": 35 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "46A64A", + "point": 6, + "desc": "" + }, + "10": { + "type": "layer.blend.opacity", + "ele": "//Layer", + "value": { + "BlendOp": "중첩", + "Opacity": "80" + }, + "point": 6 + }, + "11": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "12": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + }, + "5": { + "1": { + "type": "canvas.Size", + "ele": "//Document/Width/@value | //Document/Height/@value", + "value": ["650", "450"], + "point": 5, + "desc": "캔버스 사이즈 650*450" + }, + "2": { + "type": "none", + "ele": "", + "point": 5, + "desc": "배경색 문항은 채점 불가" + }, + "3": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Layering", + "point": 6, + "desc": "레이어 마스크 설정 확인" + }, + "4": { + "type": "none", + "ele": "", + "point": 6, + "desc": "가로방향 흐릿하게 문항은 채점 불가" + }, + "5": { + "type": "exists", + "ele": "//Layer//shape_type/@value", + "value": "ROUNDED_RECTANGLE", + "point": 3, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 50 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "7": { + "type": "gradient.color", + "ele": "//Layer/Shapes/Shape", + "startColor": "gradient_start_color/@value", + "endColor": "gradient_end_color/@value", + "value": { + "startColor": "3CB241", + "endColor": "931FAD" + }, + "point": 6 + }, + "8": { + "type": "text.exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", + "value": "도깨비골 스카이밸리", + "point": 5 + }, + "9": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value", + "value": "돋움", + "point": 3 + }, + "10": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value", + "style": "Italic", + "value": "True", + "point": 3 + }, + "11": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value", + "value": "24", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "AA2318", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "5", + "point": 3 + }, + "14": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value", + "value": "FFFFFF", + "point": 3 + }, + "15": { + "type": "exists", + "ele": "//Layer/MaskOpType/@value", + "value": "Clipping", + "point": 6, + "desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함" + }, + "16": { + "type": "exists", + "ele": "//Layer/Shapes/Shape/shape_type/@value", + "value": "ELLIPSE", + "point": 3, + "desc": { + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경":"" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "ELLIPSE", + "value": { + "width": 170, + "height": 170 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "ELLIPSE", + "value": "3", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "ELLIPSE", + "value": "4B7E5C", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "ELLIPSE", + "value": { + "shadow": true, + "width": "5", + "distance": "2", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +}