• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    一个基于canvas的移动端图片编辑器的实现

    发布者: 浪子 | 发布时间: 2025-6-16 12:30| 查看数: 104| 评论数: 0|帖子模式

    项目地址: https://github.com/xiaosu95/canvas_mobile_drag
    点击查看demo(在移动端上查看)
    该插件是一款脱离jq的移动端图片编辑器。可以应用在移动端H5页面或者微信小程序中。
         
    • 插件实现的功能为可页面内初始化载入图片、手动添加手机相册内的图片、或者添加服务器端的图片(服务器端需要开启允许图片跨域)。拥有多种的编辑模式。支持操作画布内的所有图片和单独设置某一种图片的状态或者位置等。   
    • 插件操作模式支持手势放大、旋转;支持点击图片的四个角落拖拽放大或旋转或者。   
    • 支持照片exif自动矫正。许多手机用不同方向拍照时会导致图片在canvas中显示角度不正常。常规解决方法是引入exif.js。不过该js大小太大。所以我在这里直接将exif获取角度的部分提取出来,大大精简了代码量。   
    • 插件可输出你期望的分辨率图片,格式。

    开始使用
    1. var canvasBox = document.querySelector('#picBox');
    2. var canvas = new _Canvas({
    3.   box: canvasBox,                  // 容器
    4.   bgColor: '#000',                // 背景色
    5.   bgPhoto: 'none',                // 背景图
    6.   photoModel: 'adaption',        // 载入图片模式(设置后添加图片时默认为当前设置模式)
    7.   model: 'Cascade'                // 模式Cascade为添加的图片层级右添加顺序决定,autoHierarchy为层级由选中的图片为最高级
    8. })
    复制代码
    创建canvas为画布对象,调用初始化函数init(Object)
         
    • dragEvent、zoomEvent、rotateEvent分别是拖拽、缩放、旋转三个事件监听,传递2个参数(picArr, target)picArr为画布内的所有图片对象数组,target为当前操作的图片对象。   
    • callback为'图片初始化完成的回调。
    1. canvas.init({
    2.   dragEvent: function (picArr, target) {        // 监听拖拽事件
    3.     console.log('当前操作事件:正在拖拽')
    4.   },
    5.   zoomEvent: function (picArr, target) {        // 监听缩放事件
    6.     console.log('当前操作事件:正在缩放')
    7.   },
    8.   rotateEvent: function (picArr, target) {        // 监听旋转事件
    9.     console.log('当前操作事件:正在旋转')
    10.   },
    11.   callback: function () {
    12.     console.log('图片初始化完成...')
    13.   }
    14. });
    复制代码
    canvas画布的方法:
    toDataURL(Object)
         
    • width: 输出的宽 (必须);   
    • height: 输出的高 (必须);   
    • type: 输出图片格式;   
    • bgColor: 图片背景色(若设置了背景图则背景图的层级比背景色高);   
    • callback: 回调函数(传入参数为图片的baes64)若没有写callback则toDataURL会return图片的baes64;
    1. $('.outputmodel2').click(function () {
    2.   canvas.toDataURL({
    3.     width: 750,
    4.     height: 600,
    5.     type: 'image/png',
    6.     callback: function (url) {
    7.       $('.outputPic').attr('src', url);
    8.       console.log('成功输出1倍png图')
    9.     }
    10.   })
    11. })
    复制代码
    addPhoto(Object)
         
    • url: 图片url(必须);   
    • model: 载入图片模式默认为'covered'铺满(为数字时为固定宽度,adaption为自适应显示);   
    • enable: 是否禁止编辑(Boolean)默认为false;   
    • callback: 图片加载完的回调,参数为图片的对象;
    1. $('.addEnablePic').click(function () {
    2.   canvas.addPhoto({
    3.     url: './img/pic6.jpg',
    4.     model: 200,
    5.     enable: true,
    6.     callback: function () {
    7.       console.log('成功添加一张禁止编辑的图片')
    8.     }
    9.   })
    10. })
    复制代码
    changeBg(Object)
    color: 背景色
    photo: 背景图(url)//为'none'时移除背景图
    1. $('.bgColor').click(function () {
    2.     var color = '#' + parseInt(Math.random() * 10) + parseInt(Math.random() * 10) + parseInt(Math.random() * 10)
    3.       canvas.changeBg({
    4.         photo: url,
    5.         color: color
    6.       })
    7.     })
    复制代码
    changeParams(Object)
    width: '画布宽度',
    height: '画布高度',
    model: '画布模式' (模式Cascade为添加的图片层级由添加顺序决定,autoHierarchy为层级由选中的图片为最高级)
    getNowPhoto()
    return 当前操作的图片对象
    clearCanvas()
    清空画布
    canvas画布的属性:
    photos:画布内所有图片对象
    Photo对象方法(画布内图片对象)
    init()
    重置图片大小和位置
    getPhotoInfo()
    返回图片的位置信息{model、enable、x(相对画布的x)、y(相对画布的y)、rotate、scale、width(画布内图片的宽度)、height(画布内图片的高度)、actualWidth(图片实际宽度)、actualHeight(图片实际高度)}
    changeInfo(Object)
         
    • hierarchy: 层级(Number)   
    • img: 图片URL(String)   
    • rotate: 旋转角度(Number)   
    • scale: 放大倍数(Number)   
    • callback: 修改参数后的回调(Function)
    1. $('.changeUrl').click(function () {
    2.   var nowPhoto = canvas.getNowPhoto();
    3.   if (!nowPhoto) {
    4.     alert('未选中任何图片');
    5.     return;
    6.   } else {
    7.     var nowPhotoInfo = nowPhoto.getPhotoInfo();
    8.     nowPhoto.changeInfo({
    9.       img: './img/pic7.jpg',
    10.       scale: nowPhotoInfo.scale / 1.1,
    11.       hierarchy: 1,
    12.       rotate: nowPhotoInfo.rotate + 90,
    13.       callback: function () {
    14.         console.log('成功修改')
    15.       }
    16.     })
    17.   }
    18. })
    复制代码
    _delete()
    删除该图片
    到此这篇关于一个基于canvas的移动端图片编辑器的实现的文章就介绍到这了,更多相关canvas 移动端图片编辑器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/html5/749982.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表