Skip navigation.

exploreopera

| Help

Sign up | Help

ノヴム・オペラヌム

Posts tagged with "Bookmarklet"

はてなダイアリーの「長年日記」機能を少しだけ楽に使うブックマークレット

はてなダイアリー日記 - はてなダイアリーに「長年日記」機能を追加しました。

なんか怖い人が作れって言ったので作りました。

javascript:(function(){var date=prompt('Date');location.href=location.href.match(/http:\/\/d\.hatena\.ne\.jp\/.*?\//i)+'____'+date;})();

はてなダイアリーで実行して「0401」とか入力してみてください。三十秒で作ったのでちょうてきとうです。

画像をモノクロに変換するブックマークレット

,

画像を開いた後でブックマークレットを実行すると画像がモノクロになります。ただし、変換した画像を保存したりすることはできません。

これが
モノクロ変換前
こうなる
モノクロ変換後

ブックマークレット

javascript:(function(){if(window.location.href.match(/^.*\.(jpe?g|bmp|gif|png)$/i)){var ie=document.getElementsByTagName('img')[0];var io=new Image();io.src=ie.src;var canvas=document.createElement('canvas');canvas.width=io.width;canvas.height=io.height;var ctx=canvas.getContext('2d');ctx.drawImage(io,0,0,io.width,io.height);ie.parentNode.replaceChild(canvas,ie);var gctx=canvas.getContext('opera-2dgame');gctx.lockCanvasUpdates(true);var ih=canvas.height;var iw=canvas.width;for(var y=ih;y--;){for(var x=iw;x--;){var color=parseInt(gctx.getPixel(x,y).substr(1),16);var r=color>>16;var g=color>>8&255;var b=color&255;var c=0.298912*r+0.586611*g+0.114478*b;gctx.setPixel(x,y,'rgb('+c+','+c+','+c+')');}}gctx.lockCanvasUpdates(false);gctx.updateCanvas();}})();

整形したソースコード

(function () {
  if (window.location.href.match(/^.*\.(jpe?g|bmp|gif|png)$/i)) {
    var ie = document.getElementsByTagName('img')[0];
    var io = new Image();

    io.src = ie.src;

    var canvas = document.createElement('canvas');

    canvas.width = io.width;
    canvas.height = io.height;

    var ctx = canvas.getContext('2d');

    ctx.drawImage(io, 0, 0, io.width, io.height);
    ie.parentNode.replaceChild(canvas, ie);

    var gctx = canvas.getContext('opera-2dgame');

    gctx.lockCanvasUpdates(true);

    var ih = canvas.height;
    var iw = canvas.width;

    for (var y = ih; y--;){
      for (var x = iw; x--;){
        var color = parseInt(gctx.getPixel(x, y).substr(1), 16);
        var r = color >> 16;
        var g = color >> 8 & 255;
        var b = color & 255;
        var c = 0.298912 * r + 0.586611 * g + 0.114478 * b;

        gctx.setPixel(x, y, 'rgb(' + c + ',' + c + ',' + c + ')');
      }
    }

    gctx.lockCanvasUpdates(false);
    gctx.updateCanvas();
  }
}) ();

補足

  • 画像をcanvas要素に突っ込み、ピクセル単位でグレースケール変換しています。
  • opera-2dgameコンテキストを利用しているため、Opera以外では動きません。
  • 滅茶苦茶重いです。スペックが低い場合や大きい画像を変換する場合は数分から数十分単位で時間がかかります。
  • 最初はページに存在する全ての画像をグレースケール変換するUserJSを書いていたんですが、Operaが落ちまくるのでやめました。
  • 画像一つだけでも、環境によってはOperaがクラッシュする可能性があります。
  • まあ、お遊びというか、Operaならこんなこともできるんだぜという事で。

参考にした

Webページにらくがきするブックマークレット

思いつきブックマークレットシリーズ。

表示しているWebページにマウスでらくがきできるようにするブックマークレットを作りました。

javascript:(function(){var e=document.createElement('script');e.src='http://files.myopera.com/Watanabe/js/rakugaki.js';document.body.appendChild(e);})();

ブックマークレットを実行して、マウスの左ボタンを押しながらポインタを動かすと線を書けます。終了する際はEscキーを押してください。

実用性は皆無ですが、ページを印刷する際にちょっとしたメモを取りたいなんて時に役に立つかもしれません。立たないかもしれません。

Opera 9.20、Firefox 2.0.0.2で動作確認しました。canvasを使っているのでIEでは動きません。

ソースコードはrakugaki.jsを参照して下さい。

参考にした