遮眼帯ブックマークレット
by
moriyoshi
2010-07-01 [2010/07/01 11:07:59]
顔画像に遮眼帯をつけます。
-
/*
* @title 遮眼帯ブックマークレット
* @description 顔画像に遮眼帯をつけます。
* @include http://*
* @license MIT License
* @require jQuery
*/
(function() {
var proxiedAjax = function(options) {
var merged_options = {};
var url = options["url"];
if (typeof options.data != "undefined") {
url = url.replace(/\?|$/, function(g) {
return "?" + $.param(options.data);
});
}
$.extend(merged_options,
options,
{
url: "http://query.yahooapis.com/v1/public/yql",
data: {
format: "json",
q: "select * from xml where url='"
+ url.replace(/'/g, "''") + "'"
},
dataType: "jsonp",
success: function(data) {
options["success"](data.query.results);
}
}
);
return $.ajax(merged_options);
};
var makeInt = function(x) {
retval = {}
for (var i in x) {
if (x.hasOwnProperty(i)) {
var v = x[i];
if (typeof v == "string" || v instanceof String)
v = parseInt(v);
else
v = makeInt(v);
retval[i] = v;
}
}
return retval;
};
var main = function() {
$("img").each(function(n, img) {
if (img.src.indexOf("gif") >= 0 || img.width < 64 || img.height < 64)
return;
proxiedAjax({
url: "http://detectface.com/api/detect",
data: { url: img.src },
success: function (data) {
if (!data || !data.faces.face)
return;
var faces = data.faces.face instanceof Array ?
data.faces.face: [data.faces.face];
var canvas = $("<canvas/>")
.css({
width: img.width + "px",
height: img.height + "px"
})
.attr({ width: img.width, height: img.height });
var ctx = canvas.get()[0].getContext("2d");
$.each(faces, function(n, face) {
var l = makeInt(face["left-eye"]), r = makeInt(face["right-eye"]);
var vx = l.x - r.x, vy = l.y - r.y;
var distance = Math.sqrt(vx * vx + vy * vy);
var nvx = vx / distance, nvy = vy / distance;
ctx.drawImage(img, 0, 0);
ctx.strokeStyle = "#000";
ctx.lineWidth = distance / 3.5;
ctx.lineCap = "butt";
ctx.beginPath();
var d = distance / 4;
ctx.moveTo(l.x + nvx * d, l.y + nvy * d);
ctx.lineTo(r.x - nvx * d, r.y - nvy * d);
ctx.stroke();
});
canvas.appendTo(img.parentNode);
$(img).remove();
}
});
});
};
main();
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。