2017-12-17 9 views
0

나는 가능할지 모르지만 데이터 URI에서 이미지 파일 크기를 얻을 수 있습니까? JavaScript의 데이터 URI에있는 이미지 파일 크기

src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD... 

나는 일반 자바 스크립트를 사용하여 이미지 파일의 크기를 얻을 수 있으며, src을 바탕으로 예를 들면 다음과 같습니다

,의는 src가 어울릴 IMG 요소가있는 가정 해 봅시다? (서버 요청 없음)

답변

2

파일 크기를 원하면 base64 문자열을 디코딩하고 길이를 확인하십시오.

var src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP/// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; 
 

 
var base64str = src.substr(22); 
 
var decoded = atob(base64str); 
 

 
console.log("FileSize: " + decoded.length);

+2

나는 OP가 이미지의 크기가 아니라 파일 크기를 의미한다고 확신합니다. –

+1

답변을 업데이트했습니다. –

1

당신의 최선의 선택은 base64로 문자열 자체의 길이를 계산하는 것입니다.

What is a base64 length in bytes?

당신은 atob()를 사용하여 일반 문자열로 base64로 문자열을 변환 한 다음 길이를 확인해야합니다, 당신은 이미지의 실제 크기에 가까운 말할 수있는 값을 반환합니다. 또한 크기를 확인하기 위해 데이터 URI에서 data:image/jpeg;base64, 부분이 필요하지 않습니다.

1

추정치가 좋으면 파일 크기가 base64 문자열의 75 %입니다. 이것은 2 바이트 이내로 정확합니다. 한 줄을 작성하고 끝내려면, atob()을 사용하고, Deepak Kamat의 답과 같이 길이를 확인하십시오. 당신이 (거대한 파일 또는 파일 또는 두 가지 모두 수백만의 경우) 최대 성능과 정확한 답변을 원하는 경우에, 패딩에 대한 추정을 사용하지만 계정 :

let base64Length = src.length - (src.indexOf(',') + 1); 
let padding = (src.charAt(src.length - 2) === '=') ? 2 : ((src.charAt(src.length - 1) === '=') ? 1 : 0); 
let fileSize = base64Length * 0.75 - padding; 

이 전체 문자열을 구문 분석을 방지하고, 전적으로 당신이 미세 최적화를 찾고 있거나 메모리가 부족하지 않은 이상 잔인합니다.