2017-02-12 3 views
0

나는 stackoverflow에서 찾을 수있는 모든 방법을 시도했습니다.자바 스크립트를 사용하여 ID3 이미지 데이터의 이미지 표시

Display image from blob using javascript and websockets

How can you encode a string to Base64 in JavaScript?

내가 cloudinary 및 id3js을 사용하고이 두 사람은 가장 완벽한 게시물의 일부입니다. 먼저 mp3 파일을 cloudinary로 업로드 한 다음 id3js를 통해 Ajax로 파일을 요청합니다. 이 은 나에게 모든 ID3 태그를 제공합니다.

openUploadModal() { 
     cloudinary.openUploadWidget(window.cloudinaryOptions, 
     (errors, track) => { 
      if(!values(errors).length) { 

       id3(track[0].secure_url, (errs, tags) => { 
        this.setState({ 
         title: tags.title, 
         audio_url: track[0].secure_url, 
         artist: tags.artist, 
         uploaded: true, 
         cover_photo: this.getImage(tags.v2.image) 
        }); 
       }); 
      } 
     }); 
    } 

그리고 이미지 컨버터 :

enter image description here

그때 백그라운드로 된 GetImage의 반환 값을 사용

getImage(image) { 
    var arrayBuffer = image.data; 
    var bytes = new Uint8Array(arrayBuffer); 

    return "data:image/png;base64,"+btoa(unescape(encodeURIComponent(bytes))); 
} 

이 같은 태그 객체가 모습입니다 div의 -image 속성. 콘솔에는 오류가 없으며 잘못된 요청은 아니지만 데이터를 열 때 : image/jpg, base64, ... 링크 페이지에 작은 흰색 사각형 만 있습니다.

ID3 태그의 이미지 개체에서 작동하는 URL을 어떻게 가져올 수 있습니까?

+0

'Uint8Array'는 문자열이 아닙니다. 'image.data'는 이미지의'ArrayBuffer'입니까, 아니면'ImageData' 인스턴스입니까? – guest271314

답변

0

image.dataArrayBuffer 인 경우 FileReader을 사용할 수 있습니다. FileReaderload 이벤트가 비동기 인 경우 Promise을 사용하지 않고 함수의 결과를 반환 할 수 없지만 FileReaderSync()Worker에 사용할 수 있습니다.

createImageBitmap alternative on Safari도 참조하십시오.

var reader = new FileReader(); 
reader.onload = function() { 
    // do stuff with `data URI` of `image.data` 
    console.log(reader.result); 
} 
reader.readAsDataURL(new Blob([image.data], {type:image.mime})); 
+0

나는 이것을 시도했지만 데이터 URI는 여전히 빈 흰색 사각형 만 보여줍니다. soundcloud의 같은 mp3 파일은 삽입 된 이미지를 올바르게 표시합니다. 무슨 일이 일어날 지 아무 생각 없어? –

+0

@SebastianCruz'getImage()'에서 기대하는 반환 값입니까? 'FileReader'' load' 이벤트는'load' 이벤트 핸들러에서 결과를 비동기 적으로 리턴합니다. – guest271314

+0

'ArrayBuffer'를'base64' 문자열로 변환하는 동기 솔루션에 대해서는 [ArrayBuffer에서 base64로 인코딩 된 문자열] (http://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string)을 참조하십시오. – guest271314

관련 문제