Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- insert into
- dataset
- 유성
- Exif
- 노은
- 대전 자전거
- kanna html parser
- mdb table 합치기
- exifread
- 대전
- python
- Xcode
- file move
- html parser
- 달력
- 스위프트
- 대전 업힐
- 딴지일보 자유게시판 파씽
- kanna parser
- swift html parser
- VBA
- StreamReader
- EXIF data
- swift
- 자전거
- C#
- 엑셀
- MDB
- euc-kr
- 파이썬
Archives
- Today
- Total
Fly to the sky & Return
[swift] 사진 폴더에 들어있는 사진들을 찍은 날짜별 폴더로 이동하여 정리시키는 코드 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
그디여 해당 프로그램을 만들기 위한 소스들이 다 모였습니다.
필요한 소스들을 나열해보면
1. 사진폴더를 선택하는 소스
2. 선택된 폴더에서 특정 확장자만 선택하는 소스(jpg)
3. 선택된 파일에서 EXIF data 중 날짜 데이터만 추울하는 소스
4. 날짜데이터를 이용해서 폴더를 생성하는 함수
5. 생성된 폴더로 해당파일을 이동하는 함수
이렇게 다섯가지의 소스들 한데 모와서 클릭한번으로 사진들을 정리해주는 프로그램을 만들어보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import Cocoa class ViewController: NSViewController { @IBAction func select_folder(sender: AnyObject) { //폴더 선택하는 코드 var myOpenDialog: NSOpenPanel = NSOpenPanel() myOpenDialog.canChooseDirectories = true myOpenDialog.runModal() var path = myOpenDialog.URL?.path var fs: NSFileManager = NSFileManager.defaultManager() if (path != nil) { var err = NSError?() let contents: Array = try! fs.contentsOfDirectoryAtPath(path!) if !(err != nil) { for f in contents { //확장자를 분리하는 코드 let strSplit = f.characters.split(".") //String(strSplit.first!) <- 파일명 부분 var k = String(strSplit.last!) //<- 확장자부분을 문자열로 지정 if k == "jpg" { //문자열을 NSURL로 변경 let fileUrl = NSURL(string: "file://" + path! + "/" + f) // <- path로 넘어온 파일경로는 /Users 로 시작하는 경로인지라 앞에 file:// 추가해서 밑에 함수가 해석가능한 경로로 변경 let imageSource = CGImageSourceCreateWithURL(fileUrl!, nil) let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource!, 0, nil)! as NSDictionary; let exifDict = imageProperties.valueForKey("{Exif}") as! NSDictionary; let dateTimeOriginal = exifDict.valueForKey("DateTimeOriginal") as! String; //EXIF 문자열 정보를 분리하는 코드 let fullNameArr = dateTimeOriginal.characters.split{$0 == ":" || $0 == " "}.map(String.init) //exif 정보를 yyyy_mm_dd 로 변경 var direct_name = fullNameArr[0] + "_" + fullNameArr[1] + "_" + fullNameArr[2] var path1 = String(path!) + "/" + direct_name //<- dialog로 선택된 폴더하위에 생성할 폴더이름을 지정 //폴더 생성 코드 let fileManager = NSFileManager.defaultManager() do { //withIntermediateDirectories: false <-이면 중복된 폴더가 있을때 에러발생 try fileManager.createDirectoryAtPath(path1, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { print("Error while creating a folder.") } // 파일이동 코드 //Users로 시작하는 경로이며.. 경로에 파일이름이 들어가야함.. if ((try? fileManager.moveItemAtPath(String(path! + "/" + f), toPath: path1 + "/" + f)) != nil) { print("Move successful") } else { print("Moved failed:)") } } } } } } } | cs |
완성된 전체코드입니다...... 이 코드가지고 약 천개정도의 사진을 돌려봤는데 중간중간 에러가 나긴 하네영...
사진을 다른 폴더로 옮기고 실행하면 잘 되는 것봐서는..... 머 메모리관련 에러일수도 있을듯한긴한뎅
하여튼 적은 숫자의 사진은 잘 되는 것을 확인했습니다... 이것저것 같다붙인 코드인지라 지저분하네영. ㅋ
하여튼 파이썬보다는 좀더 길어지고 복잡한 코드임에는 틀림이 없어보이긴 하지만.. 제가 첨으로 에디트한 코드인지라.. 많은 애착이 갈듯합니당. ^^
'프로그래밍 > Swift(IOS & Mac)' 카테고리의 다른 글
[swift html parser] 이렇게저렇게 해보는 파씽. (0) | 2016.03.21 |
---|---|
[swift html parser] kanna Parser 이용 시 조건 변화에 따른 출력 값 변화 (0) | 2016.03.20 |
[swift] file move.. 파일을 이동하는 코드입니다. (0) | 2016.03.17 |
[swift] String split 예제 (0) | 2016.03.17 |
선택된 폴더에 하위폴더 생성하기.. Create the sub_folder where selected folder with Swift (0) | 2016.03.17 |