vue.js框架+mintUI 网站自建之挂件编写: 实现图片选择、预览和上传之后再从数据库读出并显示的一种方式

2023-11-03

网站上传图片,预览图片,加载图片的实现方法:

19.4.28

4.28更新:

对于4.27提出的想法现在出现一个问题:利用canvas重绘图像后上传时,移动端与pc端得到的图片效果完全不相同,这对于以移动端为主导的网站简直是致命的,例如:
再来个有文字的感受一下:
移动端上传的图片中的文字根本就看不清.....反观pc端的起码不会影响正常浏览...

原因如下
canvas不是矢量图,而是像图片一样是 位图模式的。如果不做 Retina屏适配的话,例如二倍屏,浏览器就会以2个像素点的宽度来渲染一个像素,该canvas在Retina屏幕下相当于占据了2倍的空间,相当于图片被放大了一倍,因此图片会变模糊。

因此,要做Retina屏适配,关键是知道当前canvas的实际渲染倍率,然后将canvas放大到该倍率来绘制,最后将canvas压缩成一倍的物理大小来展示。

需要注意的是,canvas中的线条大小、文字大小等都需要乘以该倍率来进行绘制。

canvas的实际渲染倍率

在浏览器的window变量中有一个devicePixelRatio的属性,该属性表示了屏幕的设备像素比,即用几个(通常是2个)像素点宽度来渲染1个像素。

在canvas context中也存在一个 webkitBackingStorePixelRatio 的属性,该属性的值决定了浏览器在渲染canvas之前会用几个像素来来存储画布信息。在iOS6下的safari中的值是2,但是在chrome和iOS7的safari中的值却是1。在iOS6下的safari中,如果有一张100 × 100像素的图片绘制,该图片首先会在内存中生成一张200 × 200的图片,然后再浏览器渲染时会按100 × 100的图片来显示,因此不会出现模糊失真的情况。而在在chrome和iOS7的safari中就会出现模糊。

但是webkitBackingStorePixelRatio属性在各浏览器厂商的获取方式不一样,所以需要加上浏览器前缀来实现兼容。

如下:

var canvas = document.getElementById(“canvas”),
context= canvas.getContext(“2d”);

// 屏幕的设备像素比
var devicePixelRatio = window.devicePixelRatio || 1;

// 浏览器在渲染canvas之前存储画布信息的像素比
var backingStoreRatio = context.webkitBackingStorePixelRatio ||
context.mozBackingStorePixelRatio ||
context.msBackingStorePixelRatio ||
context.oBackingStorePixelRatio ||
context.backingStorePixelRatio || 1;

// canvas的实际渲染倍率
var ratio = devicePixelRatio / backingStoreRatio;

之后使用的时候,将canvas宽高设置为:
canvas .width = canvas .width.ratio;
canvas .height = canvas .height.ratio;

对了通过canvas.style.width或canvas.style.height 设置是同canvas .width不同的

要设置canvas的画布大小,使用的是canvas.width 和 canvas.height;
要设置画布的实际渲染大小,使用的style或CSS设置的 width 和height,只是简单的对画布进行缩放。

譬如:


canvas的实际大小的640px × 800px,但是实际渲染到页面的大小是320px × 400px,相当于缩小一倍来显示。

因此,如果要利用canvas显示在屏幕上,且大小不变的话,就是要将canvas放大到设备像素比来绘制(保证清晰度),最后将canvas压缩成一倍的物理大小来展示(保证大小)。如下:

canvas.width = canvas.width * ratio;
canvas.height = canvas.height * ratio;

