前端加载超大图片(100M以上)实现秒开解决方案

这篇具有很好参考价值的文章主要介绍了前端加载超大图片(100M以上)实现秒开解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前端加载超大图片时,一般可以采取以下措施实现加速:

  1. 图片压缩:将图片进行压缩可以大幅减小图片的大小,从而缩短加载时间。压缩图片时需要注意保持图片质量,以免影响图片显示效果。
  2. 图片分割:将超大图片分割成多个小图块进行加载,可以避免一次性加载整个图片,从而加快加载速度。这种方式需要在前端实现图片拼接,需要确保拼接后的图片无缝衔接。
  3. CDN 加速:使用 CDN(内容分发网络)可以将图片缓存在离用户更近的节点上,从而加速图片加载速度。如果需要加载的图片是静态资源,可以将其存储在 CDN 上,以便快速访问。
  4. 懒加载:懒加载是一种图片延迟加载的方式,即当用户浏览到需要加载的图片时才进行加载,可以有效避免一次性加载大量图片而导致页面加载速度缓慢。
  5. WebP 格式:使用 WebP 格式可以将图片大小减小到 JPEG 和 PNG 的一半以下,从而加快图片加载速度。
  6. HTTP/2:使用 HTTP/2 协议可以并行加载多个图片,从而加快页面加载速度。
  7. 预加载:预加载是在页面加载完毕后,提前加载下一步所需要的资源。在图片加载方面,可以在页面加载完毕后提前加载下一个需要显示的图片,以便用户快速浏览。

而对于几百M或上G的大图而言,不管对图片进行怎么优化或加速处理,要实现秒开也是不太可能的事情。而上面介绍的第二条“图像分割切片”是最佳解决方案。下面介绍下如何对大图进行分割,在前端进行拼接实现秒开。

图像切片原理介绍

图像切片是指将一张大图分割成若干个小图的过程,以便于存储和处理。图像切片常用于网络地图、瓦片地图、图像拼接等应用中。

切片原理主要包括以下几个步骤:

  1. 定义切片大小:首先需要定义每个小图的大小,一般情况下是正方形或矩形。
  2. 计算切片数量:根据定义的切片大小,计算原始图像需要被切成多少个小图。计算公式为:切片数量 = 原始图像宽度 / 切片宽度 × 原始图像高度 / 切片高度。
  3. 切割图像:按照计算出的切片数量,将原始图像分割成相应数量的小图。可以使用图像处理库或自己编写代码实现。
  4. 存储切片:将切割后的小图存储到磁盘上,可以使用常见的图片格式,如JPEG、PNG等。
  5. 加载切片:在需要显示切片的地方,根据需要加载相应的小图,组合成完整的图像。

使用图像切片可以降低处理大图像的复杂度,同时也能够提高图像的加载速度,使得用户可以更快地查看图像的细节。图像切片广泛应用于需要处理大图像的场景,能够提高图像处理和显示效率,同时也能够提高用户的体验。

实现

先上效果图

前端加载超大图片(100M以上)实现秒开解决方案

上传打开图形

先上传大图,至后台进行切片处理,
上传相关代码为:

async onChangeFile(file) {
            try {
                message.info('文件上传中,请稍候...')
                this.isSelectFile = false;
                this.uploadMapResult = await svc.uploadMap(file.raw);
                if (this.uploadMapResult.error) {
                    message.error('上传图形失败!' + this.uploadMapResult.error)
                    return
                }
                this.form.mapid = this.uploadMapResult.mapid;
                this.form.uploadname = this.uploadMapResult.uploadname;
                this.maptype = this.uploadMapResult.maptype || '';
                this.dialogVisible = true;
            } catch (error) {
                console.error(error);
                message.error('上传图形失败!', error)
            }
        }

如果需要上传后对图像进行处理,可以新建一个cmd.txt文件,把处理的命令写进文件中,然后和图像一起打包成zip上传。

如需要把1.jpg,2.jpg拼接成一个新的图片m1.png再打开,cmd.txt的写法如下:

join
1.jpg
2.jpg
m1.png
horizontal

再把1.jpg,2.jpg,cmd.txt三个文件打包成zip文件上传即可

打开图像相关代码

async onOpenMap() {
            try {
                let mapid = this.form.mapid;
                let param = {
                    ...this.uploadMapResult,
                    // 图名称
                    mapid: this.form.mapid,
                    // 上传完返回的fileid
                    fileid: this.uploadMapResult.fileid,
                    // 上传完返回的文件名
                    uploadname: this.form.uploadname,
                    // 地图打开方式
                    mapopenway: this.form.openway === "直接打开图形" ? vjmap.MapOpenWay.Memory : vjmap.MapOpenWay.GeomRender,
                    // 如果要密码访问的话,设置秘钥值
                    secretKey: this.form.isPasswordProtection ? svc.pwdToSecretKey(this.form.password) : undefined,
                    style: vjmap.openMapDarkStyle(),// div为深色背景颜色时,这里也传深色背景样式
                    // 图像类型设置地图左上角坐标和分辨率
                    imageLeft: this.form.imageLeft ? +this.form.imageLeft : undefined,
                    imageTop: this.form.imageTop ? +this.form.imageTop : undefined,
                    imageResolution: this.form.imageResolution ? +this.form.imageResolution : undefined,
                }
                let isVectorStyle = this.form.openway === "存储后渲染矢量";
                await openMap(param, isVectorStyle);
            } catch (error) {
                console.error(error);
                message.error('打开图形失败!', error)
            }
        }

应用案例

应用一 对图像进行拼接前端查看

原始图片为

前端加载超大图片(100M以上)实现秒开解决方案

前端加载超大图片(100M以上)实现秒开解决方案

最终效果为:

前端加载超大图片(100M以上)实现秒开解决方案

