東京国際アニメフェアの開催告知チラシから参加拒否企業の作品をグレースケール化します

  • /*
     * @title 東京国際アニメフェアの開催告知チラシから参加拒否企業の作品をグレースケール化します
     * @description 東京国際アニメフェアの開催告知チラシから参加拒否企業の作品をグレースケール化します。 http://www.tokyoanime.jp/ja/info/leaflet/ で実行してください。
     * @include http://www.tokyoanime.jp/ja/info/leaflet/
     * @license MIT License
     * @require 
     */
    (function() {
    var XMAX = 9;
    var YMAX = 8;
    
    var isRetire = new Array(XMAX );
    for(var x = 0; x < XMAX ; x++) {
    	isRetire[x] = new Array(YMAX);
    	for(var y = 0; y < YMAX; y++) {
    		isRetire[x][y] = false;
    	}
    }
    
    //	出展を取りやめた作品 via http://twitpic.com/3elscd
    isRetire[0][3] = true;
    isRetire[1][2] = true;	//	MAJOR(小学館)
    isRetire[1][4] = true;	//	ワンピース(集英社)
    isRetire[2][3] = true;
    isRetire[2][4] = true;	//	ドラゴンボール(集英社)
    isRetire[2][6] = true;	//	ドラえもん(小学館)
    isRetire[3][1] = true;
    isRetire[3][2] = true;
    isRetire[3][4] = true;	//	名探偵コナン(小学館)
    isRetire[3][7] = true;	//	FairyTale(講談社)
    isRetire[4][1] = true;
    isRetire[4][2] = true;
    isRetire[4][5] = true;
    isRetire[4][6] = true;
    isRetire[6][3] = true;
    isRetire[6][4] = true;
    isRetire[6][7] = true;
    isRetire[7][3] = true;
    isRetire[8][2] = true;
    isRetire[8][3] = true;
    isRetire[8][4] = true;
    isRetire[8][5] = true;
    isRetire[8][6] = true;
    
    var image = document.querySelector("div#detail img");
    var container = document.querySelector("div#detail > p");
    
    var canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;
    canvas.background = "none repeat scroll 0 0 #FFFFFF";
    canvas.style.border = "1px solid #CCCCCC";
    canvas.style.marginBottom = "10px";
    canvas.style.padding = "3px";
    
    if(!canvas.getContext) return;
    
    var context = canvas.getContext('2d');
    context.drawImage(image, 0, 0);
    
    var imageData = context.getImageData(0, 0, image.width, image.height);
    var data = imageData.data;
    
    for(var yIndex = 0; yIndex < YMAX; yIndex++) {
    	for(var xIndex = 0; xIndex < XMAX; xIndex++) {
    		if(isRetire[xIndex][yIndex]) {
    			var adjustY = (xIndex % 2 == 1) ? (41.1428571428571 / 2) : 0;
    			var cx = Math.floor(59 + xIndex * 35.625);
    			var cy = Math.floor(145 + yIndex * 41.1428571428571 - adjustY);
    			var top = Math.floor(Math.sin(Math.PI / 3) * 22);
    			var left = Math.floor(Math.sin(Math.PI / 6) * 22);
    
    			for(var py = -top; py <= top; py++) {
    				var sx = Math.floor(-22 + (Math.abs(py) / 19.0) * (22 - left));
    				for(var px = sx; px < -sx; px++) {
    					var x = cx + px;
    					var y = cy + py;
    
    					var base = (y * image.width + x) * 4;
    					var glay = (data[base + 0] + data[base + 1] + data[base + 2]) / 3 * 0.7;
    					data[base + 0] = glay;
    					data[base + 1] = glay;
    					data[base + 2] = glay;
    				}
    			}
    		}
    	}
    }
    
    context.putImageData(imageData, 0, 0);
    
    container.insertBefore(canvas, image);
    container.removeChild(image);
    
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2010/12/11 01:47:45 - 2010-12-11
  2. 2010/12/11 00:13:59 - 2010-12-11
  3. 2010/12/11 00:13:33 - 2010-12-11
  4. 2010/12/11 00:02:58 - 2010-12-11