2013. 1. 4. 14:55ㆍ제2외국어/iOS
iPhone 에서 사진을 찍은 후, 이미지를 어디론가로 보낼 때.
사진 그 자체로만 보낸다면 그리 어렵지 않습니다.
* 서버에 이미지만 보낼 때
예를들어
1. 찍은 이미지 정보
: 밑에는 AVCaptureStillImageOutput 를 활용해 사진을 찍은게 아니라 현재 보이는 화면을 캡쳐한 이미지입니다.
( 차이점은 사진 찍은 것보다 데이터가 적다고 생각하시면 됩니다. 찍은게 아니라 캡쳐니깐요!! )
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
2. body 에 저장
[body appendData: imageData];
3. 보내기
[request setHTTPBody : body];
끝입니다. 이미 데이터 형식이니 body 에다가 붙여서 body 를 보내기만 하면 됩니다.
물론 받는 쪽에서도 처리해야할 게 있습니다.
---- 참고 ( NSData 를 UIImage 로 Convert ) ---
: UIImage *image = [[UIImage alloc] initWithData : imageData];
==> imageData 라는 NSData 형식의 자료를 UIImage 형식으로 바꾸어서 image 에 저장.
* 서버에 정보 + 이미지 보낼 때
단!! 단순히 이미지만 보내는게 아니라 이미지에 관한 정보를 더해서
[ 이미지에 관한 or 그냥 정보 + 이미지 데이터 ] 를 보낸다면 방식을 다르게 해주어야 합니다.
지금부터 하는 방식은 가장 단순하고 무식한, 손쉬운 방법입니다.
목표 : '이미지 이름 + 캡쳐한 날짜 + 이미지' 를 보낸다.
방법 : 이미지, 즉 NSData를 NSString 형식으로 변환해서 통짜 NSString 으로 보낸다.
중요!!
- 이미지, 즉 NSData 를 NSString 로 변환할 때 base64로 encoding 을 해주셔야 합니다.
- 헌데, 예전에 사용했던 [NSData encodeBase64ForData]; 가 언제부터인지 사라졌습니다. ㅠ
- 그래서 base64 encoding 함수를 직접 구하셔야 됩니다. (아래는 base64 함수입니다. )
- (NSString*)base64forData:(NSData*)theData { const uint8_t* input = (const uint8_t*)[theData bytes]; NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; for (i=0; i < length; i += 3) { NSInteger value = 0; NSInteger j; for (j = i; j < (i + 3); j++) { } output[theIndex + 0] = table[(value >> 18) & 0x3F]; } |
ex) 방식은 xml, json 형식이 있지만 현재 사용한 방법은 xml 형식입니다.
위의 base64 함수를 사용해서
NSString *imgString = [self base64forData:imageData];
NSString *postStr = [[NSString alloc]init]; // 어딘가에 보낼 문자열 생성
postStr = [postStr stringByAppendingFormat:@"<Test>"];
postStr = [postStr stringByAppendingFormat:@"<imgName>%@</imgName >",subject]; // 이미지 이름
postStr = [postStr stringByAppendingFormat:@"<imgData>%@</imgData >"imgString]; // 이미지 데이터
postStr = [postStr stringByAppendingFormat:@"</Test>"];
이렇게 만든 xml 형식의 문자를 body 에 그냥 넣으시면 안되고요!! 문자니 NSUTF8StringEncoding 로 encoding 하신후에~
[body appendData:[[NSString stringWithString : postStr]dataUsingEncoding:NSUTF8StringEncoding]];
body 를 셋팅 후 보내시면 됩니다.
ps. base64 함수는 많아도 너~무 많으니 더 좋은 소스를 찾아보시거나, 직접 라이브러리와 하셔서 사용하셔도 무관합니다.
아래는 마르스 블로그에서 가져온 소스형식의 파일입니다.
'제2외국어 > iOS' 카테고리의 다른 글
[iOS] Multitasking : Audio (0) | 2013.01.24 |
---|---|
About : iOS Multitasking (0) | 2013.01.21 |
[simple]현재 위치 및 시간 알아내기. (0) | 2012.12.03 |
APNs 맛 보기. (2) | 2012.11.15 |
강남스타일? 코딩스타일! (0) | 2012.11.06 |