2008-09-16 3 views
1

C# .net에서 JPEG 이미지를 직렬화합니다. 나는 단순히 바이트 스팀으로 변환하고 웹 서비스를 통해 전송한다. 직렬화 된 바이트 스트림이 실제 이미지 크기의 30 배 이상인 것을 관찰했습니다. 어느 누구도 실제 이미지의 크기에 비례하여 직렬화 및 유지하는 더 나은 방법을 제안 할 수 있습니까?이미지를 더 간단하게 직렬화 할 수 있습니까?

+0

바이 스트림이 어떻게 30 배 더 커 졌는지 관찰 했습니까? –

답변

0

면책 조항 : 어쩌면 당신은 데이터 패킷 프로토콜 오버 헤드 바이트를 많이 추가 SOAP 같은 것을 사용하고
그것의 개방/표준과 성능 간의 트레이드 오프 .. 말하기 비 통보 사람입니다. 크기가 중요한 제약이라면 순수한 바이너리 스트림으로 전송 해보십시오. 실제 구문은 다른 사람이 입력 할 수도 있습니다.

2

JPEG는 압축 기술이며, 그것을 읽으십시오. 이것이 파일 형식의 본질입니다. 먼저 이미지로 읽지 않고 원본 JPEG 파일을 보내는 방법을 찾으십시오.

+0

왜 "크게 읽으면 크게 확장할까요?" – Indy9000

+0

@Indeera, JPEG 파일을 이미지로 읽으면 메모리에서 압축되지 않습니다. 예를 들어 Windows 샘플 이미지 Tulips.jpg는 디스크의 경우 620K이고 메모리의 경우 2359K입니다. JPEG를 만들 때 적용된 압축 매개 변수와 압축되지 않은 이미지에 알파 채널이 있는지 여부에 따라 그 차이가 훨씬 커질 수 있습니다. 그것은 결국 압축의 전체 지점입니다. –

2
  1. FileStream을 사용하여 원본 이미지 스트림을 읽고 MemoryStream을 사용하여 직렬화기를 전달해야합니다.
  2. 이미지 클래스 만 사용할 수있는 경우 수신중인 바이트 배열의 출력 형식을 지정하십시오.
-1

왜 그것이 Base64String로 변환?

다른 쪽 끝에서
byte[] arr = File.ReadAllBytes(filename); 
string str = Convert.ToBase64String(arr); 

당신은 이동하여 다시 바이트 []로 변경할 수 있습니다 :

byte[] arr = Convert.FromBase64String(string); 
+1

다른 인코딩 레이어를 추가하면 크기가 커질 수 있습니다. –

0

어쩌면 단지 웹 서버에서 이미지를 호스팅하고 오히려 웹 서비스 응답의 URL을 보낼 직렬화 된 이미지보다. 또한 클라이언트가 가능할 때 로컬로 이미지를 캐시 할 수 있습니다.