SYNCERのロゴ
アイキャッチ画像

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 ) ;

a =

  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年7月29日 (土)
コンテンツを公開しました。