点这里看看一些设备的devicePixelRatio

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue.js框架+mintUI 网站自建之挂件编写: 实现图片选择、预览和上传之后再从数据库读出并显示的一种方式 的相关文章

  • 企业小程序开发步骤【教你创建小程序】

    随着移动互联网的兴起 微信已经成为了很多企业和商家必备的平台 而其中 微信小程序是一个非常重要的工具 本文将为大家介绍小程序开发步骤 教你创建小程序 步骤一 注册小程序账号 先准备一个小程序账号 在微信公众平台的网站上注册即可 注册时要注意
  • 如何制作网站?如何制作网站教程

    如果公司企业想要知道如何制作网站 那么需要了解一些相关的内容 本文将介绍如何制作网站教程 希望对大家有所帮助 首先我们做好一些准备 域名 建站工具 图文素材 营业执照等资质 步骤一 创建站点 进入建站工具 24 fkw com 后 在工具中
  • 公司企业怎么做一个网站?

    怎么做一个网站对于一些实体的公司企业来说是个需要了解的问题 由于实体公司企业大部分情景下都是线下面谈业务 所以他们一开始并没有搭建自己的公司企业网站 而到了现在逐渐发展的阶段 就开始需要公司企业网站来开拓更多的客户资源或是提高公司企业的曝光
  • 企业网站有哪些平台?这里有四大关键选择指标

    在互联网时代 企业网站已成为企业营销和品牌推广的重要工具 然而 对于企业来说 选择合适的网站建设平台并不是一件容易的事情 本文将为您介绍如何选择合适的企业网站建设平台 并列举出四大关键指标 帮助您做出明智的决策 1 功能特色 选择合适的企业
  • 打造专业形象:公司怎么搭建一个网站

    在当今互联网时代 拥有一个专业的公司网站对于企业而言是非常重要的 一个优秀的网站不仅能够提升企业的形象 还能够吸引更多的客户并提高品牌知名度 那么 如何打造一个专业的公司网站呢 以下是一些步骤和案例来帮助您 第一步 确定网站目的和受众 在开
  • 五步教你如何注册一个公司网站

    在今天的数字化时代 每个公司都需要一个强大的线上存在感 注册一个公司网站是实现这一目标的第一步 但是 对于许多公司而言 这个过程可能有些困难 因此 在本文中 我将介绍一个五步计划 让您轻松注册一个成功的公司网站 步骤一 确定网站目标 在注册
  • 企业如何创建一个网站?

    如果企业想要创建一个网站 那么有许多选项可供选择 其中一些是简单的选择 而另一些则需要更多的专业知识和工具 但是不管选择哪种方法 都必须遵循一定的步骤才可以 下面给大家说说企业如何创建一个网站 一 注册域名 把注册域名放在第一步是因为心仪或
  • vue.js框架+mintUI 网站自建之挂件编写: 实现图片选择、预览和上传之后再从数据库读出并显示的一种方式

    网站上传图片 预览图片 加载图片的实现方法 文章结构 1 原始实现方法 2 更新 利用canvas重绘 优化加载速度 3 更新 canvas绘制在移动端与pc端的不同 19 4 28 4 28更新 对于4 27提出的想法现在出现一个问题 利
  • 你需要知道的企业网页制作流程

    企业网页制作是企业建立线上形象和宣传的重要手段之一 它不仅可以提高企业的品牌知名度 还可以扩大企业的影响力和拓展客户群 下面 我们将介绍一些企业网页制作的基本流程和技巧 并结合一个案例来详细解析 企业网页制作的基本流程可以分为以下几个步骤
  • 微信企业付款至零钱,状态处理中,status=PROCESSING的解决办法

    前段时间腾讯因为支付系统异常 更新了一些东西 然后就开始出现了这个问题 时不时的就会有一个两个状态为 处理中 的交易 但文档中并没有给出解决办法 尝试咨询了客服 给出了两个解决方案 1 把该笔交易当做失败处理 但以后这笔订单就不要再去折腾它
  • 如何创建自己的网址?

    如何创建自己的网址 其实网址不是创建的 我们看到网址是需要注册购买的 正确来说应该创建网站 是要有网址才能访问你的网站 下面简单说说如何创建自己的网站和注册网址 一 注册网址 有些人喜欢在创建网站前注册网址 以免看中的网址被抢走 有些人觉得
  • 简单易用的公司网页模板,助您快速建站

    在当今数字化时代 拥有一个高质量的公司网页是每个企业成功的关键 然而 对于那些没有技术专业知识的人来说 创建一个专业的网页可能是一项艰巨的任务 但是 现在有许多简单易用的公司网页模板可用于帮助您快速建站 下面 我们将简单地介绍一下如何利用这
  • 熊啸锋:在线生成个人网站,如何建立个人网站教程

    哈喽 我是熊啸锋老师 很久没写文章分享干货了 最近看到很多人想拥有一个自己的个人网站 但是大多数都是技术小白 想要搭建一个网站非常的困难 因为一个网站涉及到的东西和技术对于一个小白来说 还是很多很复杂的 那很多人就要问了 有没有一种方法 可
  • 打造高效企业网站系统,助力业务发展!

    企业网站在今天的商业世界中扮演着至关重要的角色 随着市场竞争的日益激烈 打造一个高效的企业网站系统已经成为了实现业务发展和增长的必要条件 本文将分享一些打造高效企业网站系统的关键步骤和技巧 并结合一个案例为读者深入分析 案例 设计公司打造高
  • 网站怎么创建?

    网站怎么创建 现在很多公司企业都会有自己的网站 即使是没有网站的公司也抓紧时间纷纷入局 希望能在互联网的流量中分到一杯羹 那么网站怎么创建呢 下面给大家简单说一说 网站怎么创建步骤1 首先我们准备好一个域名 一个网站需要有域名才能访问 我们
  • 网站代理是什么?有什么需要注意的?

    如今 网站代理已经成为一种不可或缺的经营方式 无论是企业还是个人 都需要通过代理来获得更多的流量和市场份额 一 网站代理的优势 网站代理的优势在于能够为您提供更加专业 周到的服务 这些优势包括 1 丰富的内容资源 能够满足客户对不同领域信息
  • 解决nginx报错:502 Bad Gateway以及504 Gateway Time-out问题

    wordpress及宝塔面板的基本环节 出现nginx错误 502 Bad Gateway 502 Bad Gateway以及504 Gateway Time out 504 Gateway Time out问题后的解决办法 更多分类文章
  • dedeCms恢复数据库后乱码

    好久没做网站了 最近看到不少模板源码 于是下了些来玩 找了个免费无任何限制只带广告的国外空间 但是在dedeCMS恢复数据乱码时出现了问题 都是知道这玩意就是编码的问题 不过不细心的人在使用dedeCMS可能会由于恢复数据时勾上了 还原表结
  • CSS生成的迷宫

  • iPhone Safari下iframe不显示滚动条无法滚动的解决方法

    div class dataTables wrapper style height 300px div

