「前端」切割图片并打乱

吐槽/反馈/建议:我的咸鱼心  爱发电-@wdssmq

项目介绍

折腾,水一篇,周而复始……

图片切分成九宫格,打乱顺序后输出为一张图片,切分图作为输入可使用口令还原……

项目地址

ImgPuzzle - 切分图片并打乱 - 水水的演示站:

https://demo.wdssmq.com/tools/ImgPuzzle/

待办

  • [ ] 原图非切分图的还原;

说明

实现思路:

new FileReader()对像可以读取文件,可以实现将读取到的图片数据设置为页面元素的 CSS 背景,因为需要获取图片的宽高信息,需要在额外用一下new Image()……

以下为读取部分的代码封装,实现预览的同时将图片数据存储在ImgPuzzle.imgInfo对象中,方便后续使用。

点击这里查看代码;
  // 图片预览封装
  const fnViewImg = ($input, $view) => {
    // 检查宽和高
    const checkWH = (w, h) => {
      if (w <= ImgPuzzle.imgInfo.maxWidth) {
        return { width: w, height: h };
      }
      const scale = ImgPuzzle.imgInfo.maxWidth / w;
      return { width: ImgPuzzle.imgInfo.maxWidth, height: h * scale };
    };
    const file = $input.files[0];
    // 检查文件是否为图像类型
    if (!/^image\//.test(file.type)) {
      ImgPuzzle._tips("err-type");
      return;
    }
    // 获取文件名
    ImgPuzzle.imgInfo.name = file.name;
    // 创建 FileReader 对象并读取文件数据
    const reader = new FileReader();
    // 读取成功后的回调函数
    reader.onloadend = function () {
      // 获取图像数据
      const img = new Image();
      img.onload = () => {
        // 获取图像宽高
        const { width, height } = checkWH(img.width, img.height);
        // 设置图像预览区域宽高
        $view.css("width", `${width}px`);
        $view.css("height", `${height}px`);
        ImgPuzzle.imgInfo.width = width;
        ImgPuzzle.imgInfo.height = height;
      };
      // 将图像数据赋值给 img.src
      img.src = ImgPuzzle.imgInfo.data = reader.result;
      // 将图像数据作为背景设置到 div 元素中进行预览
      $view.css("background-image", `url(${reader.result})`);
      $view.css("background-size", "cover");
      // 清空 input 文件选择框,以便用户可以选择同一张图片进行重新预览
      $input.value = "";
      ImgPuzzle.status.pickImg = true;
    };
    // 读取文件数据
    reader.readAsDataURL(file);
  };

切分时生成 9 个div并设置背景,使用 CSS 的background-position属性实现只显示部分图片,看起来就像是切割了一样。

每个div按顺序给以编号,打乱后按新顺序记录即可用以还原。

「- 每次都会有这种感觉,懂的肯定知道我表达的是啥,不懂的我这么表达真的有用么.jpg -」

总之详细的代码可以直接看源码。

项目截图

图像输出用的html2canvas这个库,输出的图片尺寸会比实现的元素大就不太理解,不知道有没有参数可以设置……

下边图片已经有自己缩放和压缩,然而比原图还是大了不少……

ai-006-938517624

↑ 一张打乱的演示,还原码:938517624

ai-006-reset

↑ 还原后的效果

ai-006

↑ 原图

web-ui

↑ 网页截图


爱发电

本文标题:《「前端」切割图片并打乱》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20220621981.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

Sandy Sandy 发布于 2011-01-28 20:21:51  
#cmt3117
这个挺好玩,估计得练习很久。
回复
囧啊囧 囧啊囧 发布于 2011-01-27 14:36:55  
#cmt3116
这个牛逼
回复
986 986 发布于 2023-03-29 10:32:08  
留言网址默认屏蔽 临时查看 认领以解除屏蔽
没成功... 0,0 回复
发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

  • 订阅本站的 RSS 2.0 新闻聚合

搜索

本周旧文

nuc 四个口插硬盘都识别不到,有亮灯。。最后试出别插到底。。

绿联的硬盘盒。。另外一个联想的没问题。。

近期观影记录:超级马里奥,死侍与金刚狼。。

搬家也告一段落,虽然搬过来的东西还得归置,新衣柜虽说已经散俩月味儿了,但还是不想放衣服进去。

要不我每年汇总整理一次??碎雨集_沉冰浮水_第1页

所以,不带这条的话,2024 年目前只发了 13 条嘟????

VSCode 内 git 操作卡住的时候没办法主动取消一直是个痛点,一般都是推送或拉取,今天连提交都卡了。。

又一个夏天过去了,所以今年也没买防水鞋套;然后天凉了,为了应对踢被子买了睡袋,不知道 1.2 米会不会略窄。。

《五至七时的克莱奥》,2018 年 6 月加入列表,21 年 11 月底发现 B 站上线了这部,直到前几天才看完,还是分两次看的。。接下来有五项是 2019 年的,都是电影 —— 略长的待办列表。。

有用程序自动抓取自己带 tag 的嘟,然后按年备份后从线上删除;刚发现去年的数据有备份但是没删线上??和本地数据对比后发现线上的还少一条,Why??

本质上,每个人需要的是「让自己面临的问题得到解决」的能力。。

这又涉及到直接能力和间接能力,,缺乏直接能力很正常,视情况可以通过学习来掌握直接能力,或者「请」有直接能力的人来帮自己解决。。

缺乏间接能力的情况是真没救,尤其是对「这是**我自己**面临的问题」这一前提没有明确认知的人。。

最新留言

友情链接