<html>
	<meta http-equiv="content-type" charset="utf-8">
	<head>
		<title>読み込んだ画像にボカシを入れる</title>
		<link rel="icon" href="/favicon.ico">
		<meta http-equiv="Expires" content="0">
		</head>
	<body>
		
		<input id="target" type="file" onchange="inputChange()">
		<span id="PasteBox" contenteditable="true">ここに画像をペースト</span>
		<br>
		<span id="codestep">???</span><br>
		<input type="text" id="size" value="5" ><br>
		<br>
		↓ 対象画像を編集 ↓<br>
		<canvas id="CanvasID" width="460" height="460"></canvas><br>

	<script language="JavaScript">
		
		function SetPix( Pixels , PosY , PosX , width , R , G , B ) {
			
			var Pos = width * PosY + PosX;

			Pixels[Pos * 4 + 0] = R; // R
			Pixels[Pos * 4 + 1] = G; // G
			Pixels[Pos * 4 + 2] = B; // B
			Pixels[Pos * 4 + 3] = 255; // Alpha

		}

		// 画像編集
		function EditImage( ctx , width , height ) {

			var WrkSize =  Number(document.getElementById('size').value);

			//document.getElementById("codestep").innerHTML += 'C';
			// キャンバス全体のピクセル情報を取得
			var imageData = ctx.getImageData(0, 0 , width , height );
			//document.getElementById("codestep").innerHTML += 'D';
			var Pixels = imageData.data;  // ピクセル配列:RGBA4要素で1ピクセル

			for (var PosY = 0; PosY < height; PosY+=WrkSize ) {
  				for (var PosX = 0; PosX < width; PosX+=WrkSize ) {

					var R = Pixels[ (width * PosY + PosX) * 4 + 0 ];
					var G = Pixels[ (width * PosY + PosX) * 4 + 1 ];
					var B = Pixels[ (width * PosY + PosX) * 4 + 2 ];

					for (var OffY = 0; OffY < WrkSize; ++OffY ) {
						for (var OffX = 0; OffX < WrkSize; ++OffX ) {
							SetPix( Pixels , PosY + OffY , PosX + OffX , width , R , G , B );
						}
					}

				}
			}
			
			// 変更した内容をキャンバスに書き戻す
			ctx.putImageData(imageData, 0, 0);

		};

		// 画像表示
		function ViewImage( BlobUrl ) {

			const chara = new Image();
			chara.src = BlobUrl;  // 画像のURLを指定
			chara.onload = () => {
				var cvs = document.getElementById("CanvasID");
				var ctx = cvs.getContext("2d");

				cvs.width = chara.naturalWidth ;
				cvs.height = chara.naturalHeight ;

				ctx.drawImage(chara, 0, 0 );

				EditImage( ctx , cvs.width , cvs.height );
			};
			
		};

		// 貼り付けからイメージ取得
		document.querySelector("[contenteditable]").addEventListener("paste", function (e) {
			var PasteItems = e.clipboardData.items;
			for (var Idx = 0; Idx < PasteItems.length; Idx++) {
				if (PasteItems[Idx].type.indexOf("image") === 0) {
					var BlobUrl = URL.createObjectURL(PasteItems[Idx].getAsFile());
					document.getElementById("PasteBox").innerHTML = 'ここに画像をペースト'; // いろいろ弄れてしまうので戻しておく

					// 画像表示
					ViewImage( BlobUrl );

					return;
				}
			}

		});
		
		// ローカルファイルからイメージ選択
		function inputChange() {

			// 画像表示
			ViewImage( window.URL.createObjectURL( document.getElementById("target").files[0] ) );
			
		}

	</script>
	
	</body>
</html>
<< 広告 >>