体验地址: https://vjmap.com/app/cloud/#/map/t3c93d14ff09?version=v1&mapopenway=GeomRender&vector=false

应用二 对tiff影像进行切片并与CAD图叠加校准

对tiff影像上传时可设置地理坐标范围。

tiff/tfw, jpg/jpgw坐标文件的格式(6个参数)
0.030000
0.0000000000
0.0000000000
-0.030000
451510.875000
3358045.000000

以上每行对应的含义:

1 地图单元中的一个象素在X方向上的X分辨率尺度。
2 平移量。
3 旋转量。
4 地图单元中的一个象素在Y方向上的Y分辨率尺度的负值。
5 象素1,1(左上方)的X地坐标。
6 象素1,1(左上方)的Y地坐标。

在上传图时需要根据文件中的第一个,第五个和第六个值设置地图范围

前端加载超大图片(100M以上)实现秒开解决方案

或者上传完后,操作菜单中点击设置地图范围进行设置

前端加载超大图片(100M以上)实现秒开解决方案

影像地图切片完成后,可与CAD图进行叠加校准。效果如下

前端加载超大图片(100M以上)实现秒开解决方案

体验地址: https://vjmap.com/demo/#/demo/map/comprehensive/04imagecadmap文章来源地址https://www.toymoban.com/news/detail-471379.html

到了这里,关于前端加载超大图片(100M以上)实现秒开解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 本地前端项目使用gitee仓库外链图片加载失败

    错误: 本地的前端项目,比如vue,纯html使用 img/ 标签加载gitee保存的图片文件的时候,浏览器加载失败。 但是gitee可以正常访问图片  解决办法: 在index.html中加入meta标签就可以完美解决 referrer 策略是一种 网络安全手段 ,在请求中会带有referrer。 要是vue项目的话,直接去

    2024年02月16日
    浏览(51)
  • Gartner最新报告,分析超大规模边缘解决方案

    当下,酝酿能量的超级边缘。 最近,我们在谈视频化狂飙、谈AIGC颠覆、谈算力动能不足,很少谈及边缘。但“边缘”恰恰与这一切相关,且越发密不可分,它是未来技术发展的极大影响因子。 “到2025年,超过70%的组织将为其⾄少⼀个边缘计算系统,部署超⼤规模云边缘解决

    2023年04月10日
    浏览(34)
  • 后端返回图片,前端接收并显示的解决方案

    后端通过二进制流的形式,写入response中 controller层 service层 axios接受数据时,responseType 默认返回数据类型是 json,必须将其改为返回数据类型 blob。否则axois无法正确解析数据。 这里的http.request是对axios的封装,把他当作axios用就行 vue界面渲染 后端接口,最好不要有返回值,

    2024年02月12日
    浏览(59)
  • 如何实现 H5 秒开?

    在简历上写了精通 H5,结果面试官上来就问: 同学,你说你精通 H5 ,那你能不能说一下怎么实现 H5 秒开? 由于没怎么做过性能优化,我只能凭着印象,断断续续地罗列了几点: 网络优化:http2、dns 预解析、使用 CDN 图片优化:压缩、懒加载、雪碧图 体积优化:分包、tree

    2024年02月11日
    浏览(41)
  • vue前端下载阿里oss超大文件的问题

    最近在开发一个大文件压缩下载需求,由于附件都是从阿里oss上下载,且一次下载多个文件,然后进行打包压缩,前期使用了axios+jszip+file-saver 来进行处理,但是当文件超过3个G的时候会出现out of memory和RangeError: Array buffer allocation failed错误。 下面贴出代码:   使用常用的 a

    2024年02月11日
    浏览(48)
  • 如何实现图片预加载和加载进度条

    很久没有发文了今天水一篇文章,图片预加载且展示加载的进度条,在现代的Web开发中,优化用户体验至关重要。一种常见的方法是在页面加载时预加载图片,并展示一个加载进度条,让用户了解加载进度。在本文中,我们将深入探讨如何实现这两个关键功能,以提高网站性

    2024年02月08日
    浏览(50)
  • vue 实现图片懒加载

    有些页面可能展示的是大量的图片,如果我们一次性加载所有图片就会浪费性能,影响用户体验,所以我们就会懒加载这些图片。即可视区域之外的图片不加载,随着页面的滚动,图片进入可视区域,则触发图片的加载显示。 优点:页面加载速度快,用户体验感更好且节省流

    2024年02月12日
    浏览(86)
  • SpringBoot+Vue项目中遇到Not allowed to load local resource图片路径问题的两种解决方案(在后端映射本地路径或将图片转base64返回给前端)

    后端映射本地路径 转base64格式返回 如果是少量图片可以这么操作,不然图片多的话返回base64由于字符太长,传输速度很慢,会导致卡顿现象、加载慢、加载异常等情况出现。 图片转base64 base64转图片保存 headPhotoPath = “D:yangleProjectImageLocationheadPhoto” userPhotoPath = “nologin”

    2024年02月06日
    浏览(50)
  • js实现img图片懒加载

    在前端中,可以使用 JavaScript 来实现图片的懒加载。下面是一种常见的实现方式: 在 HTML 文件中,将需要懒加载的图片的 src 属性替换为一个占位符,例如使用一个透明的空白图片或者是一个包含背景色的 div。 给这些图片添加一个自定义的属性,例如 data-src ,并将真实的图

    2024年02月11日
    浏览(37)
  • Vue3实现图片懒加载

    通过第三方插件VueUse实现图片懒加载。 1、需要安装依赖 2、定义懒加载的插件 xxx/index.js 3、在main.js文件内注册指令 4、使用 注册好指令就可以在标签上使用,使用指令时需要加v-。 这样一个自定义全局指令实现图片懒加载就做好了。

    2024年04月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包