So Update, jetzt erzeugt es einzelne Seiten... mit Überschneidung etc. allerdings etwas Platzverschwendung (auf Nummer-Sicher gehen dass da keine zweite Seite erzeugt wird wenn die Seite zu groß ist).
...ob die Umrechnung korrekt funktioniert weiß ich noch nicht 100%ig, vielleicht will das jemand ausprobieren.Edit: Scheint zu passen. Wichtig ist natürlich, dass man irgendwelche re-Skallierung abschaltet, ggf. irgendwelche Kopf- und Fußzeilen deaktiviert und wenn der Browser/Druckertreiber es zulässt auch Seitenränder minimal einstellt. Vielleicht braucht's 2-4 Versuche um das Tool adäquat zu bedienen, aber ich denke kompliziert ist es nicht.
Bedienung wie vorher, Bild laden, Richtung auswählen, 2x klicken, Distanz eingeben. Ich empfehle einfach Kästchen zu zählen und die Größe in Zoll (in) einzugeben. Ohne Angabe der Einheit werden cm angenommen, Nachkommastellen möglich.
Quellcode und Lizenzen:
Spoiler (Anzeigen)/*===================================================*\
| |
| Multilicence. |
| Developer: DeusFigendi <deusfigendi@dnd-gate.de> |
| © 2011 |
| |
|-----------------------------------------------------|
| "THE BEER-WARE LICENSE" (Revision 42): |
|-----------------------------------------------------|
| DeusFigendi wrote this file. As long as you retain |
| this notice you can do whatever you want with this |
| stuff. If we meet some day, and you think this stuff|
| is worth it, you can buy me a beer in return |
| |
| Deus Figendi |
|-----------------------------------------------------|
| |
| |
|-----------------------------------------------------|
| HUGWARE |
|-----------------------------------------------------|
| This program is hugware. To register your copy of |
| this program, you must find someone and give them a |
| hug. Simple, isn't it? People are invited to |
| register their software as many times as they like. |
| :-) |
|-----------------------------------------------------|
| |
| |
|-----------------------------------------------------|
| Additional: |
|-----------------------------------------------------|
| You are allowed to use and/or copy this program |
| under the conditions of one or both of these |
| licences. You don't have to fullfill both, but you |
| may do so. |
\*===================================================*/
function image_messure(event_object) {
messure_object.pos[Math.round(messure_object.clickCount % 2)].x = event_object.pageX;
messure_object.pos[Math.round(messure_object.clickCount % 2)].y = event_object.pageY;
if (Math.round(messure_object.clickCount % 2) == 1) {
if (document.getElementById("dir_span").firstChild.data == "horizontal") {
var distance_pixel = Math.abs(messure_object.pos[1].x - messure_object.pos[0].x);
} else if (document.getElementById("dir_span").firstChild.data == "vertikal") {
var distance_pixel = Math.abs(messure_object.pos[1].y - messure_object.pos[0].y);
} else {
var distance_pixel = Math.sqrt(Math.pow(messure_object.pos[1].y - messure_object.pos[0].y , 2) + Math.pow(messure_object.pos[1].x - messure_object.pos[0].x , 2));
}
var distance_real = "Distanz";
while (!/^\d+(\.?\d+)?(cm|in|mm)$/.test(distance_real)) {
distance_real = prompt("Welcher Distanz entspricht das?",distance_real);
distance_real = distance_real.replace(/\s/,"");
distance_real = distance_real.replace(/,/,".");
distance_real = distance_real.replace(/[^0-9cimn\.]/g,"");
if (/^\d+\.?\d*$/.test(distance_real)) {
distance_real += "cm";
}
}
dist_real_value = distance_real.match(/^[\d\.]*/)[0];
dist_real_unit = distance_real.match(/(cm|in|mm)$/)[0];
// target
// currentTarget
// rangeParent
// relatedTarget
// explicitOriginalTarget
//event_object.originalTarget.width = dist_real_value
var my_width = ((dist_real_value * (event_object.originalTarget.width / distance_pixel)));
var my_height = ((dist_real_value * (event_object.originalTarget.height / distance_pixel)));
event_object.originalTarget.style.width = my_width+dist_real_unit;
event_object.originalTarget.style.height = my_height+dist_real_unit;
for (var i = 0; i < document.getElementsByTagName("body")[0].childNodes.length; i++) {
if (document.getElementsByTagName("body")[0].childNodes[i].nodeType == 1) {
document.getElementsByTagName("body")[0].childNodes[i].style.display = "none";
}
}
//alert("my_width: "+my_width+dist_real_unit);
var my_width_cm = my_width;
if (dist_real_unit == "in") { my_width_cm=my_width_cm*2.54; }
if (dist_real_unit == "mm") { my_width_cm=my_width_cm*0.1; }
var my_height_cm = my_height;
if (dist_real_unit == "in") { my_height_cm=my_height_cm*2.54; }
if (dist_real_unit == "mm") { my_height_cm=my_height_cm*0.1; }
//alert("my_width: "+my_width+dist_real_unit+"\nmy_width_cm: "+my_width_cm+"cm");
var new_divs = new Array();
var new_imgs = new Array();
var ij = 0;
for (var i = 0; i*25 < my_height_cm; i++) {
for (var j = 0; j*18 < my_width_cm; j++) {
new_divs[ij] = document.createElement("div");
new_divs[ij].style.width = "20.5cm";
new_divs[ij].style.height = "29cm";
//new_divs[ij].style.backgroundColor = "#17f";
new_divs[ij].style.pageBreakAfter = "always";
new_divs[ij].style.overflow = "hidden";
new_imgs[ij] = document.createElement("img");
new_imgs[ij].src = event_object.originalTarget.src;
new_imgs[ij].style.width = my_width+dist_real_unit;
new_imgs[ij].style.height = my_height+dist_real_unit;
new_imgs[ij].style.marginLeft = "-"+(j*18)+"cm";
new_imgs[ij].style.marginTop = "-"+(i*25)+"cm";
new_divs[ij].appendChild(new_imgs[ij]);
document.getElementsByTagName("body")[0].appendChild(new_divs[ij]);
ij++;
}
}
}
messure_object.clickCount++;
}
function load_image() {
var my_image = document.createElement("img");
my_image.src = document.getElementById("src_uri").value;
my_image.style.display = "block";
my_image.id = "messure_image";
my_image.addEventListener("click", function(e) { image_messure(e); } ,false);
document.getElementsByTagName("body")[0].appendChild(my_image);
}
function change_dir() {
var dir_span = document.getElementById("dir_span");
if (dir_span.firstChild.data == "horizontal") {
dir_span.firstChild.data = "vertikal";
} else if (dir_span.firstChild.data == "vertikal") {
dir_span.firstChild.data = "diagonal";
} else {
dir_span.firstChild.data = "horizontal";
}
}
var adress_input = document.createElement("input");
adress_input.type = "text";
adress_input.id = "src_uri";
//adress_input.value = "Hier bitte die URL des Bildes einfuegen";
adress_input.style.width = "20em";
var adress_input2 = document.createElement("input");
adress_input2.type = "button";
adress_input2.value = "laden";
adress_input2.addEventListener("click", function(e) { load_image(); } ,false);
document.getElementsByTagName("body")[0].appendChild(adress_input);
document.getElementsByTagName("body")[0].appendChild(adress_input2);
var erklaerabsatz = document.createElement("p");
var direction = document.createElement("span");
direction.appendChild(document.createTextNode("horizontal"));
direction.id="dir_span";
direction.style.color="blue";
direction.addEventListener("click", function(e) { change_dir(); } ,false);
erklaerabsatz.appendChild(document.createTextNode("Lade zunaechst ein Bild und klicke dann auf zwei Stellen darin, von denen du den Abstand nennen kannst. Waehle am Besten zwei Punkte, die weit auseinander liegen, so gehen Ungenauigkeiten besser verloren. Es wird nur "));
erklaerabsatz.appendChild(direction);
erklaerabsatz.appendChild(document.createTextNode(" gemessen."));
document.getElementsByTagName("body")[0].appendChild(erklaerabsatz);
messure_object = new Object();
messure_object.clickCount = 0;
messure_object.pos = new Array(new Object(),new Object());