HTML5之canvas剪切图片

38 篇文章 1 订阅
22 篇文章 0 订阅

有时UI设计效果图,设定图片某个角不可见,但上传的图片又不全是PNG透明图,那么Canvas就能帮忙解决困扰啦,自己根据需求做的一个实例,实现这样的效果,以下贴代码


<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="max-age=0" />
<meta name="apple-touch-fullscreen" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="format-detection" content="telephone=no" />
<title>canvas剪切图片</title>
<style>
@media screen and (min-width:320px) and (max-width:359px){html{font-size:12px;}body{ font-size:1.2rem;}}
@media screen and (min-width:360px) and (max-width:374px){html{font-size:13.5px;}}
@media screen and (min-width:375px) and (max-width:383px){html{font-size:14.07px;}}
@media screen and (min-width:384px) and (max-width:392px){html{font-size:14.38px;}}
@media screen and (min-width:393px) and (max-width:410px){html{font-size:14.75px;}}
@media screen and (min-width:411px) and (max-width:413px){html{font-size:15.41px;}}
@media screen and (min-width:414px) and (max-width:479px){html{font-size:15.52px;}}
@media screen and (min-width:480px) and (max-width:511px){html{font-size:18px;}}
@media screen and (min-width:512px) and (max-width:639px){html{font-size:19.19px;}}
@media screen and (min-width:640px){html{font-size:24px;}}
*{ margin:0px; padding:0px; -webkit-tap-highlight-color:rgba(0,0,0,0);}
html{ min-width:320px; max-width:640px; margin:0 auto;}
body{ background-color:#f0f0f0; font-family:"STHeitiSC-Light","微软雅黑","Microsoft YaHei"; color:#666; line-height:1rem;}
a:link , a:visited , a:hover ,a:active{ text-decoration:none; color:#666;}
.hide{ display:none;}
.mask.show{ -webkit-animation:fadein .3s; animation:fadein .3s;}
@-webkit-keyframes fadein
{
0%   {opacity:0;}
100% {opacity:.75;}
}
@keyframes fadein
{
0%   {opacity:0;}
100% {opacity:.75;}
}
.mask.hide , .link_picture.hide{ -webkit-animation:fadeout .3s; animation:fadeout .3s;}
@-webkit-keyframes fadeout
{
0%   {opacity:.75;}
100% {opacity:0;}
}
@keyframes fadeout
{
0%   {opacity:.75;}
100% {opacity:0;}
}
.link_picture.show{-webkit-animation:popout .5s;}
@-webkit-keyframes popout{
	0%{ -webkit-transform:scale(0.9,0.9); opacity:0;}
	30%{-webkit-transform:scale(1.05,1.05);opacity:1;}
	60%{-webkit-transform:scale(0.95,0.95);opacity:1;}
	100%{-webkit-transform:scale(1,1);opacity:1;}
}
@keyframes popout{
	0%{ transform:scale(0.9,0.9); opacity:0;}
	30%{transform:scale(1.05,1.05);opacity:1;}
	60%{transform:scale(0.95,0.95);opacity:1;}
	100%{transform:scale(1,1);opacity:1;}
}
.mask{ width:100%; height:100%; background:rgba(0,0,0,0.7); position:fixed; left:0; top:0; z-index:4;}

/*盒子*/
.link_picture{ width:23.65rem; height:25rem; position:fixed; top:10%; left:50%; margin-left:-11.8rem; z-index:5;}
/*显示的图片*/
.link_picture_img{ display:block; width:23.2rem; height:22.3rem; position:absolute; top:-0.3rem; left:0;}
/*盖在上面的图*/
.link_picture_top{ width:23.65rem; height:25rem; position:absolute; left:0; top:0;}
/*文字*/
.link_text{ width:100%; height:3rem; line-height:3rem; box-sizing:border-box; padding:0 1rem; white-space:nowrap; overflow:hidden; position:absolute; left:0; bottom:0;}
/*关闭*/
.link_picture_colse{ display:block; width:2rem; height:2rem; cursor:pointer; position:absolute; right:0; top:0; z-index:6;}

</style>
</head>

<body>
<div class="mask"></div>
<div class="link_picture show">
    <canvas id="picture" class="link_picture_img"></canvas>
    <img class="link_picture_top" src="link_picture_top.png" />
    <div class="link_text">放松心情喜悦出发</div>
    <div class="link_picture_colse"></div>
</div>
<script type="text/javascript">
window.onload = function(){
	//
	var picture_c     = document.getElementById("picture");
	var ctx_picture = picture_c.getContext("2d");
	//页面背景图片
	img = new Image();                
	img.src = "demo.jpg";//随便给一张图片测试就行
	img.onload = function() {
		var iw = img.width;
		var ih = img.height;
		//设置canvas的宽等于图片宽,这样移动端(比例显示)的图片就能全部显示
		picture_c.width = iw;
		picture_c.height = ih;
		//载入图片
		//ctx_picture.rect(0,0,iw-50,ih);
		//ctx_picture.stroke();
		
		//开始一个新的绘制路径
		ctx_picture.beginPath();
		//设置线条颜色为蓝色
		//ctx_picture.strokeStyle = "rgba(0,0,0,0)";
		//设置路径起点坐标
		ctx_picture.moveTo(0, 0);
		//绘制直线线段到坐标点(60, 50)
		ctx_picture.lineTo(0, ih);
		ctx_picture.lineTo(iw, ih); 
		//ctx_picture.lineTo(iw, 30);
		 ctx_picture.lineTo(iw, ih*0.1831775700934579);
		//ctx_picture.lineTo(iw - 37, 0); 
		ctx_picture.lineTo(iw*0.8617594254937163, 0); 
		//先关闭绘制路径。注意,此时将会使用直线连接当前端点和起始端点。
		ctx_picture.closePath();
		//最后,按照绘制路径画出直线
		//ctx_picture.stroke();
		//剪切
		ctx_picture.clip();
		ctx_picture.drawImage(img,0,0,iw,ih,0,0,iw,ih);
		//ctx_picture.setAntiAlias(true);
	}
};
</script>
</body>
</html>


用到的边框图片




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值