バイナリ画像をDataURIに変換
XHRで取得したものをDataURIにする。というのを目指してただけで動いてないはず。
画像をDataURIに変換するブックマークレット
function Baseka(url , callback){
var parseHTTPHeader=function(responseHeader){
var headers=responseHeader.split("\n");
var len=headers.length;
var parsing=[];
for(var i=0;i<len;i++){
if(/^$/.test(headers[i])){
}else if(/^[\x09\x20]/.test(headers[i])){
if(parsing.length==0){
throw "SyntaxError:HTTPHeader (first line) "+headers[i];
}
parsing[parsing.length-1]+="\n"+headers[i];
}else{
parsing.push(headers[i]);
}
}
var len=parsing.length;
var parsed={};
for(var i=0;i<len;i++){
var pair=parsing[i].split(": ",2);
if(pair.length!=2){
throw "SyntaxError:HTTPHeader (format) "+parsing[i];
}
if(pair[0] in parsed){
throw "SyntaxError:HTTPHeader (repetition) "+pair[0];
}
parsed[pair[0]]=pair[1];
}
return parsed;
}
var loadDataMethod=function(res){
var headers=parseHTTPHeader(res.responseHeaders);
if(res.status!=200){
throw "RequestError"+
":status="+res.status+
":statusText="+res.statusText+
":responseHeaders="+res.responseHeaders;
}
var contentType=("Content-Type" in headers)?
headers["Content-Type"]:
"application/octet−stream";
var dataScheme="data:"+contentType+
";base64,"+btoa(
res.responseText.replace(
/[\u0100-\uffff]/g,
function(c){
return String.fromCharCode(c.charCodeAt(0)&0xff);
}
)
);
data.callback(dataScheme);
}
var getData=function(url){
console.log(url)
data.url=url;
GM_xmlhttpRequest(
{
"method":"GET",
"url":data.url,
"onload":loadDataMethod,
"onerror":loadDataMethod,
"overrideMimeType":"text/plain; charset=x-user-defined"
}
);
}
var data={};
var getFileByDataScheme=function(url,callback){
data.callback=callback;
getData(url);
}
var handler=function(url,callback){
(function(){
getFileByDataScheme(url,callback);
})();
}
handler(url,callback);
}
画像化してみる
function Baseka(url , callback){
var parseHTTPHeader=function(responseHeader){
var headers=responseHeader.split("\n");
var len=headers.length;
var parsing=[];
for(var i=0;i<len;i++){
if(/^$/.test(headers[i])){
}else if(/^[\x09\x20]/.test(headers[i])){
if(parsing.length==0){
throw "SyntaxError:HTTPHeader (first line) "+headers[i];
}
parsing[parsing.length-1]+="\n"+headers[i];
}else{
parsing.push(headers[i]);
}
}
var len=parsing.length;
var parsed={};
for(var i=0;i<len;i++){
var pair=parsing[i].split(": ",2);
if(pair.length!=2){
throw "SyntaxError:HTTPHeader (format) "+parsing[i];
}
if(pair[0] in parsed){
throw "SyntaxError:HTTPHeader (repetition) "+pair[0];
}
parsed[pair[0]]=pair[1];
}
return parsed;
}
var loadDataMethod=function(res){
var headers=parseHTTPHeader(res.responseHeaders);
if(res.status!=200){
throw "RequestError"+
":status="+res.status+
":statusText="+res.statusText+
":responseHeaders="+res.responseHeaders;
}
var contentType=("Content-Type" in headers)?
headers["Content-Type"]:
"application/octet−stream";
var dataScheme="data:"+contentType+
";base64,"+btoa(
res.responseText.replace(
/[\u0100-\uffff]/g,
function(c){
return String.fromCharCode(c.charCodeAt(0)&0xff);
}
)
);
getCanvas(dataScheme);
}
var getData=function(url){
console.log(url)
data.url=url;
GM_xmlhttpRequest(
{
"method":"GET",
"url":data.url,
"onload":loadDataMethod,
"onerror":loadDataMethod,
"overrideMimeType":"text/plain; charset=x-user-defined"
}
);
}
var data={};
var getFileByDataScheme=function(url,callback){
data.callback=callback;
getData(url);
}
var handler=function(url,callback){
(function(){
getFileByDataScheme(url,callback);
})();
}
function getCanvas(resScheme){
//Canvas要素を準備
var canvas=document.createElement("canvas");
//画像オブジェクトの準備
var img=new Image();
img.src=resScheme;
//画像の描画
var cx=canvas.getContext("2d");
cx.drawImage(img,0,0);
//画像データの取得とボディへの挿入
var dataScheme=canvas.toDataURL("image/png");
data.callback(dataScheme);
}
handler(url,callback);
}
- XMLHttpRequestでファイルをDataSchemeで取得する実験 その3 (Kanasansoft Web Lab.)
- http://www.kanasansoft.com/weblab/2009/04/xmlhttprequestdatascheme_3.html
画像をDataURIに変換するブックマークレット
javascript: (function () {
var elem = document.images[0];
var canvas = document.createElement('canvas');
canvas.width = elem.width;
canvas.height = elem.height;
elem.parentNode.insertBefore(canvas, elem);
var ctx = canvas.getContext("2d");
ctx.drawImage(elem, 0, 0);
elem.parentNode.replaceChild(document.createTextNode(canvas.toDataURL("image/png")), elem);
canvas.parentNode.removeChild(canvas);
})();
コメント(0件)
- TB-URL http://efcl.info/adiary/011/tb/