首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用html5和javascript在图像上建立网格

使用html5和javascript在图像上建立网格
EN

Stack Overflow用户
提问于 2015-07-24 18:24:00
回答 2查看 1.3K关注 0票数 2

我有一张4000 by乘3000 by的图片。我希望在html页面上显示此图像,并允许用户在此图像上选择坐标。

实际上,我必须从这个复制:ion=GB&cid=2ca08b9b-4717-474c-b5ec-1e6a40df6d54&play=1

(请注册并查看此元素。免费注册)

实际上,我想以700x500pxdiv大小显示这个4000x3000px图片,但是用户应该能够选择图片中相对于实际大小的坐标,即4000x3000px。

缩放像素的简单方法的问题是,用户只能从缩小的像素中选择坐标。我希望用户能够从4000*3000种可能性中选择一个坐标。

我怎样才能将一个大尺寸的图像固定到这个尺寸中,并使放大工具就像上面的那个一样?是否可以使用html5画布?

如果您可以为此共享任何jquery插件,那么我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-24 20:59:05

25%大小的图像:

放大截面的图像(放大截面尺寸为100% )

当用户将鼠标按在他们想要的放大点上时,这里的代码可以放大图像。

代码使用第二个覆盖画布来显示放大(全尺寸)图像的一部分。

示例代码和演示:

这个开始的示例使用一个固定大小的放大视图端口,但是您可以进行调整,让用户使用mousedown+mouseup来定义可变大小的视图。

代码语言:javascript
复制
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
function reOffset(){
  var BB=canvas.getBoundingClientRect();
  offsetX=BB.left;
  offsetY=BB.top;        
}
var offsetX,offsetY;
reOffset();
window.onscroll=function(e){ reOffset(); }
window.onresize=function(e){ reOffset(); }

var magifier=document.getElementById("magnifier");
var mctx=magnifier.getContext("2d");

var $magnifier=$('#magnifier');
var mw=100;
var mh=100;
var downscale=0.25;
var upscale=1/downscale;
var iw,ih;
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/soccer.jpg";
function start(){
  magnify();
  iw=img.width;
  ih=img.height;
  cw=canvas.width=iw*downscale;
  ch=canvas.height=ih*downscale;
  ctx.drawImage(img,0,0,cw,ch);
  $("#canvas").mousedown(function(e){handleMouseDown(e);});
  $("#canvas,#magnifier").mouseup(function(e){handleMouseUp(e);});
}

function magnify(x,y){
  if(!x){$magnifier.css({left:-999}); return;};
  $magnifier.css({left:x-mw/2,top:y-mh/2});
  mctx.clearRect(0,0,mw,mh);
  mctx.drawImage(img,-(x)*upscale+mw/2,-(y)*upscale+mh/2);
}


function handleMouseDown(e){
  // tell the browser we're handling this event
  e.preventDefault();
  e.stopPropagation();

  var x=parseInt(e.clientX-offsetX);
  var y=parseInt(e.clientY-offsetY);

  magnify(x,y);
}

function handleMouseUp(e){
  // tell the browser we're handling this event
  e.preventDefault();
  e.stopPropagation();
  magnify();
}
代码语言:javascript
复制
body{ background-color: ivory; }
#container{position:relative;}
#canvas{position:absolute;border:1px solid red;}
#magnifier{position:absolute;border:3px solid blue;}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Hold mouse down for magnified view.</h4>
<div id=container>
  <canvas id="canvas" width=300 height=300></canvas>
  <canvas id="magnifier" width=100 height=100></canvas>
</div>

票数 1
EN

Stack Overflow用户

发布于 2015-07-24 19:20:47

也许像这样,你也可以用它来计算与原始大小的比率,只需做乘法。

代码语言:javascript
复制
var element = document.getElementById("box");
element.onmousemove = function(e) {
  var x = e.pageX - this.offsetLeft;
  var y = e.pageY - this.offsetTop;

  show(x, y);
}

function show(x, y) {
  coords.innerHTML = "(" + x + "," + y + ")";
}
代码语言:javascript
复制
#box {
  border: 2px solid black;
  background: lightblue;
  width: 200px;
  height: 150px;
  cursor: crosshair;
  
  background-image: url('http://lorempixel.com/200/150/');
}
body {
  margin: 10px;
}
代码语言:javascript
复制
Coords <span id="coords">(X,Y)</span>
<div id="box"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31617313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档