vue3多张图片合并为一张6寸大小的照片选择以竖版和横版两种不同方式打印下载

news2024/9/20 5:54:34

在 Vue 3 中,结合 html2canvas 来将多张图片合并成一张 6 寸的照片并支持以竖版和横版两种方式打印。Vue 3 主要的变化是在组件生命周期和 ref 的处理方式上。

目录

1. 准备工作

2. 安装依赖

3. Vue 3 代码实现

4. 解释

5. 打印效果

6. 布局调整


1. 准备工作

  • 安装 html2canvas 用于捕获 DOM 并生成合并的图片。
  • 使用 Vue 3 的 refnextTick 管理 DOM 操作。

2. 安装依赖

首先确保安装了 html2canvas

npm install html2canvas --save

3. Vue 3 代码实现

<template>
  <div>
    <!-- 图片容器 -->
    <div ref="photoContainer" :style="containerStyle">
      <img v-for="(img, index) in images" :key="index" :src="img" :style="imgStyle" />
    </div>

    <!-- 控制按钮 -->
    <div>
      <button @click="printPhoto('portrait')">打印竖版照片</button>
      <button @click="printPhoto('landscape')">打印横版照片</button>
    </div>
  </div>
</template>

<script>
import { ref, reactive, nextTick, computed } from 'vue';
import html2canvas from 'html2canvas';

export default {
  setup() {
    const images = reactive([
      // 多张图片的 URL
      'https://example.com/image1.jpg',
      'https://example.com/image2.jpg',
      // 你可以添加更多图片
    ]);

    const isPortrait = ref(true); // 是否为竖版
    const photoContainer = ref(null); // 引用 DOM 元素

    // 计算容器的样式
    const containerStyle = computed(() => {
      return isPortrait.value
        ? {
            width: '10.16cm', // 竖版宽度
            height: '15.24cm', // 竖版高度
            display: 'flex',
            flexDirection: 'column',
            justifyContent: 'space-around',
            alignItems: 'center',
          }
        : {
            width: '15.24cm', // 横版宽度
            height: '10.16cm', // 横版高度
            display: 'flex',
            flexDirection: 'row',
            justifyContent: 'space-around',
            alignItems: 'center',
          };
    });

    // 图片样式
    const imgStyle = {
      maxWidth: '100%',
      maxHeight: '100%',
      objectFit: 'contain',
    };

    // 打印照片的方法
    const printPhoto = async (orientation) => {
      isPortrait.value = orientation === 'portrait'; // 设置方向

      // 等待 DOM 渲染完成
      await nextTick();

      // 使用 html2canvas 将图片容器渲染为 canvas
      const canvas = await html2canvas(photoContainer.value);
      const dataUrl = canvas.toDataURL('image/png');

      // 创建一个新窗口用于打印
      const printWindow = window.open('', '_blank');
      printWindow.document.write('<img src="' + dataUrl + '" style="width:100%;height:auto;"/>');
      printWindow.document.close();
      printWindow.focus();
      printWindow.print();
      printWindow.close();
    };

    return {
      images,
      photoContainer,
      containerStyle,
      imgStyle,
      printPhoto,
    };
  },
};
</script>

<style scoped>
/* 你可以根据需要调整样式 */
</style>

4. 解释

  1. images: 存储多张图片的 URL,通过 reactive 来动态管理图片数据。
  2. isPortrait: 一个 ref 用于保存当前的打印方向,true 为竖版,false 为横版。
  3. photoContainer: 通过 ref 引用图片容器 DOM,方便后续操作。
  4. containerStyle: 根据打印方向动态返回容器的宽高和布局样式。竖版的尺寸为 10.16cm x 15.24cm,横版的尺寸为 15.24cm x 10.16cm。
  5. imgStyle: 控制图片在容器中的展示方式,确保图片不会超出容器并保持适当的比例。
  6. printPhoto: 该方法首先根据用户选择的方向调整 isPortrait 的值,接着使用 html2canvas 将图片容器内容转换为一张图片,最后使用 window.print() 打印这张合成的图片。

