2014-02-26 3 views
3

이미지를 base64 문자열로 변환하는 C# 코드가 있습니다. 코드는 다음과 같습니다.이 C# 및 Java 코드가 다른 곳을 알아낼 수 없습니다.

MemoryStream ms = new MemoryStream(); 
Image img = Image.FromFile(filename); 
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
string s = Convert.ToBase64String(ms.GetBuffer()); 

JAVA로 구현하려고합니다. 내 자바 코드는 :

BufferedImage img = null; 
img = ImageIO.read(new File(filename)); 
byte[] bytes = ((DataBufferByte)img.getData().getDataBuffer()).getData(); 
String js = Base64.encodeBase64String(bytes); 

이 코드 조각은 동일한 이미지 파일에 대해 동일한 문자열을 반환해야합니다. 그러나 그들은 다른 문자열을 반환하고 있습니다. 나는 이유를 알 수 없다. 누구든지 그것에 불을 붙일 수 있습니까? 코드의

답변

7

이 두 조각은 정말 안 같은 이미지 파일

없음에 대해 동일한 문자열을 반환해야합니다.

ToArray 대신 GetBuffer을 사용할 때 C# 코드는 JPEG 인코딩 버전의 이미지 데이터의 base64 표현을 반환합니다. (ToArray을 여기에서 원합니다.)

Java 코드는 SampleModel에 따라 원시 래스터 데이터의 base64 표현을 반환합니다. 이 상당히 C# 코드에서 반환 된 문자열보다 큰 것으로 기대하고 싶습니다.

두 코드 모두 이미지가 동일한 형식으로 인코딩 된 경우에도 동일한 데이터가 제공된다는 의미는 아니며 인코딩에 따라 다릅니다.

중요한 것은 "파일의 내용을 base64"로 바꾸려면 Image을 전혀 사용하지 않아도된다는 것입니다. 예를 들어, C#에서 사용할 수 :

string base64 = Convert.ToBase64String(File.ReadAllBytes(filename)); 

는 이미지가 그 점에서 관련이 있다는 사실을 - 파일 바이트의 단지 모음입니다, 당신은 할 수 base64로 인코딩 것들의 의미를 이해하지 않고 바이트.

+0

당신은 내가 C# 하나와 같은 문자열을 반환하도록 내가 어떻게 자바 코드를 향상시킬 수있는 제안을 줄 수 있습니까? – th1rdey3

+1

@ th1rdey3 : 이미지 파일이 이미 원하는 형식으로되어 있다고 가정 할 때 * 당장 가져온 코드 조각 중 하나 *를 선택하는 것이 좋습니다 (IMO). –

+0

실제로 C# 코드를 구현해야합니다. 그래서 그것은 바꿀 수 없습니다. 동일한 결과를 생성 할 수 있도록 JAVA 코드를 변경해야합니다. – th1rdey3

관련 문제