2013-06-12 8 views
0

응용 프로그램에서 webgl을 사용하고 화면 외부 렌더링 타겟 (프레임 버퍼)에 무엇인가를 렌더링 한 다음 readPixels를 수행합니다. 픽셀 데이터를받은 후 나는 여기에 해당 자바 스크립트 JPEG 인코더를 사용하여 JPEG로 변환 :이진 데이터 쓰기 html5 FileWriter

Javascript Jpeg Encoder

은 내가 로컬 파일 시스템에 기록 할 원시 이진 JPEG 데이터를 얻을. 다음은 내가 작성하는 데 사용하는 코드입니다.

root.getFile(filename, {create: true}, function(fileEntry) 
{ 
    fileEntry.createWriter(function(writer) 
    { 
     writer.onwriteend = function(e) 
     { 
      System.debug("Write done"); 
     }; 
     writer.onerror = function(e) 
     { 
      System.error(e); 
     } 
     var data = new Blob(jpegData, { type: "image/jpeg" }); 
     writer.write(data); 
     jpegData = null; 
     pixels = null; 
     uoozo.core.write[filename] = false; 
    }); 
}, 
function(e) 
{ 
    System.error(e); 
}); 

그러나 나는 이상한 결과를 얻습니다. jpegData는 이미지 요소에 넣을 때 좋지만 Blob을 만들면 예를 들어. jpegData의 크기는 3200 바이트이지만 Blob은 항상 4818 바이트이며 FileWriter는 쓰기 작업 후에도 동일한 위치를 반환합니다. 만든 jpeg가 분명히 잘못되어 열리지 않습니다. 나는 FileWriter가 영리한 (또는 어리석은) 노력없이 파일에 이진 데이터를 쓰는 방법을 이해할 수 없다.

누군가 나를 도와 줄 수 있습니까? 고맙습니다.

+0

어떤 형식이 jpegData, 배열, 문자열, base64입니까? – dandavis

+0

jpegData는 바이너리 데이터의 배열입니다. 라이브러리는 base64 문자열도 제공 할 수 있지만 동일한 결과를 제공합니다. 나는 또한 블롭에 다른 타입을 지정하려고 시도했다. "일반/텍스트", "이미지/jpg"및 심지어 빈 문자열. 모든 것이 동일한 결과를 가져옵니다. – GlGuru

+0

이진수 또는 원시 문자열 묷 자열 에서처럼? – dandavis

답변

0

Uint8Array로 변환 한 후에도 필요한 결과를 얻지 못했습니다. 분명히 내가 전달해야 할 때에 프로퍼티를 작업 할 수있는 물방울을받을하기 위해

var blob = new Blob(jpegData_ConvertTo_Uint8Array, "image/jpeg"); 

이 아닌 정확하고 : 나는 같은 물방울 생성자에 배열 객체를 전달되었다가 떠올랐다 dataURLToBlob 방법을보고 한 후 배열과 같은 :

var blob = new Blob([jpegData_ConvertTo_Uint8Array], "image/jpeg"); 

이 완벽하게 작동하고 FileWriter에 대한 후속 호출로 파일에 내 JPEG 물품. 쓰기 (BLOB) 기능. 고마워요!