前端加载超大图片时,一般可以采取以下措施实现加速:
而对于几百M或上G的大图而言,不管对图片进行怎么优化或加速处理,要实现秒开也是不太可能的事情。而上面介绍的第二条“图像分割切片”是最佳解决方案。下面介绍下如何对大图进行分割,在前端进行拼接实现秒开。
图像切片是指将一张大图分割成若干个小图的过程,以便于存储和处理。图像切片常用于网络地图、瓦片地图、图像拼接等应用中。
切片原理主要包括以下几个步骤:
使用图像切片可以降低处理大图像的复杂度,同时也能够提高图像的加载速度,使得用户可以更快地查看图像的细节。图像切片广泛应用于需要处理大图像的场景,能够提高图像处理和显示效率,同时也能够提高用户的体验。
先上传大图,至后台进行切片处理, 上传相关代码为:
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,// 上传完返回的fileidfileid: 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)}}
原始图片为
最终效果为:
体验地址: vjmap.com/app/cloud/#…
对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地坐标。
在上传图时需要根据文件中的第一个,第五个和第六个值设置地图范围
或者上传完后,操作菜单中点击设置地图范围进行设置
影像地图切片完成后,可与CAD图进行叠加校准。效果如下
体验地址: vjmap.com/demo/#/demo…