5. 打印效果

  • 竖版(portrait): 容器宽度为 10.16 cm,高度为 15.24 cm。
  • 横版(landscape): 容器宽度为 15.24 cm,高度为 10.16 cm。

6. 布局调整

根据你的需求,你可以调整 containerStyle 中的 flexDirectionjustifyContent 等属性来实现图片的不同排列方式。如果需要特定的排列方式(例如 2x2 网格),可以调整 flex-wrapgrid 或者其他 CSS 布局技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目实战II基于Java+Spring Boot+MySQL的酒店客房管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在旅游与酒…

AI助力智慧农田作物病虫害监测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建花田作物种植场景下棉花作物常见病虫害检测识别系统

智慧农业是一个很大的应用市场&#xff0c;将当下如火如荼的AI模型技术与现实的农业生产场景相结合能够有效提升生产效率&#xff0c;农作物在整个种植周期中有很多工作需要进行&#xff0c;如&#xff1a;浇水、施肥、除草除虫等等&#xff0c;传统的农业作物种植生产管理周期…

2024java高频面试-数据库相关

前言&#xff1a;趁着年轻&#xff0c;博主准备在拼一把&#xff0c;看能不能挑个可以干到退休的牛马工位&#xff01;&#xff01;&#xff01; 废话不多说&#xff0c;面试真题赶紧一股脑倒进我的脑袋瓜子里吧&#xff01;&#xff01;&#xff01; 事务四大特性&#xff1f…

268页PPT大型集团智慧工厂信息化顶层架构设计(2024版)

智能制造装备是高端制造业的关键&#xff0c;通过整合智能传感、控制、AI等技术&#xff0c;具备了信息感知、分析规划等智能化功能&#xff0c;能显著提升加工质量、效率和降低成本。该装备是先进制造、信息、智能技术的深度融合。其原理主要包括物联网集成、大数据分析与人工…

计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

《HadoopSpark知网文献论文推荐系统》开题报告 一、研究背景及意义 随着互联网技术的迅猛发展和大数据时代的到来&#xff0c;学术文献的数量呈爆炸式增长&#xff0c;用户面临着严重的信息过载问题。如何高效地从海量文献中筛选出用户感兴趣的论文&#xff0c;成为当前学术界…

黑鲨机型“工程固件” 清除nv资源预览 写入以及修复基带解析

黑鲨手机是专门为中国玩家制作是游戏科技手机。液冷散热技术被第一次运用在手机上,为手机散热领域竖立了新的标杆,同时通过“X元素”,运用跑车流线型设计,打造属于黑鲨的设计语言。超旗舰的硬件配置,辨识度极高的外观设计,让黑鲨手机成为了硬核玩家的标配。 黑鲨机型从1…

Web开发:Thymeleaf模板引擎

1. Thymeleaf 简介 Thymeleaf 是一个现代的服务器端模板引擎&#xff0c;用于生成 HTML、XML、JavaScript 和 CSS。它的设计理念是使模板能够自然地在 Web 浏览器中呈现&#xff0c;同时允许动态生成内容。 2. 最佳实践总结 2.1 项目结构和模板组织 保持清晰的目录结构&…

钢铁焦化水泥超低排的原因分析有哪些建议

实施超低排放的原因分析及其建议&#xff0c;朗观视觉小编建议&#xff0c;大家可以从以下几个方面进行阐述&#xff1a; 一、原因分析 环境保护需求&#xff1a; 随着环保意识的增强和环保法规的日益严格&#xff0c;减少大气污染物排放已成为行业发展的必然趋势。钢铁、焦化…

MT8370|MTK8370(Genio 510 )安卓核心板参数介绍

MTK Genio 510 (MT8370)安卓核心板是一款极为先进的高性能平台&#xff0c;专为满足边缘处理、先进多媒体功能及全面的连接需求而设计&#xff0c;适用于多种人工智能(AI)和物联网(IoT)应用场景。它具备多个高分辨率摄像头支持和可联网触摸屏显示&#xff0c;适用于使用多任务高…

