制作画布镜像、缩放和旋转
Making canvas mirror, scale and rotate
我在这里遇到了一个非常棘手的问题。我的主要目标是尝试在CSS3中应用精确变换来制作图像的"精确"副本。我所做的,你可以看到此处
在左边,我有一个包含image标签的div,在右边,我试图用canvas元素来复制它。在顶部,您可以为左侧的原始区域选择控制选项。您可以通过在控制区域中设置值来旋转或缩放它。
现在尝试将其缩放到0.5并旋转45度。现在你可以看到图像被重新定位,也从四个侧面裁剪,我希望它和左边的一模一样。我在这里几乎没有试过数学,但我觉得我高估了一些非常基本的
为了制作副本,我正在使用以下脚本
function myCopy(){
var cache = document.getElementById('mimg');
var canvas = document.createElement('canvas');
var cxt = canvas.getContext("2d");
var ang = getRotationDegrees($("#mimg")) * Math.PI / 180;
var scle = getScaleValue($("#mimg"));
var p = $("#mimg").position();
var c_w = cache.width*scle;
var c_h = cache.height*scle;
canvas.width = c_w;
canvas.height = c_h;
cxt.save();
cxt.translate(c_w/2,c_h/2);
cxt.rotate(ang);
cxt.translate(-c_w/2,-c_h/2);
cxt.drawImage(cache,0,0,c_w,c_h);
var myData = cxt.getImageData(0, 0, c_w,c_h);
cxt.restore();
var dcan = document.getElementById("myCanvas");
var cxt1 = dcan.getContext('2d');
cxt1.save();
cxt1.fillStyle = "rgb(255,255,255)";
cxt1.fillRect(0,0,cache.width, cache.height);
cxt1.putImageData(myData,0,0,0,0,c_w,c_h);
cxt1.restore();
$("#holder").css("left",p.left);
$("#holder").css("top",p.top);
}
这是我左边区域(原始区域)的html结构
<div id="divclip" style="position:relative;width: 600px; height:600px;overflow: hidden;border: solid 1px black">
<div style="border: 1px solid red;display:inline-block">
<img id="mimg" class="clip-svg" src="1.png" alt="Harry Potter">
</div>
</div>
这里是右边的区域(从myCopy功能创建的副本)
<div style="position: absolute; left: 650px; top:35px;border:1px solid #d3d3d3;">
<div id="holder" style="position:relative; left: 0px; top: 0px;border:1px solid red;">
<canvas id="myCanvas" width="600" height="600" style="">
</canvas>
</div>
</div>
任何帮助都将不胜感激。
感谢
您通过用css移动holderdiv来定位复制的图像,而不是使用putImageData参数来定位它。
我建议删除这些:
$("#holder").css("left",p.left);
$("#holder").css("top",p.top);
相反,在您的putImageData函数中使用以下内容:
cxt1.putImageData(myData,p.left, p.top);
由于我不能测试你的代码,所以它不会是完美的。我建议制作一个jsFiddle,这样人们就更容易帮助您编写代码。
相关文章:
- 使用KineticJS变换(移动/缩放/旋转)形状
- CSS3 点击旋转和缩放
- 如何在D3中获得可缩放Icicle布局中文本标签的旋转
- 精灵缩放会导致三个.js的定位和旋转不正确
- 缩放、拖动和旋转时的图像定位
- CSS 图像查看器:图像旋转(和缩放)
- 在Openlayers 3中使标记与地图一起缩放/旋转
- 在画布上绘制CSS转换(缩放、旋转、向左、向右)
- 制作画布镜像、缩放和旋转
- Android 4.1+(Javascript浏览器):如何禁用旋转缩放
- HTML>根据窗口和图像大小旋转和缩放图像
- 如何旋转,调整大小和缩放图像从角落的画布
- Jquery自定义旋转木马内的图像缩放模式
- SVG旋转,缩放和翻译与鼠标
- 将横向iPad旋转为纵向iPad不会改变网页的缩放比例
- 缩放和旋转在拉斐尔.js
- js旋转,缩放不发生围绕对象的中心轴
- 仅在移动、缩放和旋转时渲染所选对象
- 当旋转或缩放改变时,在Raphaeljs中拖动路径
- 如何从矩阵SVG中提取位置,旋转和缩放