精华内容
下载资源
问答
  • canvas图片圆角
    千次阅读
    2021-01-26 11:53:25

    获取屏幕比率

    有的手机屏幕实际分辨率的像素比页面过去的尺寸像素要大,一遍是一倍或者两倍

    var getPixelRatio = function(context) {
      var backingStore = context.backingStorePixelRatio ||
          context.webkitBackingStorePixelRatio ||
          context.mozBackingStorePixelRatio ||
          context.msBackingStorePixelRatio ||
          context.oBackingStorePixelRatio ||
          context.backingStorePixelRatio || 1;
      return (window.devicePixelRatio || 1) / backingStore;
    };
    

    初始化canvas

    var canvas = document.createElement('canvas')//画布
    var ctx = canvas.getContext("2d"); 
    var ratio = getPixelRatio(ctx); // 获取屏幕比率
    canvas.width = 750*ratio; // 设置生成图片容器的宽高
    canvas.height = 1335*ratio; 
    ctx.clearRect(0,0,canvas.width,canvas.height); // 设置背景颜色
    ctx.fillStyle = '#000000';
    ctx.fillRect(0,0,canvas.width, canvas.height);
    

    画矩形图片+圆角

    /*
         *  参数说明
         *  ctx Canvas实例
         *  img 图片地址
         *   x  x轴坐标
         *   y  y轴坐标
         *   w  宽度
         *   h  高度
         *   r  弧度大小
         */
        drawRoundRect(ctx, r, x, y, w, h, img) {
          ctx.save();
          if (w < 2 * r) r = w / 2;
          if (h < 2 * r) r = h / 2;
          ctx.beginPath();
          ctx.moveTo(x + r, y);
          ctx.arcTo(x + w, y, x + w, y + h, r);
          ctx.arcTo(x + w, y + h, x, y + h, r);
          ctx.arcTo(x, y + h, x, y, r);
          ctx.arcTo(x, y, x + w, y, r);
          ctx.closePath();
          ctx.clip();
          ctx.drawImage(img, x, y, w, h);
          ctx.restore(); // 返回上一状态
        },

    圆形头像

     /*
         *  圆角图片=>参数说明
         *  ctx Canvas实例
         *  img 图片地址
         *   x  x轴坐标
         *   y  y轴坐标
         *   r  圆形半径
         */
        circleImg(ctx, img, x, y, r) {
          ctx.save();
          var d = 2 * r;
          var cx = x + r;
          var cy = y + r;
          ctx.arc(cx, cy, r, 0, 2 * Math.PI);
          ctx.clip();
          ctx.drawImage(img, x, y, d, d);
          ctx.restore();
        },

    导出生成头像链接

    导出的数据为base64的图片链接,可以赋值到需要展示的图片上,这样就能实现图片合成的效果了

    var imgData = canvas.toDataURL()

     

    更多相关内容
  • 引入js文件 [removed][removed] [removed][removed] ... swiper圆角卡片式手机触屏滑动图片切换代码,一款基于swiper制作的手机图片缩放展示效果,除了手指触屏滑动切换方式,还可以点击索引按钮进行切换。
  • swiper圆角卡片式手机触屏滑动图片切换代码,一款基于swiper制作的手机图片缩放展示效果,除了手指触屏滑动切换方式,还可以点击索引按钮进行切换。
  • 引入js文件 [removed][removed] [removed][removed]
  • canvas 画圆角矩形头像合成图片

    千次阅读 2019-02-20 15:31:53
    有的手机屏幕实际分辨率的像素比页面过去的尺寸像素要大,一遍是一倍或者两倍 var getPixelRatio = function(context) { var backingStore = context.backingStorePixelRatio || context....

    生成canvas

    获取屏幕比率

    有的手机屏幕实际分辨率的像素比页面过去的尺寸像素要大,一遍是一倍或者两倍

    var getPixelRatio = function(context) {
      var backingStore = context.backingStorePixelRatio ||
          context.webkitBackingStorePixelRatio ||
          context.mozBackingStorePixelRatio ||
          context.msBackingStorePixelRatio ||
          context.oBackingStorePixelRatio ||
          context.backingStorePixelRatio || 1;
      return (window.devicePixelRatio || 1) / backingStore;
    };
    
    初始化canvas
    var canvas = document.createElement('canvas')//画布
    var ctx = canvas.getContext("2d"); 
    var ratio = getPixelRatio(ctx); // 获取屏幕比率
    canvas.width = 750*ratio; // 设置生成图片容器的宽高
    canvas.height = 1335*ratio; 
    ctx.clearRect(0,0,canvas.width,canvas.height); // 设置背景颜色
    ctx.fillStyle = '#000000';
    ctx.fillRect(0,0,canvas.width, canvas.height);
    
    画圆形头像方法
    function drawRound (ctx,r,x,y,img) {
    	ctx.save() // 保存之前的
    	var r = r // 半径*屏幕分辨率比例
    	var d = 2*r // 直径
    	var cx = x + r // 圆弧坐标x
    	var cy = y + r // 圆弧坐标 y
    	ctx.arc(cx, cy, r ,0, 2*Math.PI)
    	ctx.clip() // 裁剪
    	ctx.drawImage(img, x, y, d, d) // 画头像
    	ctx.restore() // 返回上一状态
    }
    
    画圆角矩形头像方法
    function drawRoundRect (ctx,r,x,y,w,h,img) {
    	ctx.save()
    	if (w < 2 * r) r = w / 2
        if (h < 2 * r) r = h / 2
        ctx.beginPath()
        ctx.moveTo(x+r, y)
        ctx.arcTo(x+w, y, x+w, y+h, r)
        ctx.arcTo(x+w, y+h, x, y+h, r)
        ctx.arcTo(x, y+h, x, y, r)
        ctx.arcTo(x, y, x+w, y, r)
        ctx.closePath();
        ctx.clip()
        ctx.drawImage(img, x, y, w, h)
    	ctx.restore() // 返回上一状态
    }
    
    画背景图
    var bg = new Image()
    bg.crossOrigin = "*"; // 设置图片跨域问题
    bg.src = 'img/bg.jpg'
    bg.onload = function() { 
    	ctx.drawImage(bg, 0, 0, bg.width, bg.height, 0, 0, canvas.width, canvas.height);
    	// 画完背景图后,画头像
    	var head = new Image()
        head.crossOrigin = "*"
        head.src = 'img/head.jpg'
        head.onload = function() {
        	//画头像,这里画矩形图
        	var r = 10*ratio
            var x = 325*ratio
            var y = 500*ratio
            var w = 100*ratio
            var h = 100*ratio
            drawRoundRect(ctx,r,x,y,w,h,head)
        }
    }
    

    正方形圆角,如下图

    圆形头像,如下图

    导出生成头像链接

    导出的数据为base64的图片链接,可以赋值到需要展示的图片上,这样就能实现图片合成的效果了

     var imgData = canvas.toDataURL()
    

    完整代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style>
      	body{
      		margin: 0;
      		padding: 0;
      	}
      	.container{
      		width: 375px;
      		height: 667px;
      	}
      	.container img{
      		width: 100%;
      		height: 100%;
      	}
      </style>
    </head>
    <body>
      <div class="container">
      	<img id="result" src="" alt="">
      </div>
      <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
      <script>
      	$(function(){
      		var getPixelRatio = function(context) {
    		  var backingStore = context.backingStorePixelRatio ||
    		      context.webkitBackingStorePixelRatio ||
    		      context.mozBackingStorePixelRatio ||
    		      context.msBackingStorePixelRatio ||
    		      context.oBackingStorePixelRatio ||
    		      context.backingStorePixelRatio || 1;
    		  return (window.devicePixelRatio || 1) / backingStore;
    		}
    		var canvas = document.createElement('canvas')//画布
    		var ctx = canvas.getContext("2d"); 
    		var ratio = getPixelRatio(ctx); // 获取屏幕比率
    		canvas.width = 750*ratio; // 设置生成图片容器的宽高
    		canvas.height = 1335*ratio; 
    		ctx.clearRect(0,0,canvas.width,canvas.height); // 设置背景颜色
    		ctx.fillStyle = '#000000';
    		ctx.fillRect(0,0,canvas.width, canvas.height);
    
    		function drawRound (ctx,r,x,y,img) {
    			ctx.save() // 保存之前的
    			var r = r // 半径*屏幕分辨率比例
    			var d = 2*r // 直径
    			var cx = x + r // 圆弧坐标x
    			var cy = y + r // 圆弧坐标 y
    			ctx.arc(cx, cy, r ,0, 2*Math.PI)
    			ctx.clip() // 裁剪
    			ctx.drawImage(img, x, y, d, d) // 画头像
    			ctx.restore() // 返回上一状态
    		}
    		function drawRoundRect (ctx,r,x,y,w,h,img) {
    			ctx.save()
    			if (w < 2 * r) r = w / 2
    		    if (h < 2 * r) r = h / 2
    		    ctx.beginPath()
    		    ctx.moveTo(x+r, y)
    		    ctx.arcTo(x+w, y, x+w, y+h, r)
    		    ctx.arcTo(x+w, y+h, x, y+h, r)
    		    ctx.arcTo(x, y+h, x, y, r)
    		    ctx.arcTo(x, y, x+w, y, r)
    		    ctx.closePath();
    		    ctx.clip()
    		    ctx.drawImage(img, x, y, w, h)
    			ctx.restore() // 返回上一状态
    		}
    
    		var bg = new Image()
    		bg.crossOrigin = "*"; // 设置图片跨域问题
    		bg.src = 'img/J-bg.jpg'
    		bg.onload = function() { 
    			ctx.drawImage(bg, 0, 0, bg.width, bg.height, 0, 0, canvas.width, canvas.height);
    			// 画完背景图后,画头像
    			var head = new Image()
    		    head.crossOrigin = "*"
    		    head.src = 'img/head.jpg'
    		    head.onload = function() {
    		    	//画头像,这里画矩形图
    		    	var r = 100*ratio
    		        var x = 325*ratio
    		        var y = 500*ratio
    		        var w = 100*ratio
    		        var h = 100*ratio
    		        drawRoundRect(ctx,r,x,y,w,h,head)
    		        var imgData = canvas.toDataURL()
    		        $('#result').attr('src', imgData)
    		    }
    		}
      	})
      </script>
    </body>
    </html>
    
    
    展开全文
  • HarmonyOS鸿蒙之设置圆角

    千次阅读 2021-05-31 15:40:18
    background_supertext_red.xml中不在使用corners圆角属性 ohos:shape="rectangle"> ohos:color="$color:white"/> ohos:width="2" ohos:color="$color:red"/> 然后通过代码动态设置单独圆角,比如上圆角 Button ...

    1、同时设置四个角

    2a357569a3d322dc88b70d4a20fd4fbd.png

    a、静态设置

    graphic下新建 background_supertext_red.xml

    ohos:shape="rectangle">

    ohos:color="$color:white"/>

    ohos:width="2"

    ohos:color="$color:red"/>

    ohos:radius="20"/>

    layout.xml中引用

    ohos:height="50vp"

    ohos:width="match_parent"

    ohos:background_element="$graphic:background_supertext_red"

    ohos:margin="20vp"

    ohos:text="按钮"

    ohos:text_size="20fp"/>

    b、动态设置,不在layout.xml中通过ohos:background_element引用,通过代码动态设置

    Button button = (Button) findComponentById(ResourceTable.Id_btn);

    button.setBackGround(ResourceTable.Graphic_background_supertext_red);

    或者

    Button button = (Button) findComponentById(ResourceTable.Id_btn);

    ShapeElement element = new ShapeElement(getContext(),

    ResourceTable.Graphic_background_supertext_red);

    button.setBackground(element);

    2、单独设置四个角中的某个圆角

    element.setCornerRadiiArray(new float[]{

    tlRadius, tlRadius,

    trRadius, trRadius,

    brRadius, brRadius,

    blRadius, blRadius

    });

    举个例子吧(设置左上与右上圆角):

    1b1e176cc5b83ee0f9b661f34717b72b.png

    ohos:height="50vp"

    ohos:width="match_parent"

    ohos:background_element="$graphic:background_supertext_red"

    ohos:margin="20vp"

    ohos:text="按钮"

    ohos:text_size="20fp"/>

    background_supertext_red.xml中不在使用corners圆角属性

    ohos:shape="rectangle">

    ohos:color="$color:white"/>

    ohos:width="2"

    ohos:color="$color:red"/>

    然后通过代码动态设置单独圆角,比如上圆角

    Button button = (Button) findComponentById(ResourceTable.Id_btn);

    ShapeElement element = new ShapeElement(getContext(),

    ResourceTable.Graphic_background_supertext_red);

    element.setCornerRadiiArray(new float[]{

    20f, 20f,

    20f, 20f,

    0f, 0f,

    0f, 0f

    });

    button.setBackground(element);

    展开全文
  • 这里是利用图层绘制的原理,绘制一个圆角矩形的遮罩来遮挡部分原图,达到视觉上的圆角效果。 具体步骤: 1.绘制一个白色矩形背景 2.绘制一个圆角矩形背景 3.利用图层绘制中的PorterDuff.Mode.DST_OUT模式(显示下层...

    这里是利用图层绘制的原理,绘制一个圆角矩形的遮罩来遮挡部分原图,达到视觉上的圆角效果。

    具体步骤:
    1.绘制一个白色矩形背景
    2.绘制一个圆角矩形背景
    3.利用图层绘制中的PorterDuff.Mode.DST_OUT模式(显示下层非交集部分,交集部分透明显示)显示圆角。
    4.绘制边框

    public class RoundCornerImageView extends android.support.v7.widget.AppCompatImageView {
    
        private Paint mPaintBg;//遮罩画笔
        private Paint mBorderPaint;//边框画笔
        private float mBorderWidth;//边框宽度
        private int mBorderCorlor;//边框颜色
        private float mRoundCorner;//圆角角度
        private int width;//控件宽度
        private int height;//控件高度
    
        public RoundCornerImageView(Context context) {
            this(context, null);
        }
    
        public RoundCornerImageView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public RoundCornerImageView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            //获取自定义属性
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundCornerImageView, defStyleAttr, 0);
            mBorderWidth = array.getDimension(R.styleable.RoundCornerImageView_border_width, 0);
            mBorderCorlor = array.getColor(R.styleable.RoundCornerImageView_border_color, Color.GRAY);
            mRoundCorner = array.getDimension(R.styleable.RoundCornerImageView_round_corner, 0);
    
            init();
        }
    
        private void init() {
        //背景
            mPaintBg = new Paint(Paint.ANTI_ALIAS_FLAG);
            mPaintBg.setStyle(Paint.Style.FILL);
            mPaintBg.setColor(Color.WHITE);
    
            //边框
            mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mBorderPaint.setColor(mBorderCorlor);
            mBorderPaint.setStyle(Paint.Style.STROKE);
            mBorderPaint.setStrokeWidth(mBorderWidth);
    
            //禁用硬件加速(api19以上使用图层绘制功能必须禁用硬件加速,Android手机默认开启)
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            width = w;
            height = h;
    
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            //使用离屏绘制,防止背景干扰绘制结果
            int layer = canvas.saveLayer(0, 0, width, height, mPaintBg, Canvas.ALL_SAVE_FLAG);
            //绘制下层矩形
            canvas.drawRect(0, 0, width, height, mPaintBg);
            mPaintBg.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//取下层非交集部分,交集部分透明
            mPaintBg.setColor(Color.WHITE);
            //绘制上层圆角矩形
            RectF rect = new RectF(mBorderWidth+ getPaddingLeft(), mBorderWidth+getPaddingTop(), width - mBorderWidth-getPaddingRight(), height - mBorderWidth-getPaddingBottom());
            canvas.drawRoundRect(rect, mRoundCorner, mRoundCorner, mPaintBg);
            mPaintBg.setXfermode(null);
            //restoreToCount()与saveLayer()成对出现
            canvas.restoreToCount(layer);
    
            //绘制边框
    
            RectF rectBorder = new RectF(mBorderWidth+ getPaddingLeft(), mBorderWidth+getPaddingTop(), width - mBorderWidth-getPaddingRight(), height - mBorderWidth-getPaddingBottom());
            canvas.drawRoundRect(rectBorder, mRoundCorner, mRoundCorner, mBorderPaint);
    
        }
    
    
    }
    
    
    
    <!-- 自定义属性-->
    <declare-styleable name="RoundCornerImageView">
            <attr name="border_width" format="dimension"></attr>
            <attr name="border_color" format="color"></attr>
            <attr name="round_corner" format="dimension"></attr>
        </declare-styleable>
    
    

    xml文件调用

    <com.xxx.xxx.RoundCornerImageView
            android:id="@+id/iv_avatar"
            android:layout_width="44dp"
            android:layout_height="44dp"
            app:border_color="@color/colorAccent"
            app:border_width="1dp"
            app:round_corner="5dp"
            android:src="@drawable/avatar1" />
    
    展开全文
  • 为了给前置摄像头、距离感应器等零部件预留位置,所以在屏幕顶部会留有一个凹口,因为和水滴的大小、形状有些类似,所以手机厂商给它起了水滴这么一个好听的名字。 2、刘海 从发型方面来说,刘海是指垂在...
  • Android BitmapShader 实战 实现圆形 圆角图片
  • 【Taro开发】-formData图片上传组件(六) 【Taro开发】-封装Form表单组件和表单检验(七) 【Taro开发】-tabs标签页及子组件的下拉刷新(八) 【Taro开发】-简易的checkBoxGroup组件(九) 【Taro
  • 圆角/阴影效果

    2021-04-22 11:08:52
    1、圆角效果优化 APP应用程序开发中,图片圆角化的需求任务经常出现。...如果某个渲染视图界面中只存在少量的图片圆角化需求并采用离渲染实现圆角化效果,在需求任务量及其较少的情形下意味着默认/新缓冲
  • 正常情况下,我们做头像的圆角的问题,常用的有两种方案ClipRRect以及设置Container的borderRadius属性,虽然这两种方法解决了很大一部分屏幕下的圆角图片问题,但是在遇到屏幕分辨率较小的手机时,这两个都会出现...
  • 使用CAShapeLayer和UIBezierPath设置圆角 1 2 3 4 5 6 7 8 9 10 UIImageView *imageView=[...
  • -canvas demo实例和画笔ctx----method中封装了各种绘制的方法*(文字,图片圆角图片圆角矩形等,还有利用for循环进行绘制多个圆角文字)* 为了方便这里我封装成了一个component shop-canvas 就是我当前的canvas-...
  • 圆角图片显示

    2013-07-04 09:20:21
    图片圆角效果显示,目前我用过两种方法。 一、将矩形图片处理成圆角图片,放到UIImageView里面显示。 网上可以查到很多这种方法的代码,算是比较成熟的方法了。 [cpp] view plaincopy /*create ...
  • 小程序swiper圆角实现

    2019-11-30 14:16:02
    父类用border-radius; overflow: hidden;(重点),不然会出现滑动过程变直角的问题
  • 圆角圆角

    万次阅读 2020-10-30 21:22:12
    iPhone 一直都是关于屏幕,Steve Jobs 在 2007 年发布会上就将第一代 iPhone 的 3.5 吋显示称为“巨大的屏幕”,而在 iPhone设计最初阶段也同“无边泳池”这个意象相关联,所有的设计元素遵从于屏幕而不能让用户...
  • 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) 序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0;...
  • 这篇文章介绍ZYCornerRadius(一句代码,圆角风雨无阻)解决生产中圆角带来的离渲染问题的思路。  日常生产中app布局离不开美丽的圆角(RounderCorner),特别是用圆角UIImageView来做数据呈现交互,但是这种柔和...
  • 概述android开发中,我们常常使用xml来写布局文件,这种实现方式不仅简单,而且...例如我们常常使用background 来表示和设置背景,那是不是可以使用layout_radius来表示和设置圆角呢?使用示例需要在项目build.gr...
  • 前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放、移动、绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框、圆形圆角显示图片和图像合成的功能介绍.我主要从三个方面进行讲述,首先如何通过assets...
  • 图片圆角

    2013-12-16 20:30:00
    一、将矩形图片处理成圆角图片,放到UIImageView里面显示: 1 /*create round rect UIImage with the specific size*/ 2 + (UIImage *) createRoundedRectImage:(UIImage*)image size:(CGSize)size 3 { ...
  • 比如你的DIV宽度为500px(像素),那你上传的图片或放入网页的图片宽度就要小于500px,也就是你图片需要图片软件剪切、等比例缩小方法处理后再上传、放入网页中解决撑破撑开DIV问题。常见很多大型图片站点、新闻站点都...
  • 手机站开发遇到一些问题,设计页面...手机型号竖宽度IPhone 5320pxIPhone 6375pxIPhone 6 Plus414pxNexus 4384pxAndroid(大多数)360px前两年,安卓的分辨率多数还是240px 或 320px,现在是360px,为了向下兼容,...
  • 鸿蒙开发实战系列之一:圆角

    千次阅读 多人点赞 2020-09-17 15:26:44
    鸿蒙开发实战系列之一:圆角 前言 看过鸿蒙2.0系统的发布会,大家是不是蠢蠢欲动,想要开发第一个鸿蒙的程序呢,网上有...如今大部分美术在设计样式的时候,都会给图片带上圆角,在鸿蒙开发过程中,一定会遇到要对图片
  • 权限所遇到的问题: ...自定义(imageBanner,指数和7*24, 设置条目,分享生成图片) viewPage(默认250) 切换滑动时间–反射(1000) 反射获取viewpager的Scroller,重定义scroll的延时时间。 自定...
  • UITableview优化之圆角设置

    千次阅读 2019-06-26 16:10:21
    一、最简单的设置圆角 //头像圆角 icon.layer.cornerRadius = 20 icon.layer.masksToBounds = true 这种设置方法会造成离渲染 什么是离渲染 GPU渲染机制 CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将...
  • 看到很多人开发过程中要使用圆角图片时,解决方法有:1.重新绘制一张图片2.通过布局来配置3.通过重写View来实现其中1,2在这里就不讲了,重点讲讲方法三的实现。实现一:通过截取画布一个圆形区域与图片的相交部分...
  • 首先,什么是响应式设计?...2.屏幕分辨率正飞速发展,同一张图片在不同设备上看起来,大小可能天差地别。 3.鼠标、触屏、笔、摄像头手势……不可预期的操控方式正在不断出现。 4.即便是使用浏览器,用户对浏览

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,694
精华内容 12,277
关键字:

圆角屏手机图片