Data URIからBlob(File)を作成する方法
JavaScriptで、base64エンコードされたData URIの文字列からBlob(File)を作成する方法を紹介します。例えば、localStorageなどで画像をData URIで保存させて再訪時に取り出す時、Blobに変換して扱えたら何かと便利なことが多いです。
サンプルコード
// 対象の文字列
var dataURI = "data:image/png;base64,iVBORw..." ;
// "iVBORw..."をバイナリに変換
var byteString = atob( dataURI.split( "," )[1] ) ;
// "image/png"
var mimeType = dataURI.match( /(:)([a-z\/]+)(;)/ )[2] ;
// バイナリからBlobを作成
for( var i=0, l=byteString.length, content=new Uint8Array( l ); l>i; i++ ) {
content[i] = byteString.charCodeAt( i ) ;
}
var blob = new Blob( [ content ], {
type: mimeType ,
} ) ;
デモ
ある画像のData URIを、Blobに変換したデモです。
var dataURI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAb1BMVEVvb29mZmYAAAEQDg0mJiZoaWlycnIhISIpKCkyMjJJRD13d3Y9OjSHh4YdGBX64rdhXlnp6en////60pICCRjkz6neuoH19fXd3dvmwYXzyopaUESbmpj/7sH/3JXKq3jWkHPFs5Pw2K/5ooDDw8LFwvVMAAADMElEQVRIx41Wi5aqMAykpaWlL+vloQjq6u7/f+OdtD4A2XM2ag7UDjNp04RCCKH/bJhc4Kf+bBmg6z8bKAqt6ijXxj4sDcdaaQJIW63MflgalU9AVazsk4FGK/YLoGJO11gTEq01BRtqhjnVjGHxsTJwXpYlhw/kOQ/MVgvA7PHQE41zQglHXgEZuIpQtQA8H096lPGTd6UjHyApbVTQbCsGWgrF6+lnMtyQD2mDtYIqaTdiKJiMKwZByaNI1XsfXgyVdMpBbmUL/GeMSdPFK31E3mk5C0BzXVib4hNYHfVEQFe+XTGwukSmIBEoPjO+GcCB5fpgsAAo7JdztW7Ndbia9pHVCKPkpRIbDKS15S0Aw2UAoG1boRPDHDBnwCMhpm5Nf+lNWydh9PmVQassZuzO3cjH6wnXSCrxK0NoHcQ4bgDA9oFnTMIAEFsMwrgRgFhHAKKOCVBjT8I2A4ee4b7bdV23S/7U9FmY42ErBo7FuWDq+XzOvmn6LGwBeKcqlr/vwZAtM0QV14DnWShw0o3C+jzmx3bsm9PQD4BtMQBjWcv1A3DukFoANJemoXUr17lU5QMdxi7Nv+9oHxJD3w9X14rZsuYQYIX9+vo64alkJ1wPiMHhzLqP80CnmRXSfn9/Y/opGa4hxnCcOM4+6lLlvbeSGIZhSAwNrvuUs0LVzM7OdGVxmP3xcPRSuuC8n477I76Tt1CTzueyalD1HP3h38Ezidxm0maAlSzVJSWXdYnE0FMTg+DaT2CAHafJxxFZpJaVj8Ts9wcI8CDT3OAWbDAC7X8MX5bKgkEM7OBHyr+Wu3T7soNZlUoA9vTH3kub6mT82SdFycAQtVmUygw4AMAksvXW3aIZX4V+NPF2vxnu3sv6lsRQt939fNeojI+2hupNI0kVWweNJcoMpqSyl41GiGGxcXlZPdVWxIDTWAakz8PzgJF1uX/1JaR36iMzQOop64aC1MD3cUqFxtTa1S+vxUfLWnbEqNCxQkkGn9vPoinaVc9FT8mtjaxMibRou6lcz7q6TAwvS6maxwmw+eogcl97OLF4ddh8OaFynao8OS1WLydi8zVnbvPx/ysnUJoXvnyVAAAAAElFTkSuQmCC" ;
var byteString = atob( dataURI.split( "," )[1] ) ;
var mimeType = dataURI.match( /(:)([a-z\/]+)(;)/ )[2] ;
for( var i=0, l=byteString.length, content=new Uint8Array( l ); l>i; i++ ) {
content[i] = byteString.charCodeAt( i ) ;
}
var blob = new Blob( [ content ], {
type: mimeType ,
} ) ;
var a = window.URL.createObjectURL( blob ) ;
関連記事
- Blob(File)からData URIを作成する方法
- Blob(File)をData URIの文字列に変換します。
- 確認ダイアログを表示する方法
- 確認ダイアログを表示して、ユーザーが選択した「はい」、または「いいえ」で処理を振り分けます。
- ランダムの数(乱数)を作る方法
- ランダムで数を作成します。
- 先頭、末尾の文字を削除する方法
- 先頭、末尾の文字を削除します。
- ローカル動画を表示する方法
- ユーザーの端末に保存されているローカル動画を表示します。
- ローカル画像を表示する方法
- ユーザーの端末に保存されているローカル画像を表示します。