好了,这个跟上一个其实是一样的,就是坐标不一样。。虽然可以随便根据某一条边旋转,但是,我还是先做简单的吧。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta content="telephone=no,email=no" name="format-detection">
<meta name="full-screen" content="true"/>
<%--竖屏--%>
<%--<meta name="screen-orientation" content="portrait"/>--%>
<%--横屏--%>
<%--<meta name="screen-orientation" content="landscape"/>--%>
<meta name="x5-fullscreen" content="true"/>
<meta name="360-fullscreen" content="true"/>
<style>
body{
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<div class="">
<img src="images/forestRoad.jpg" id="image" >
<img src="" id="preview">
</div>
<script>
var IMAGE=document.getElementById("image");
var PREVIEW=document.getElementById("preview");
</script>
<script>
// ctx.drawImage(IMAGE);
//--这是切片方式来生成图片。--up down left right ,请注意 angle的意思是,angle=0的时候是不需要切片生成图片的,因为angle=0表示从正上方看图片的角度。
//angle=90的是后表示图片刚好垂直于眼神--即是说,这时候眼睛看到的是一条直线--尽量不要用到angle=90的情况。
//--用angle以后就是计算三角形的坐标了。
//--用哪一个边作为参考来旋转,默认为bottom,即,根据bottom旋转,top|bottom|left|right
function transform3dImage(image,segNum,angle,side) {
var _turn_side="bottom";
if(side){
_turn_side=side;
}
var tmpCanvas = document.createElement("canvas");
var tmpCtx = tmpCanvas.getContext("2d");
var _img_width = image.naturalWidth;
var _img_height = image.naturalHeight;
function _bottom_turn_draw(){
//--计算实际的高度和宽度。
var _real_height = parseInt(_img_height * Math.cos(angle));
//--好了,已经算出了投影过去的高度,那么可以知道投影和原始图形之间的比例。
//--当然,这个比例其实就是cos(angle),就是说,没什么可以计算的,
//那么现在可以计算出最小的宽度了。
var _min_width = parseInt(_img_width * Math.cos(angle));
//根据这一个已经可以得到切片相关图形了。
tmpCanvas.width = _img_width;
tmpCanvas.height = _real_height;
var _seg_width = ((_img_width - _min_width) / segNum);
var _seg_height = ((_real_height) / segNum);
var _src_seg_height = (_img_height) / segNum;
console.log("当前图片尺寸:" + _img_width + " x " + _img_height + ", 投影后尺寸:最小宽度:" + _min_width + " 高度:" + _real_height + " 分片尺寸:" + _seg_width + "x" + _seg_height + " 原始图片分片单位高度:" + _src_seg_height);
for (var i = 0; i < segNum; i++) {
var _drawWidth = _min_width + (i + 1) * _seg_width;
_drawWidth = parseInt(_drawWidth);
if (_drawWidth > _img_width) {
_drawWidth = _img_width;
}
var _drawHeight = _seg_height;
var sx = 0;
var sy = parseInt(i * _src_seg_height);
var swidth = _img_width;
var sheight = parseInt(_img_height / segNum);
var dest_x = parseInt(_img_width / 2 - (_drawWidth) / 2);
var dest_y = i * _seg_height;
console.log(" 分片:" + i + " sx:" + sx + ",sy:" + sy + ",swidth:" + _img_width + ",sheight:" + sheight + ",x:" + dest_x + ",y:" + dest_y + ",drawWidth:" + _drawWidth + ",drawHeight:" + _drawHeight);
tmpCtx.drawImage(image, sx, sy, swidth, sheight, dest_x, dest_y, _drawWidth, _drawHeight);
}
}
function _top_turn_draw(){
//--计算实际的高度和宽度。
var _real_height = parseInt(_img_height * Math.cos(angle));
//--好了,已经算出了投影过去的高度,那么可以知道投影和原始图形之间的比例。
//--当然,这个比例其实就是cos(angle),就是说,没什么可以计算的,
//那么现在可以计算出最小的宽度了。
var _min_width = parseInt(_img_width * Math.cos(angle));
//根据这一个已经可以得到切片相关图形了。
tmpCanvas.width = _img_width;
tmpCanvas.height = _real_height;
var _seg_width = ((_img_width - _min_width) / segNum);
var _seg_height = ((_real_height) / segNum);
var _src_seg_height = (_img_height) / segNum;
for (var i = 0; i < segNum; i++) {
var _drawWidth = _img_width - (i) * _seg_width;
_drawWidth = parseInt(_drawWidth);
if (_drawWidth > _img_width) {
_drawWidth = _img_width;
}
var _drawHeight = _seg_height;
var sx = 0;
var sy = parseInt(i * _src_seg_height);
var swidth = _img_width;
var sheight = parseInt(_img_height / segNum);
var dest_x = parseInt(_img_width / 2 - (_drawWidth) / 2);
var dest_y = i * _seg_height;
tmpCtx.drawImage(image, sx, sy, swidth, sheight, dest_x, dest_y, _drawWidth, _drawHeight);
}
}
function _left_turn_draw(){
//--计算实际的高度和宽度。
var _real_width = parseInt(_img_width * Math.cos(angle));
var _min_height = parseInt(_img_height * Math.cos(angle));
//根据这一个已经可以得到切片相关图形了。
tmpCanvas.width = _real_width;
tmpCanvas.height = _img_height;
var _seg_width = ((_real_width) / segNum);
var _seg_height = ((_img_height-_min_height) / segNum);
var _src_seg_height = (_img_height) / segNum;
var _src_seg_width=(_img_width)/segNum;
for (var i = 0; i < segNum; i++) {
var _drawHeight=parseInt(_img_height-(i)*_seg_height);
if(_drawHeight>_img_height){
_drawHeight=_img_height;
}
var _drawWidth=_seg_width;
var sx = parseInt(i*_src_seg_width);
var sy = 0;
var swidth = parseInt(_src_seg_width);
var sheight = _img_height;
var dest_x = i*_seg_width;// parseInt(_img_width / 2 - (_drawWidth) / 2);
var dest_y = parseInt(_img_height/2-(_drawHeight)/2);
tmpCtx.drawImage(image, sx, sy, swidth, sheight, dest_x, dest_y, _drawWidth, _drawHeight);
}
}
function _right_turn_draw(){
//--计算实际的高度和宽度。
var _real_width = parseInt(_img_width * Math.cos(angle));
var _min_height = parseInt(_img_height * Math.cos(angle));
//根据这一个已经可以得到切片相关图形了。
tmpCanvas.width = _real_width;
tmpCanvas.height = _img_height;
var _seg_width = ((_real_width) / segNum);
var _seg_height = ((_img_height-_min_height) / segNum);
var _src_seg_height = (_img_height) / segNum;
var _src_seg_width=(_img_width)/segNum;
for (var i = 0; i < segNum; i++) {
var _drawHeight=parseInt(_min_height+(i+1)*_seg_height);
if(_drawHeight>_img_height){
_drawHeight=_img_height;
}
var _drawWidth=_seg_width;
var sx = parseInt(i*_src_seg_width);
var sy = 0;
var swidth = parseInt(_src_seg_width);
var sheight = _img_height;
var dest_x = i*_seg_width;// parseInt(_img_width / 2 - (_drawWidth) / 2);
var dest_y = parseInt(_img_height/2-(_drawHeight)/2);
tmpCtx.drawImage(image, sx, sy, swidth, sheight, dest_x, dest_y, _drawWidth, _drawHeight);
}
}
if(_turn_side=="top"){
_top_turn_draw();
}
else if(_turn_side=="left"){
_left_turn_draw();
}
else if(_turn_side=="right"){
_right_turn_draw();
}
else{
_bottom_turn_draw();
}
return tmpCanvas;
}
function realDraw(segNum,angle,side){
var _canvas=transform3dImage(IMAGE,segNum,angle,side);
PREVIEW.src=_canvas.toDataURL("image/png");
}
</script>
</body>
</html>