随机推荐

  • 区块链入门必读(FISCO)

    关键概念 区块链是由多个学科交叉组合形成的一门技术 本章将阐述区块链相关的基本概念 对涉及的基本理论进行科普介绍 如果您已经对这些基本技术很熟悉 可以跳过本章 区块链是什么 区块链 blockchain 是在比特币之后提出的一个概念 在中本
  • Java的文件上传

    文件上传效果图 代码如下 package star july upload import java io File import java io IOException import java util List import java u
  • ChatGPT在电子健康记录和医疗信息查询中的应用前景如何?

    电子健康记录 EHRs 和医疗信息查询在现代医疗保健系统中起着至关重要的作用 它们有助于提高患者护理的质量 提高医疗保健的效率 减少错误 促进患者参与 并促进医学研究和数据驱动的决策 ChatGPT作为一种人工智能技术 在这一领域具有巨大的
  • 关于vtk中的vtkActor、vtkRenderer、vtkRenderWindow的设置

    1 正常显示vtk 需要 vtkActor 可以有多个 进行一些演员的处理 vtkRenderer 可以有多个 将vtkActor进行加入 vtkRenderWindow 只能有一个 将vtkRenderer进行加入 vtkRenderWi
  • js 分浏览器设置style属性

    http www cnblogs com jianshao810 archive 2010 06 20 1761120 html var cssText font weight bold color red 下面写法用于firefox类型浏
  • 史上最牛,接口自动化测试-yaml框架配置文件总结(超级详细)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • EasyUI项目之购物车功能

    前言 继续讲解EasyUi项目 网上书城 之加入购物车 清空购物车功能 码字不易 点个关注 转载请说明 开发工具 eclipse MySQL 目录 1 目标 2 代码展示 加入购物车 清空购物车 思维导图 实现购物车的三种方式 1 目标 加
  • adcsr图像超分代码_MMEditing: 多任务图像视频编辑工具箱

    我们近期在 OpenMMLab 项目中开源了 MMEditing 这是一个图像和视频编辑的工具箱 它目前包含了常见的编辑任务 比如图像修复 图像抠图 超分辨率和生成模型 在编辑图像或者视频的时候 我们往往是需要组合使用以上任务的 因此我们将
  • npm run build --report 不生成report分析文件原因

    运行 下面命令即可 命令行后缀参数需要多加 符号 npm run build report
  • C语言中文件操作,即文件打开,文件写入、文件读取、文件关闭

    1 文件读写前 必须先使用fopen函数打开文件 fopen 若要对文件进行读写操作 第一步需要使用fopen 函数fopen 函数用于打开指定路径的文件 获取指向该文件的指针 函数原型 func fopen brief 打开文件 para
  • k8s学习(十一)创建DaemonSet

    目录 前言 一 下载 fluentd elasticsearch 二 创建 DaemonSet 三 版本回退 四 指定 Node 节点 前言 DaemonSet 保证在每个 Node 上都运行一个容器副本 常用来部署一些集群的日志 监 控或
  • log4j2的JsonLayout测试

    log4j2的JsonLayout测试 工程开发 最近在开发通用的分布式日志采集器 碰到日志信息块的划分问题 尤其是碰到有异常堆栈的情况 需要做合并操作 当前我们的解决方案是使用日志块的起始时间来判断 有过萌生使用JsonLayout的想法
  • XCTF_very_easy_sql

    简单的进行sql注入测试后发现不简单 尝试一下按照提示 结合这句提示 应该是内部访问 所以采用的手段应该是ssrf 顺便看看包 唯一值得关注的是set cookie 说回ssrf 唯一能使用的方式应该是Gopher协议 找到了一个POST的
  • RS码(Reed-Solomon码)

    RS编码是一种多进制编码技术 适合于存在突发错误的通信系统 RS解码技术相对比较成熟 但由RS码和卷积码构成的级联码在性能上与传统的卷积码相比较提高不多 故在未来第三代移动通信系统采用的可能性不大 RS是 Reed Solomon 里德 所
  • Java中final关键字理解

    最近毕业面试 有几家都问到了final关键字的使用 谈到final关键字 想必很多人都不陌生 在使用匿名内部类的时候可能会经常用到final关键字 另外 Java中的String类就是一个final类 那么今天我们就来了解final这个关键
  • 服务器显示checkin,checkin.gstatic.com服务器iP

    2020 07 14 2021 08 08 203 208 50 162 2021 08 08 2021 08 08 142 250 186 131 2021 08 08 2021 08 08 142 250 72 131 2019 07
  • IPC:有名管道

    mkfifo chatA c 有名管道 FIFO namedPipe 提供了一个路径名相关联 以FIFO文件形式存在于文件系统中 FIFO的内容存放在内存 文件中没有内容 创建后可以read write close等 实现了任意不同进程间的
  • Registration based Few-Shot Anomaly Detection

    Registration based Few Shot Anomaly Detection paper https arxiv org abs 2207 07361 code https github com MediaBrain SJTU
  • 数值求解一维定态薛定谔方程

    背景 学习量子化学原理与应用课程时 一维定态薛定谔方程经常归结为解二阶偏微分方程 因此 学习数值解法一方面能够验证解析解 另一方面也能够应对更多更复杂的势垒函数对应方程的解 参考资料 https github com FelixDesroc
  • vue.js框架+mintUI 网站自建之挂件编写: 实现图片选择、预览和上传之后再从数据库读出并显示的一种方式

    网站上传图片 预览图片 加载图片的实现方法 文章结构 1 原始实现方法 2 更新 利用canvas重绘 优化加载速度 3 更新 canvas绘制在移动端与pc端的不同 19 4 28 4 28更新 对于4 27提出的想法现在出现一个问题 利