Swagger 概念和使用以及遇到的问题

前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变 成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新&#xff0c; 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不…

一个手机号注册3个抖音号的绿色方法?一个人注册多个抖音号的方法!

下面这是我注册的新账号&#xff0c;显示未实名&#xff0c;在手机号这里显示辅助手机号绑定&#xff0c;手机号绑定这里显示未绑定。如果你需要矩阵&#xff0c;那么&#xff0c;还需要设置好头像&#xff0c;以及介绍&#xff0c;这些都可以正常设置。 再好的方法&#xff0c…

【IPV6从入门到起飞】5-5 IPV6+Home Assistant(HACS商店安装)docker版本安装

IPV6Home Assistant[HACS商店安装]docker版本安装 1 背景2 下载HACS3 安装/启用 HACS4 拓展安装 1 背景 在hass中&#xff0c;是有在线商店供我们下载插件&#xff0c;用于美化hass以及拓展功能&#xff0c;但是在docker版本中&#xff0c;默认是没有的&#xff0c;开启高级模…

【有啥问啥】深入解析:机器学习中的过拟合与欠拟合

深入解析&#xff1a;机器学习中的过拟合与欠拟合 在机器学习中&#xff0c;过拟合&#xff08;overfitting&#xff09;和欠拟合&#xff08;underfitting&#xff09;是模型性能中常见的两大挑战。它们反映了模型的学习能力与泛化能力的不平衡&#xff0c;直接影响模型在训练…

【machine learning-九-梯度下降】

梯度下降 更加通用的梯度下降算法算法步骤 上一节讲过&#xff0c;随机的寻找w和b使损失最小不是一种合适的方法&#xff0c;梯度下降算法就是解决解决这个问题的&#xff0c;它不仅可以用于线性回归&#xff0c;还可以用于神经网络等深度学习算法&#xff0c;是目前的通用性算…

专题六_模拟_算法详细总结

目录 模拟算法 1.模拟算法流程&#xff08;一定要在草稿纸上演算一遍流程&#xff09; 2.把流程转换成代码 1. 替换所有的问号&#xff08;easy&#xff09; 解析&#xff1a; 1.暴力&#xff1a; 2.优化&#xff1a;&#xff08;找规律&#xff09; 总结&#xff1a; …

MySQL数据库迁移与备份实录

这里写目录标题 事情起因的概述查看磁盘空间使用情况为了进一步的明确宕机原因&#xff0c;查看MySQL日志信息进一步排查 如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份分析与梳理如何修改MySQL数据卷的挂载位置停止MySQL服务备份 MySQL 配置文件迁移 MySQL 数据…

MTK zephyr平台:USB升级、枚举流程

一、USB升级流程 通过代码及log分析,当前平台升级过程在PL阶段进行 USB download相关代码 mtk/modules/hal/boot/preloader/platform/flashc/ mtk/modules/hal/boot/preloader/platform/board_name/flash/ mtk/modules/hal/boot/preloader/platform/board_name/src/drive…

【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

开放标准如何破解企业数字化与可持续发展的困境:The Open Group引领生态系统架构创新

应对数字化与可持续发展的双重挑战&#xff0c;开放标准是关键 在当今快速变化的商业环境中&#xff0c;企业不仅需要通过数字化转型提升竞争力&#xff0c;还面临日益严格的可持续发展要求。开放标准正在成为企业破解这一双重挑战的核心工具。The Open Group 2024生态系统架构…

智能BI项目第四期

开发图表管理功能 规划思路 首先需要做一个列表页。后端已经在星球提供了一个基础的万能项目模板&#xff0c;包含增删改查接口&#xff0c;我们只需要在此基础上进行定制化开发即可。所以本期后端的开发量不多&#xff0c;只需要复用即可&#xff0c;主要是前端。 规划功能…