🏠 返回首頁 

FC 3D Image Tool beta

Fotocommunity Image Tool for 3D Images beta


Install this script?
// ==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';
}