`
shuaigg.babysky
  • 浏览: 567874 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

canvas反转绘制图片

 
阅读更多

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<style>
* {margin:0;padding:0;}
div.holder {width:500px;border:1px solid black;text-align:center;overflow:hidden;}
div.holder img {margin:0 auto;display:block;}
</style>
</head>
<body>
    <div id="delegate">
        <div class="holder">
            <p>
                <a class="turnleft" href="#">向左转</a>
                <a class="turnright" href="#">向右转</a>
            </p>
            <div style="font-size:0px;">
                <img src="http://ww1.sinaimg.cn/bmiddle/6087b519tw1din59omsdqj.jpg" />
            </div>
        </div>
    </div>
    <script type="text/javascript">
        var maxWidth = 500;
        window.onload = function() {
            var delegate = document.getElementById('delegate');
            var links = delegate.getElementsByTagName('a');
            for(var i = 0 ; i < links.length ; i++) {
                if((links[i].className + "").match(/\b(turnleft|turnright)\b/)) {
                    links[i].onclick = function(e) {
                        e = e || window.event;
                        var target = e.target || e.srcElement;
                        rotate(target);
                    };
                }
            }
        };
        function findNext(target) {
            var result = target , count = 0;
            while(true) {
                result = result.nextSibling;
                count++;
                if(result && result.nodeType == 1) {
                    break;
                }
                if(!result || count > 10) {
                    break;
                }
            }
            return result;
        }
        function rotate(target) {
            var clsName = target.className;
            var img = findNext(target.parentNode).getElementsByTagName("IMG")[0];
            var num = getAngle(img , clsName == 'turnleft' ? 'left' : 'right');
            var ie = /msie/i.test(navigator.userAgent);
            if(ie) {
                img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + num + ')';
            } else {
                var canvas = img.parentNode.getElementsByTagName('canvas');
                if(!canvas.length) {
                    canvas = document.createElement('canvas');
                    img.parentNode.appendChild(canvas);
                } else {
                    canvas = canvas[0];
                }
                if(num % 2 == 0) {
                    canvas.width = img.width;
                    canvas.height = img.height;
                } else {
                    canvas.width = img.height;
                    canvas.height = img.width;
                }
                var context = canvas.getContext('2d');
                var arr = [[0,0] , [0,-img.height] , [-img.width ,-img.height] , [-img.width,0]];
                context.rotate(num * Math.PI / 2);
                context.drawImage(img , arr[num][0] , arr[num][1] , img.width , img.height);
                img.style.display = 'none';
            }
        }
        function resize(target , angle) {
            var size = target.realSize;
            if(!size) {
                target.realSize =  size = {
                    width : target.width,
                    height : target.height
                };
            }
            if(angle % 2 == 0) {
                target.width = size.width;
                target.height = size.height;
            } else {
                if(size.height > maxWidth) {
                    target.height  = maxWidth;
                    target.width = maxWidth * size.width / size.height;
                } else {
                    target.width = size.width;
                    target.height = size.height;
                }
            }
        }
        function getAngle(target , type) {
            var angle = target.angle || 0;
            type == 'left' ? angle -= 90 : null;
            type == 'right' ? angle += 90 : null;
            Math.abs(angle) > 270 ? angle = 0 : null;
            target.angle = angle;
            angle /= 90;
            if(angle < 0) {
                angle = 4 + angle;
            }
            var isIe = /msie/i.test(navigator.userAgent);
            resize(target , angle);
            if(isIe) {
                var marginLeft;
                if(angle % 2 == 1) {
                    target.parentNode.style.height = target.width + 'px';
                    marginLeft = Math.floor((maxWidth - target.height) / 2);
                } else {
                    target.parentNode.style.height = target.height + 'px';
                    marginLeft = Math.floor((maxWidth - target.width) / 2);
                }
                target.style.marginLeft = marginLeft + 'px';
            }
            return angle;
        }
    </script>
</body>
</html>

  • 大小: 29.5 KB
分享到:
评论

相关推荐

    HTML5 canvas炫酷图片爆炸飞散特效

    2. **绘制图片**:当图片加载完成后,我们将其绘制到canvas上。使用`context.drawImage()`方法,传入图片对象、起始绘制位置和尺寸。 3. **切片图片**:为了实现爆炸效果,我们需要将图片切割成多个小块。这可以...

    canvas实现图片镜像翻转的2种方式

    //图片加载完成后,执行此方法 ctx.drawImage(img, posx, posy, 210, 80); }; play.addEventListener('click', function () { ctx.clearRect(0, 0, canvas.width, canvas.height);//清除画布

    canvas学习和滤镜实现代码

    1. 绘制图像:drawImage(img, x, y, width, height)或drawImage(img, sx, sy, swidth, sheight, x, y, width, height)方法,可以用来在Canvas上绘制图片,也可以实现图片的缩放和裁剪。 2. 获取图像数据:...

    html5 canvas实现的图片水波倒影动画特效源码.zip

    `drawImage()`方法用于在Canvas上绘制图片,接受多个参数,包括图片对象、绘制的起始坐标以及图片的宽高。 3. 倒影效果: 要实现倒影效果,首先需要对图片进行上下翻转。这可以通过获取图片的上下颠倒的副本,然后...

    【HTML5】Canvas绘制简单图片教程

    要绘制图片,首先创建一个新的`Image`对象,并设置其`src`属性为图片的URL。然后,添加一个`onload`事件处理函数,在图片加载完成后进行绘制: ```javascript var img = new Image(); img.src = "1.jpg"; img....

    HTML5 CANVAS游戏开发实战(PDF和源代码)

    2.4.2 利用getimagedata和putimagedata绘制图片 / 45 2.4.3 利用createimagedata新建像素 / 47 2.5 小结 / 49 第3章 canvas高级功能 / 50 3.1 变形 / 50 3.1.1 放大与缩小 / 50 3.1.2 平移 / 53 3.1.3 旋转 ...

    JavaScript 黑白反转彩色图像

    // 绘制图片到canvas ctx.drawImage(img, 0, 0, img.width, img.height); // 获取图像数据 const imageData = ctx.getImageData(0, 0, img.width, img.height); const data = imageData.data; // 遍历每个...

    用Canvas+Javascript FileAPI 实现一个图片剪切、滤镜处理、上传下载工具.docx

    5. **图片剪切**: 剪切图片主要通过调整Canvas的绘图区域,使用`context.drawImage()`方法的参数指定源图像的裁剪区域和目标绘制位置。在本例中,图片选择框(picker)的位置和大小可以改变,以确定剪切的范围。 6....

    Canvas放置反弹效果随机图形(实例)

    Canvas API 是一种在网页上动态绘制图形的强大工具,它允许开发者通过JavaScript代码直接在画布上绘制各种形状和动画。 首先,我们看到有四个函数分别用于创建不同类型的图形:`createBall`(圆形)、`createSquare...

    android实现图片反转效果

    通过创建`Matrix`,设置适当的变换参数,然后在`Canvas`上绘制经过变换的`Bitmap`,我们可以轻松地实现图片的反转,从而避免了因重复图片资源而占用过多的存储空间。这种方法对于优化资源密集型的应用,如游戏,是...

    android 背景滚动跟反转和根据手势来画圆

    【标题】:“Android 背景滚动与反转及手势绘制圆形” 在Android开发中,创建动态、交互性强的用户界面是提升用户体验的关键。本主题主要探讨如何实现背景滚动、图像反转以及通过用户手势来画圆的功能,这些都是...

    csnvas在线画图及图片处理工具

    这个在线画图及图片处理工具利用了Canvas的强大功能,让用户可以直接在浏览器中进行创作和编辑图片,实现了多种图像操作,如颜色反转、转灰度图、阴影效果以及横向和纵向渐变。 1. **Canvas基本概念** - Canvas是...

    基于js+html5实现的图片倒影效果源码.zip

    2. 复制图片:利用Canvas API的`drawImage`方法将图片绘制到Canvas上,并保存为一个新的图片对象或数据URL。 3. 反转图片:对复制的图片进行水平翻转,可以使用Canvas的`translate`和`scale`方法完成这一操作。 4. ...

    PhotoEditor一个简单的照片编辑器

    通过`drawImage()`方法将图片绘制到`Canvas`上,然后可以通过`getImageData()`获取像素数据,进行像素级别的编辑。 3. 移动功能:移动图片在`Canvas`上主要通过更改`drawImage()`方法的`dx`和`dy`参数实现。这两个...

    android图片处理

    2. **图片重叠**:通过Canvas对象,开发者可以将多个图片绘制到同一个画布上,实现图片的重叠效果。使用`drawBitmap()`方法,可以设置不同的位置和透明度参数来控制图片叠加的方式。 3. **灰度处理**:将彩色图片...

    andorid,页面翻转 反转

    这通常涉及到继承`View`或`ViewGroup`,重写`onDraw()`方法,以及使用`Canvas`的绘图方法来绘制动画每一帧。通过计算每个时刻的旋转角度和其他属性,可以实现复杂的翻转效果。 5. **第三方库支持** Android社区有...

    android图片处理总结

    在处理图片时,经常需要对图片进行旋转、缩放或反转等操作,这些功能可以帮助我们更好地满足不同的应用场景。 1. **图片旋转** - 使用 `Matrix` 类设置旋转角度,然后通过 `Bitmap.createBitmap()` 方法创建新的 ...

    图片效果-翻转图片效果

    这个View可能通过改变图片的Matrix来达到翻转效果,或者通过绘制时反向绘制来模拟翻转。在Android的Canvas类中,`canvas.save()`和`canvas.restore()`可以用来保存和恢复绘图状态,`canvas.rotate()`用于旋转,而`...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码-IT计算机-毕业设计.zip

    开发者可能使用Bitmap.createBitmap()方法创建一个新的Bitmap对象,并使用Canvas进行绘制,将反转的位图绘制到合适的位置,从而实现倒影效果。 此外,该项目还涵盖了Android工程的基本结构、资源管理、布局设计、...

Global site tag (gtag.js) - Google Analytics