Fotocommunity Image Tool for 3D Images beta
// ==UserScript== // @name FC 3D Image Tool beta // @namespace http://userscripts.org/users/75950 // @description Fotocommunity Image Tool for 3D Images beta // @include http://www.fotocommunity.de/*/display/* // @version 0.0.1.20140527152834 // ==/UserScript== window.addEventListener('load', startUp, false); var ctx = null; var theImage = null; var flipped = false; var theCenter = 0; var linesshown = false; var isredcyan = false; var isinterlaced = false; var ismonochrom = false; var sfIsOriginal = 'original'; var sfOffset = 0; var preselect = ''; function detectPage() { if(preselect != '') return preselect; if(location.href.indexOf('/5584/') != -1) return 'kreuz'; if(location.href.indexOf('/5585/') != -1) return 'parallel'; if(location.href.indexOf('/2616/') != -1) return 'anaglyph'; return 'sonstige'; } function startUp() { switch(detectPage()) { case 'kreuz': case 'parallel': case 'anaglyph': createCanvas(); break; case 'sonstige': createLinks(); break; default: break; } } function createLinks() { var newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_label'; var theText = document.createTextNode('Bei diesem Foto handelt es sich um ein: '); newSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_kreuz'; var newAnchor = document.createElement('a'); newAnchor.href = '#'; theText = document.createTextNode('Kreuzblickstereo'); newAnchor.appendChild(theText); newSpan.appendChild(newAnchor); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); document.getElementById('fc_links_kreuz').addEventListener('click', function() { preselect = 'kreuz'; removeLinks(); createCanvas(); return false; }, false); newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_sep1'; theText = document.createTextNode('/'); newSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_parallel'; newAnchor = document.createElement('a'); newAnchor.href = '#'; theText = document.createTextNode('Parallelblickstereo'); newAnchor.appendChild(theText); newSpan.appendChild(newAnchor); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); document.getElementById('fc_links_parallel').addEventListener('click', function() { preselect = 'parallel'; removeLinks(); createCanvas(); return false; }, false); newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_sep2'; theText = document.createTextNode('/'); newSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); newSpan = document.createElement('span'); newSpan.style.paddingRight = '5px'; newSpan.id = 'fc_links_anaglyph'; newAnchor = document.createElement('a'); newAnchor.href = '#'; theText = document.createTextNode('Anaglyphenstereo'); newAnchor.appendChild(theText); newSpan.appendChild(newAnchor); document.getElementById('display_foto').insertBefore(newSpan, document.getElementById('fc_image')); document.getElementById('fc_links_anaglyph').addEventListener('click', function() { preselect = 'anaglyph'; removeLinks(); createCanvas(); return false; }, false); } function removeLinks() { document.getElementById('fc_links_label').parentNode.removeChild(document.getElementById('fc_links_label')); document.getElementById('fc_links_kreuz').parentNode.removeChild(document.getElementById('fc_links_kreuz')); document.getElementById('fc_links_sep1').parentNode.removeChild(document.getElementById('fc_links_sep1')); document.getElementById('fc_links_parallel').parentNode.removeChild(document.getElementById('fc_links_parallel')); document.getElementById('fc_links_sep2').parentNode.removeChild(document.getElementById('fc_links_sep2')); document.getElementById('fc_links_anaglyph').parentNode.removeChild(document.getElementById('fc_links_anaglyph')); } function createCanvas() { theImagesrc = document.getElementById('fc_image').src; GM_xmlhttpRequest({ method: 'GET', url: theImagesrc, overrideMimeType: 'text/plain; charset=x-user-defined', onload: function ( xhr ) { var data = ''; theImage = new Image(); for ( var i = 0; i < xhr.responseText.length; i++ ) data += String.fromCharCode( ( xhr.responseText[ i ].charCodeAt(0) & 0xff ) ); // Convert raw data to base64. data = btoa( data ); // Write Base64 data to a image theImage.src = 'data:image/jpg;base64,' + data; // This will change depending on image type // Listener fires when image is ready theImage.addEventListener( 'load', function() { GM_addStyle('canvas {position: relative; text-align:center; left: '+window.getComputedStyle(document.getElementById('fc_image'),false).left+';} #showwait {position: fixed; top: 200px; left: 490px; padding: 3px; width: 100px; border: 1px solid black; z-index: 10000; color: black; background-color: white;}'); var newCanvas = unsafeWindow.document.createElement('canvas'); newCanvas.id = 'fc_image_canvas'; newCanvas.width = document.getElementById('fc_image').width; newCanvas.height = document.getElementById('fc_image').height; if(detectPage() == 'anaglyph') newCanvas.style.display = 'none'; unsafeWindow.document.getElementById('display_foto').insertBefore(newCanvas, unsafeWindow.document.getElementById('fc_image')); var canvas = unsafeWindow.document.getElementById('fc_image_canvas'); ctx = canvas.getContext('2d'); ctx.drawImage(theImage, 0, 0 ); theCenter = Math.floor(theImage.width / 2); }, false ); } }); if(detectPage() != 'anaglyph') { document.getElementById('fc_image').style.display = 'none'; var theButton = document.createElement('input'); theButton.id = 'fc_image_flip'; theButton.type = 'button'; if(detectPage() == 'kreuz') { theButton.value = '-> Parallelblick'; } else { theButton.value = '-> Kreuzblick'; } document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_flip').addEventListener('click', flipImage, false); theButton = document.createElement('input'); theButton.id = 'fc_image_showline'; theButton.type = 'button'; theButton.value = 'Hilfslinien'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_showline').addEventListener('click', showLine, false); theButton = document.createElement('input'); theButton.id = 'fc_image_redcyan'; theButton.type = 'button'; theButton.style.marginLeft = '10px'; theButton.value = 'Red/Cyan'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_redcyan').addEventListener('click', showWait, false); var theCheckbox = document.createElement('input'); theCheckbox.id = 'fc_image_halftone'; theCheckbox.type = 'checkbox'; theCheckbox.checked = false; document.getElementById('display_foto').insertBefore(theCheckbox, document.getElementById('fc_image')); document.getElementById('fc_image_halftone').addEventListener('click', toggleHalftone, false); var theSpan = document.createElement('span'); theSpan.id = 'fc_image_halftonelabel'; var theText = document.createTextNode('Halbton'); theSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(theSpan, document.getElementById('fc_image')); theButton = document.createElement('input'); theButton.id = 'fc_image_interlaced'; theButton.type = 'button'; theButton.style.marginLeft = '10px'; theButton.value = 'Zalman Interlaced'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_interlaced').addEventListener('click', showWaitInterlaced, false); theCheckbox = document.createElement('input'); theCheckbox.id = 'fc_image_interlaceswitch'; theCheckbox.type = 'checkbox'; theCheckbox.checked = false; document.getElementById('display_foto').insertBefore(theCheckbox, document.getElementById('fc_image')); document.getElementById('fc_image_interlaceswitch').addEventListener('click', toggleInterlace, false); theSpan = document.createElement('span'); theSpan.id = 'fc_image_iswitchlabel'; theText = document.createTextNode('gerade/ungerade tauschen'); theSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(theSpan, document.getElementById('fc_image')); var newDiv = document.createElement('div'); newDiv.id = 'showwait'; var theText = document.createTextNode('Bitte warten...'); newDiv.appendChild(theText); document.getElementById('display_foto').appendChild(newDiv); document.getElementById('showwait').style.display = 'none'; } else { var theSpan = document.createElement('span'); theSpan.id = 'fc_image_sfOffsetLabel'; theSpan.style.paddingRight = '5px'; var theText = document.createTextNode('Horiz. Verschiebung: '); theSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(theSpan, document.getElementById('fc_image')); theSpan = document.createElement('span'); theSpan.id = 'fc_image_sfOffset'; theSpan.style.paddingRight = '5px'; theText = document.createTextNode(sfOffset.toString()); theSpan.appendChild(theText); document.getElementById('display_foto').insertBefore(theSpan, document.getElementById('fc_image')); var theButton = document.createElement('input'); theButton.id = 'fc_image_monokreuz'; theButton.type = 'button'; theButton.value = 'Monochrom Kreuzblick'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_monokreuz').addEventListener('click', showWaitMono, false); theButton = document.createElement('input'); theButton.id = 'fc_image_scheinfenster'; theButton.type = 'button'; theButton.value = 'Scheinfenster'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image')); document.getElementById('fc_image_scheinfenster').addEventListener('click', scheinFenster, false); var newDiv = document.createElement('div'); newDiv.id = 'showwait'; var theText = document.createTextNode('Bitte warten...'); newDiv.appendChild(theText); document.getElementById('display_foto').appendChild(newDiv); document.getElementById('showwait').style.display = 'none'; } } function scheinFenster() { if(!ctx) return; if(sfIsOriginal=='original') { document.getElementById('fc_image').style.display = 'none'; document.getElementById('fc_image_monokreuz').style.display = 'none'; document.getElementById('fc_image_canvas').style.display = ''; var theButton = document.createElement('input'); theButton.id = 'fc_image_ziehen'; theButton.type = 'button'; theButton.value = 'Scheinfenster ziehen'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_canvas')); document.getElementById('fc_image_ziehen').addEventListener('click', ###iehen, false); theButton = document.createElement('input'); theButton.id = 'fc_image_druecken'; theButton.type = 'button'; theButton.value = 'Scheinfenster druecken'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_canvas')); document.getElementById('fc_image_druecken').addEventListener('click', sfDruecken, false); theButton = document.createElement('input'); theButton.id = 'fc_image_reset'; theButton.type = 'button'; theButton.value = 'Reset'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_canvas')); document.getElementById('fc_image_reset').addEventListener('click', sfReset, false); sfDrawLines(); document.getElementById('fc_image_scheinfenster').value = 'Anwenden'; sfIsOriginal = 'verschoben'; } else { if(sfIsOriginal == 'verschoben') { ctx.drawImage(theImage, 0, 0); document.getElementById('showwait').style.display = ''; window.setTimeout(redrawAnaglyph, 300); } else { // neuanaglyph (Button Original gedrueckt) document.getElementById('fc_image_scheinfenster').value = 'Scheinfenster'; document.getElementById('fc_image').style.display = ''; document.getElementById('fc_image_monokreuz').style.display = ''; document.getElementById('fc_image_canvas').style.display = 'none'; document.getElementById('fc_image_canvas2').parentNode.removeChild(document.getElementById('fc_image_canvas2')); sfIsOriginal = 'original'; } } } function redrawAnaglyph() { // Scheinfensterverschiebung anwenden if(sfOffset!=0) { var newCanvas = unsafeWindow.document.createElement('canvas'); newCanvas.id = 'fc_image_canvas2'; newCanvas.width = theImage.width*2; newCanvas.height = theImage.height; unsafeWindow.document.getElementById('display_foto').insertBefore(newCanvas, unsafeWindow.document.getElementById('fc_image_canvas')); var canvas = unsafeWindow.document.getElementById('fc_image_canvas2'); ctx2 = canvas.getContext('2d'); if(sfOffset<0) { ctx2.drawImage(unsafeWindow.document.getElementById('fc_image_canvas'), theImage.width, 0); // rechts ctx2.drawImage(unsafeWindow.document.getElementById('fc_image_canvas'), sfOffset, 0); // links var theImageData_links = ctx2.getImageData(0, 0, theImage.width+sfOffset, theImage.height); var theImageData_rechts = ctx2.getImageData(theImage.width, 0, theImage.width+sfOffset, theImage.height); } else { ctx2.drawImage(unsafeWindow.document.getElementById('fc_image_canvas'), theImage.width+sfOffset, 0); // rechts ctx2.drawImage(unsafeWindow.document.getElementById('fc_image_canvas'), sfOffset, 0); // links var theImageData_links = ctx2.getImageData(sfOffset, 0, theImage.width-2*sfOffset, theImage.height); var theImageData_rechts = ctx2.getImageData(theImage.width+2*sfOffset, 0, theImage.width-2*sfOffset, theImage.height); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; for (var i = 0, n = pixels_links.length; i < n; i += 4) { pixels_links[i] = pixels_links[i]; // rot vom linken Bild, blau und gruen vom rechten pixels_links[i+1] = pixels_rechts[i+1]; pixels_links[i+2] = pixels_rechts[i+2]; // Rechtes Teilbild in FC Farben pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; } // Draw the ImageData at the given (x,y) coordinates. ctx2.putImageData(theImageData_links, 0, 0); ctx2.putImageData(theImageData_rechts, theImage.width, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; document.getElementById('showwait').style.display = 'none'; sfIsOriginal = 'neuanaglyph'; sfRemoveButtons(); document.getElementById('fc_image_scheinfenster').value = 'Original'; document.getElementById('fc_image').style.display = 'none'; document.getElementById('fc_image_monokreuz').style.display = 'none'; document.getElementById('fc_image_canvas').style.display = 'none'; } else { document.getElementById('showwait').style.display = 'none'; sfIsOriginal = 'original'; sfRemoveButtons(); document.getElementById('fc_image_scheinfenster').value = 'Scheinfenster'; document.getElementById('fc_image').style.display = ''; document.getElementById('fc_image_monokreuz').style.display = ''; document.getElementById('fc_image_canvas').style.display = 'none'; } } function sfDrawLines() { if(sfOffset>=0) { // linker Rand ctx.beginPath(); ctx.moveTo(sfOffset, 0); ctx.lineTo(sfOffset, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 1)"; ctx.stroke(); } if(sfOffset<=0) { // rechter Rand ctx.beginPath(); ctx.moveTo(theImage.width+sfOffset, 0); ctx.lineTo(theImage.width+sfOffset, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 1)"; ctx.stroke(); } document.getElementById('fc_image_sfOffset').textContent = sfOffset.toString(); } function sfRemoveButtons() { document.getElementById('fc_image_scheinfenster').value = 'Scheinfenster'; var theButton = document.getElementById('fc_image_ziehen'); document.getElementById('display_foto').removeChild(theButton); theButton = document.getElementById('fc_image_druecken'); document.getElementById('display_foto').removeChild(theButton); theButton = document.getElementById('fc_image_reset'); document.getElementById('display_foto').removeChild(theButton); document.getElementById('fc_image').style.display = ''; document.getElementById('fc_image_monokreuz').style.display = ''; document.getElementById('fc_image_canvas').style.display = 'none'; } function ###iehen() { sfOffset--; ctx.drawImage(theImage, 0, 0); sfDrawLines(); } function sfDruecken() { sfOffset++; ctx.drawImage(theImage, 0, 0); sfDrawLines(); } function sfReset() { sfOffset = 0; ctx.drawImage(theImage, 0, 0); sfDrawLines(); } function showWaitMono() { if(!ctx) return; document.getElementById('showwait').style.display = 'block'; window.setTimeout(monoKreuz, 300); } function monoKreuz() { if(!ismonochrom) { document.getElementById('fc_image').style.display = 'none'; document.getElementById('fc_image_scheinfenster').style.display = 'none'; var newCanvas = unsafeWindow.document.createElement('canvas'); newCanvas.id = 'fc_image_canvas2'; newCanvas.width = theImage.width+20; newCanvas.height = Math.floor(theImage.height/2)+1; unsafeWindow.document.getElementById('display_foto').insertBefore(newCanvas, unsafeWindow.document.getElementById('fc_image_canvas')); var canvas = unsafeWindow.document.getElementById('fc_image_canvas2'); ctx2 = canvas.getContext('2d'); ctx2.drawImage(document.getElementById('fc_image_canvas'), 0, 0, Math.floor(theImage.width/2), Math.floor(theImage.height/2) ); ctx2.drawImage(document.getElementById('fc_image_canvas'), Math.floor(theImage.width/2)+20, 0, Math.floor(theImage.width/2), Math.floor(theImage.height/2)); var theImageData = ctx2.getImageData(0, 0, Math.floor(theImage.width/2), Math.floor(theImage.height/2)); var pixels = theImageData.data; for (var i = 0, n = pixels.length; i < n; i += 4) { var theGray = Math.floor((pixels[i+1]+pixels[i+2])/2); pixels[i] = theGray; pixels[i+1] = theGray; pixels[i+2] = theGray; } ctx2.putImageData(theImageData, 0, 0); delete theImageData; theImageData = null; theImageData = ctx2.getImageData(Math.floor(theImage.width/2)+20, 0, Math.floor(theImage.width/2), Math.floor(theImage.height/2)); pixels = theImageData.data; for (var i = 0, n = pixels.length; i < n; i += 4) { pixels[i+1] = pixels[i]; pixels[i+2] = pixels[i]; } ctx2.putImageData(theImageData, Math.floor(theImage.width/2)+20, 0); delete theImageData; theImageData = null; ismonochrom = true; document.getElementById('fc_image_monokreuz').value = 'Original'; } else { var CanvasToDelete = document.getElementById('fc_image_canvas2'); CanvasToDelete.parentNode.removeChild(CanvasToDelete); document.getElementById('fc_image').style.display = ''; document.getElementById('fc_image_scheinfenster').style.display = ''; ismonochrom = false; document.getElementById('fc_image_monokreuz').value = 'Monochrom Kreuzblick'; } document.getElementById('showwait').style.display = 'none'; } function toggleHalftone() { isredcyan = false; } function toggleInterlace() { isinterlaced = false; } function flipImage() { if(!ctx) return; if(linesshown) { RemoveButtons(); linesshown = false; } if(!flipped) { // Paste image two times // First image is moved half way to the left // second image is moved half way to the right ctx.drawImage(theImage, -theCenter, 0); ctx.drawImage(theImage, theCenter, 0); flipped = true; } else { ctx.drawImage(theImage, 0, 0); flipped = false; } ButtonText(); isredcyan = false; isinterlaced = false; } function ButtonText() { var theButton = document.getElementById('fc_image_flip'); if(detectPage() == 'kreuz') { if(flipped) { theButton.value = '-> Kreuzblick'; } else { theButton.value = '-> Parallelblick'; } } else { if(flipped) { theButton.value = '-> Parallelblick'; } else { theButton.value = '-> Kreuzblick'; } } } function showLine() { if(!ctx) return; ctx.drawImage(theImage, 0, 0); flipped = false; ButtonText(); isredcyan = false; isinterlaced = false; if(!linesshown) { // linker Rand ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(0, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // rechter Rand ctx.beginPath(); ctx.moveTo(theImage.width, 0); ctx.lineTo(theImage.width, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // Mitte ctx.beginPath(); ctx.moveTo(theCenter, 0); ctx.lineTo(theCenter, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 0.5)"; ctx.stroke(); var theButton = document.createElement('input'); theButton.id = 'fc_image_left'; theButton.type = 'button'; theButton.value = '<'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_redcyan')); document.getElementById('fc_image_left').addEventListener('click', moveLineLeft, false); theButton = document.createElement('input'); theButton.id = 'fc_image_right'; theButton.type = 'button'; theButton.value = '>'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_redcyan')); document.getElementById('fc_image_right').addEventListener('click', moveLineRight, false); theButton = document.createElement('input'); theButton.id = 'fc_image_center'; theButton.type = 'button'; theButton.value = 'Center'; document.getElementById('display_foto').insertBefore(theButton, document.getElementById('fc_image_redcyan')); document.getElementById('fc_image_center').addEventListener('click', moveLineCenter, false); document.getElementById('fc_image_showline').value = 'Hilfslinien ausblenden'; linesshown = true; } else { RemoveButtons(); linesshown = false; } } function RemoveButtons() { document.getElementById('fc_image_showline').value = 'Hilfslinien'; var theButton = document.getElementById('fc_image_left'); document.getElementById('display_foto').removeChild(theButton); theButton = document.getElementById('fc_image_right'); document.getElementById('display_foto').removeChild(theButton); theButton = document.getElementById('fc_image_center'); document.getElementById('display_foto').removeChild(theButton); } function moveLineLeft() { ctx.drawImage(theImage, 0, 0); theCenter--; if(theCenter<0) theCenter = 0; // linker Rand ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(0, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // rechter Rand ctx.beginPath(); ctx.moveTo(theImage.width, 0); ctx.lineTo(theImage.width, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // Mitte ctx.beginPath(); ctx.moveTo(theCenter, 0); ctx.lineTo(theCenter, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 0.5)"; ctx.stroke(); } function moveLineRight() { ctx.drawImage(theImage, 0, 0); theCenter++; if(theCenter>(theImage.width-1)) theCenter = theImage.width-1; // linker Rand ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(0, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // rechter Rand ctx.beginPath(); ctx.moveTo(theImage.width, 0); ctx.lineTo(theImage.width, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // Mitte ctx.beginPath(); ctx.moveTo(theCenter, 0); ctx.lineTo(theCenter, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 0.5)"; ctx.stroke(); } function moveLineCenter() { ctx.drawImage(theImage, 0, 0); theCenter = Math.floor(theImage.width / 2); // linker Rand ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(0, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // rechter Rand ctx.beginPath(); ctx.moveTo(theImage.width, 0); ctx.lineTo(theImage.width, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(0, 255, 0, 0.5)"; ctx.stroke(); // Mitte ctx.beginPath(); ctx.moveTo(theCenter, 0); ctx.lineTo(theCenter, theImage.height); ctx.closePath(); ctx.strokeStyle = "rgba(255, 0, 0, 0.5)"; ctx.stroke(); } function showWait() { if(!ctx) return; if(isredcyan) return; document.getElementById('showwait').style.display = 'block'; var isHalftone = document.getElementById('fc_image_halftone').checked; if(!isHalftone) { window.setTimeout(makeAnaglyph, 300); } else { window.setTimeout(HalftoneAnaglyph, 300); } } function makeAnaglyph() { ctx.drawImage(theImage, 0, 0); flipped = false; ButtonText(); isredcyan = true; isinterlaced = false; if(linesshown) { RemoveButtons(); linesshown = false; } var centerDiff = theCenter - Math.floor(theImage.width / 2); if(detectPage() == 'kreuz') { // Kreuzblick // links muss rot weg, rechts muss gruen/blau weg if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; for (var i = 0, n = pixels_links.length; i < n; i += 4) { pixels_links[i] = pixels_rechts[i]; // rot vom rechten Bild blau und gruen vom linken // Rechtes Teilbild in FC Farben pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } else { // Parallelblick // links muss gruen/blau weg, rechts muss rot weg if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; for (var i = 0, n = pixels_links.length; i < n; i += 4) { pixels_links[i] = pixels_links[i]; // rot vom linken Bild, blau und gruen vom rechten pixels_links[i+1] = pixels_rechts[i+1]; pixels_links[i+2] = pixels_rechts[i+2]; // Rechtes Teilbild in FC Farben pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } document.getElementById('showwait').style.display = 'none'; } function HalftoneAnaglyph() { // A halftone algorithm from http://3dtv.at/Knowhow/AnaglyphComparison_en.aspx ctx.drawImage(theImage, 0, 0); flipped = false; ButtonText(); isredcyan = true; isinterlaced = false; if(linesshown) { RemoveButtons(); linesshown = false; } var centerDiff = theCenter - Math.floor(theImage.width / 2); if(detectPage() == 'kreuz') { // Kreuzblick // links muss rot weg, rechts muss gruen/blau weg if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; for (var i = 0, n = pixels_links.length; i < n; i += 4) { // pixels_links[i] = 0.7*pixels_rechts[i+1] + 0.3*pixels_rechts[i+2]; // rot halftone Wimmer pixels_links[i] = 0.299*pixels_rechts[i] + 0.587*pixels_rechts[i+1] + 0.114*pixels_rechts[i+2]; // rot halftone common // Rechtes Teilbild in FC Farben pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } else { // Parallelblick // links muss gruen/blau weg, rechts muss rot weg if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; for (var i = 0, n = pixels_links.length; i < n; i += 4) { // pixels_links[i] = 0.7*pixels_rechts[i+1] + 0.3*pixels_rechts[i+2]; // rot halftone Wimmer pixels_links[i] = 0.299*pixels_links[i] + 0.587*pixels_links[i+1] + 0.114*pixels_links[i+2]; // rot halftone common pixels_links[i+1] = pixels_rechts[i+1]; pixels_links[i+2] = pixels_rechts[i+2]; // Rechtes Teilbild in FC Farben pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } document.getElementById('showwait').style.display = 'none'; } function showWaitInterlaced() { if(!ctx) return; if(isinterlaced) return; document.getElementById('showwait').style.display = 'block'; window.setTimeout(makeInterlace, 300); } function makeInterlace() { var isSwitched = document.getElementById('fc_image_interlaceswitch').checked; ctx.drawImage(theImage, 0, 0); flipped = false; ButtonText(); isinterlaced = true; isredcyan = false; if(linesshown) { RemoveButtons(); linesshown = false; } var centerDiff = theCenter - Math.floor(theImage.width / 2); if(detectPage() == 'kreuz') { // Kreuzblick if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); var theWidth = theCenter; } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); var theWidth = theCenter-(centerDiff*2); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; var zeile = 1; var spalte = 0; if(isSwitched) zeile = 0; for (var i = 0, n = pixels_links.length; i < n; i += 4) { if(spalte == theWidth) { zeile++; spalte = 0; } if(zeile % 2 == 0) { // gerade Zeilen von rechts die ungeraden sind automatisch von links pixels_links[i] = pixels_rechts[i]; pixels_links[i+1] = pixels_rechts[i+1]; pixels_links[i+2] = pixels_rechts[i+2]; } // rechte Pixel zuruecksetzen pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; spalte++; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } else { // Parallelblick if(centerDiff<=0) { var theImageData_links = ctx.getImageData(0, 0, theCenter, theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter, theImage.height); var theWidth = theCenter; } else { var theImageData_links = ctx.getImageData(0, 0, theCenter-(centerDiff*2), theImage.height); var theImageData_rechts = ctx.getImageData(theCenter, 0, theCenter-(centerDiff*2), theImage.height); var theWidth = theCenter-(centerDiff*2); } var pixels_links = theImageData_links.data; var pixels_rechts = theImageData_rechts.data; var zeile = 1; var spalte = 0; if(isSwitched) zeile = 0; for (var i = 0, n = pixels_links.length; i < n; i += 4) { if(spalte == theWidth) { zeile++; spalte = 0; } if(zeile % 2 != 0) { // ungerade Zeilen von rechts die geraden sind automatisch von links pixels_links[i] = pixels_rechts[i]; pixels_links[i+1] = pixels_rechts[i+1]; pixels_links[i+2] = pixels_rechts[i+2]; } // rechte Pixel zuruecksetzen pixels_rechts[i] = 34; pixels_rechts[i+1] = 34; pixels_rechts[i+2] = 34; spalte++; } // Draw the ImageData at the given (x,y) coordinates. ctx.putImageData(theImageData_links, 0, 0); ctx.putImageData(theImageData_rechts, theCenter, 0); delete theImageData_links; theImageData_links = null; delete theImageData_rechts; theImageData_rechts = null; } document.getElementById('showwait').style.display = 'none'; }