微信小程序----相对路径图片不显示

2023-11-05

WXRUI体验二维码

WXRUI体验码

如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢!

出现场景

在本地调试的时候本地图片显示,但是手机浏览的时候本地图片不显示。

出现图片不显示的原因

小程序只支持网络路径和base64的图片。图片转base64在线工具

处理方法

  1. 将图片都放到服务器,然后直接采用网络路径。
    1.1 优点是能够放大量的图片。
    1.2 缺点是有时开发中有大量的小图片,或者修改小图标,对于开发者来说,更换会很麻烦。

  2. 将图片都转换成 base64 的图片保存,使用时直接引入。图片转base64在线工具
    2.1 优点是方便快捷,开发过程中容易更换。
    2.2 缺点是由于微信小程序规定了每个文件不能超过500MB,超过另行打包。所以如果图片过大,或者量过大,都不方便。

优化处理

将网络路径图片和 base64 的图片结合使用。图片转base64在线工具

  1. 开发大图片(轮播等)或图片量大(商品图片等)的场景时,采用网络路径。

优点是产品发布后方便图片的上下架,不用再提交审核,使用静态图片的尴尬和麻烦。

  1. 开发logo、导航等小图片时,采用 base64 的图片。图片转base64在线工具

优点是开发时方便开发者更换,引入方便;转换快捷,用图片转base64在线工具可直接转换;不用开发时总是往服务器上传图片。

实践开发

开发效果图

首页的轮播和网吧列表都是采用的网络路径,订单页面的右箭头和更多商品图标都是采用的 base64 图片。

实践开发效果图

开发代码
1. 首页轮播和店铺列表JS
const app = getApp();
const urlList = require('../../utils/config.js');
Page({
  data: {
    supplierList: [],
    iconList: iconList,
    bannerInfo: null,
    indicatorDots: true,//是否显示面板指示点
    autoplay: true,//是否开启自动切换
    interval: 3000,//自动切换时间间隔
    duration: 500,//滑动动画时长
    bannerList: [],
    shopList: [],
    currentPage: 1,
    pageSize: 10,
    total: 1000,
    myList: []
  },
  onLoad(){
    // 获取分享信息
    this.getShare();
  },
  onShow(){
    // 获取轮播列表
    this.getBannerList();
    
    // 获取当前地址
    wx.getLocation({
      success: res => {
        if (res.errMsg == 'getLocation:ok') {
          this.getShopList(res);
        }
      },
      fail: res => {
        this.wetoast.toast({ title: '获取定位失败,请打开定位,重新进入!' });
      }
    })
  },
  // 获取店铺列表
  getShopList(obj){
    // 判断是否还有更多数据
    if (!app.loadMoreData(this)) { return }
    // 请求数据
    let account = wx.getStorageSync('accountInfo');
    let location = obj;
    wx.request({
      url: urlList.shopListUrl,
      data: {
        // accountID: account.accountID,
        // passWord: account.passWord,
        longitude: location.longitude,
        latitude: location.latitude,
        currentPage: this.data.currentPage,
        pageSize: this.data.pageSize,
        sType: '1',
        token: app.globalData.token
      },
      success: res => {
        if(res.data.state == 'true'){
          console.log(res)
          this.setData({
            shopList: this.data.shopList.concat(res.data.data.supplierList),
            currentPage: ++this.data.currentPage,
            total: res.data.data.total,
            __noMoreData__: app.loadSuccessData(this, res.data.data.supplierList)
          })
        }else{
          console.log('网吧列表:' + res.data.exception)
          this.wetoast.toast({ title: '网吧列表加载失败!' });
        }
      }
    })
  },
  // 获取轮播列表
  getBannerList(){
    wx.request({
      url: urlList.advertPicListUrl,
      data: { appID: '4'},
      success: res => {
        if (res.data.state == 'true') {
          // console.log(res.data.data.picList)
          this.setData({
            bannerList: res.data.data.picList
          })
        }else{
          console.log('轮播列表:' + res.data.exception)
          this.wetoast.toast({ title: '轮播列表加载失败!' });
        }
      }
    })
  },
  //滚动加载
  onReachBottom(){
    this.getShopList(app.globalData.location);
  }
})

1. 首页轮播和店铺列表WXML
<scroll-view  scroll-y="true">
  <swiper class="rui-swiper" style='height:{{bannerInfo.height}}px' current="0" indicator-dots="{{indicatorDots}}" vertical="{{vertical}}"
          autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}"
          indicator-color="rgba(0,0,0,.5)" indicator-active-color="#fff">
      <block wx:for-items="{{bannerList}}" wx:key="banner">
            <swiper-item>
              <block wx:if="{{item}}">
                // 读取轮播图片的网络路径
                <image class="rui-full" bindtap='bannerUrl' data-banner="{{item}}" style='width:{{bannerInfo.width}}px;height:{{bannerInfo.height}}px' src="{{item.picUrl}}"></image>
              </block>
              <block wx:else>
                <image class="rui-full" style='width:{{bannerInfo.width}}px;height:{{bannerInfo.height}}px' src="../../images/default_pic.png"></image>
              </block>
            </swiper-item>
      </block>
  </swiper>
</scroll-view> 

<!--网吧列表  -->
<view wx:if="{{shopList.length > 0}}" class='rui-shop-sort'>附近网吧</view>
<view wx:if="{{shopList.length > 0}}" wx:for="{{shopList}}" wx:key="shopList">
    <view class='rui-shop-list' bindtap='goToGoodsList' data-shopid="{{item.shopID}}">
      // 读取网吧列表的网吧图片的网络路径
      <image class='rui-shop-img' src='{{item.sPicS}}'></image>
      <view class='rui-shop-box'>
        <view class='rui-shop-name'>
          {{item.userName}}
          <text class='rui-icon' wx:if="{{item.ishot == 1 && index < 3}}" style="background:url({{iconList.hotUrl}}) no-repeat center center/15px 15px;height:15px;width:15px;"></text>
        </view>
        <view class='rui-shop-distance'>
          <text style='margin-right:10px;color:#ff8e32;' wx:if="{{item.labels.length > 0 && labelsIndex < 4}}" wx:for-index="labelsIndex" wx:for="{{item.labels}}" wx:key="labels" wx:for-item="labels">{{labels}}</text>
          <text class='rui-fr'>{{item.gpsDistance}}</text>
        </view>
        <view class='rui-shop-address'>地址:{{item.corpAddress}}</view>
        <view class='rui-shop-active' wx:if="{{item.activeDesc}}">
          <text>{{item.activeDesc}}</text>
          <text class='active'>惠</text>
        </view>
      </view>
    </view>
</view>
2. 订单页的右箭头和更多商品JS
const app = getApp();
const urlList = require('../../utils/config.js');
const iconList = require('../../utils/iconPath.js');
Page({
  data: {
    currentPage: 1,
    pageSize: 10,
    total: 1000,
    orderList: [],
    __noMoreData__: {
      isMore: false,
      title: '正在加载更多数据了...'
    }
  },
  onPullDownRefresh(){
    this.setData({
      currentPage: 1,
      pageSize: 10,
      total: 1000,
      orderList: [],
      __noMoreData__: {
        isMore: true,
        title: '正在加载更多数据了...'
      }
    })
    setTimeout(() => { 
      this.getOrderList();
    },1000);
  },
  onLoad(){
    // 将 base64 的文件保存到当前page的data中
    this.setData({ iconList: iconList });
  },
  onShow(){
    // 获取订单列表
    this.getOrderList();
  },
  // 获取订单列表
  getOrderList(){
    // 判断是否还有更多数据
    if (!app.loadMoreData(this)){return}
    // 请求数据
    wx.request({
      url: urlList.orderListUrl,
      data: { 
        currentPage: this.data.currentPage,
        pageSize: this.data.pageSize,
        token: app.getToken()
      },
      success: res => {
        // console.log(res)
        app.withData(res, this, res => { 
          if (res.data.state == 'true'){
            // console.log(res.data.data.orderList)
            this.setData({
              currentPage: ++this.data.currentPage,
              total: res.data.data.total,
              orderList: this.data.orderList.concat(res.data.data.orderList)
            })
            wx.stopPullDownRefresh();
          }
        })
      }
    })
  },
  // 滚动到底部加载
  onReachBottom() {
    this.getOrderList();
  }
})
2. 订单页的右箭头和更多商品WXML
<view class='rui-order-li' wx:for="{{orderList}}" wx:key="orderList">
  <view class='rui-order-head'>
    <view class='rui-order-shop-name' data-shop='{{item}}' bindtap='goToShop'>
      {{item.userName}}
      // 读取右箭头的base64的图片
      <text class='rui-icon' style='background:url({{iconList.moreUrl}}) no-repeat center center/8px 15px;height:15px;width:15px;'></text>
    </view>
    <view class='rui-order-state {{item.orderState == 0 ? "rui-colory" : item.orderState == 4 ? "rui-colorg" : "rui-colorp"}}'>{{item.orderStateText}}</view>
  </view>
  <view class='rui-order-goodslist' id='{{item.orderID}}' bindtap='getOrderId'>
    <view class='rui-fl'>
      <image wx:for="{{item.goodsList}}" wx:if="{{goodsnum < 5}}" wx:for-index="goodsnum" wx:key="goodsList" wx:for-item="goods" class='rui-order-goodsimg' src="{{goods.sPics}}"></image>
      // 读取更多商品的base64的图片
      <view class='rui-order-detail-btn' style='background:url({{iconList.moreGoodsUrl}}) no-repeat center center/25px 5px;'></view>
    </view>
    <view class='rui-order-price'>
      <view class='rui-colory'>¥{{item.goodsAmountAll}}</view>
      <view class='rui-colorp rui-fs12'>共{{item.totalGoodsNum}}件</view>
    </view>
  </view>
  <view class='rui-order-head'>
    {{item.orderTime}}
    <view wx:if="{{item.orderState == 0}}" class='order-btn' data-orderid="{{item}}" bindtap='goToPay'>立即支付</view>
    <view wx:if="{{item.orderState == 4}}" class='order-btn' data-orderid="{{item}}" bindtap='repeatBuy'>再次购买</view>
  </view>
</view>

base64 的保存文件编辑

const iconPath = {
  starUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4OWIzY2I4MC1jMGU1LTQxNGMtODg4My0yNjNjODQ1MTRjOWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODg1REFBQjg0Nzg2MTFFOEJBNzc5NDg4NzE1MUY0QUMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODg1REFBQjc0Nzg2MTFFOEJBNzc5NDg4NzE1MUY0QUMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZmUyYzhkYWYtOTUyZi0yYjRlLWFjODYtNzY3OGM2NzNmNDA1IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZmJjNjU3ZTktNDQ3Ny0xMWU4LWJjNzUtZjgyODA4NzM1M2M1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+p+ef2gAAAMhJREFUeNpi/N9nxIADlEPp1UB8D12SEY/G/zA12CSZGHCD93jk8Go8S0ijEhCnAbEgA3EgFIiNmaCMmUB8F0q7YFEMMrwDiN8B8SqQRSxQv+yBakiD4ntILjgDsgHNC/eQQ1UQ5gwojez01VDD98CihgUtFGch8dOQbEhHD2UmHBGfBrWlE+qCDnRFLGj8NKii90i2uCD5uxObjcgmhyE5DcbuQHI+isYOaIB0QgMBBkA2VaD5G8WprlD/dWLx9yyoofDAAwgwAIUJMVmp6d19AAAAAElFTkSuQmCC'
}
module.exports = iconPath;

base64 的保存文件引入

const iconList = require('../../utils/iconPath.js');

base64 的保存文件使用

js

// 将 base64 的文件保存到当前page的data中
this.setData({ iconList: iconList });

wxml

// 读取更多商品的base64的图片
<view class='rui-order-detail-btn' style='background:url({{iconList.moreGoodsUrl}}) no-repeat center center/25px 5px;'></view>

总结

解决问题的方法有很多,只要找到适合自己的最好。个人建议微信小程序的图片可以两种方式结合使用。

WXRUI体验二维码

WXRUI体验码

如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢!

其他

我的博客,欢迎交流!

我的CSDN博客,欢迎交流!

微信小程序专栏

前端笔记专栏

微信小程序实现部分高德地图功能的DEMO下载

微信小程序实现MUI的部分效果的DEMO下载

微信小程序实现MUI的GIT项目地址

微信小程序实例列表

前端笔记列表

游戏列表

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

微信小程序----相对路径图片不显示 的相关文章

  • lcm in qcom

    文章目录 lcm需要生产的相关文件 lcm in lk lcm in kernel 一些注意的事项 其他平台 sdm845 in kernel in uefi lcm需要生产的相关文件 根据fae提供的相关资料去配置自己的 xml文件 如下
  • 电信资源管理系统性能测试总结

    1 电信资源管理系统性能测试总结 陈建慧 2007 7 30 1 1 技术问题与解决方法 1 1 1 Loadrunner JAVA脚本 唯一参数问题 最初采用JNI 调用delphi的DLL JAVA脚本中未使用static synchr
  • ColossalAI-Chat训练手册(RLHF)

    目录 1 什么的RLHF流程 2 环境安装 3 训练 运行 3 1 模型下载 3 1 SFT supervised fine tuning 3 2 训练奖励模型 Training reward model 3 3 RL Training m
  • 将点云数据投影到图像上并生成带有颜色的激光雷达点云:Python实现指南

    1 引言 点云数据在许多应用领域 例如地理信息系统 自动驾驶汽车 机器人 3D建模等领域都有重要应用 这种数据通常是3D空间中的点集 其中每个点都具有三维坐标 但是 通过将点云数据投影到2D图像上并为其添加颜色 我们可以更容易地可视化和分析
  • 安卓开发学习视频!深入浅出Android性能调优,最强技术实现

    前言 找工作还是需要大家不要紧张 有我们干这一行的接触人本来就不多 难免看到面试官会紧张 主要是因为怕面试官问的问题到不上来 那时候不要着急 答不上了的千万不然胡扯一些 直接就给面试官说这块我还没接触到 以后如果工作当中遇到的话我可以很快的

随机推荐

  • Docker 容器监控 - Weave Scope

    Author rab 目录 前言 一 环境 二 部署 三 监控 3 1 容器监控 单 Host 3 2 容器监控 多 Host 总结 前言 Docker 容器的监控方式有很多 如 cAdvisor Prometheus 等 今天我们来看看其
  • 【linux基础9】系统文件的压缩和传输(scp,rsync传输的使用方式和压缩解压方式)

    系统文件的压缩和传输 一 实验环境 二 传输文件 一 基本信息 二 scp命令 一 指令 二 测试 scp远程传输文件 三 rsync命令 一 指令 二 rsync远程同步传输 四 文件的归档压缩 1 文件归档 装进一个箱子里面 2 压缩和
  • Python数据分析之:pandas 的索引方式 data.loc[], data[][]

    文章目录 1 data loc index column 2 data column index 1 data loc index column 使用 loc 第一个参数是行索引 第二个参数是列索引 import pandas as pd
  • java中输出一个字符串中出现次数最多的字符以及次数

    1 先把字符串转化为数组 toCharArray 2 定义一个数组count i 存取每个字符 以及数量 count i 3 计算每个字符 以及值 4 取count的最大值 public class MaxString public sta
  • fortran中use blas95、use f95_precision、use lapack95报错的问题

    fortran中use blas95 use f95 precision use lapack95报错的问题 不废话了 直入正题 这几个模块是mkl中的库 需要点击项目 gt 属性 找到fortran 选择其中的Libraries 选择其中
  • sparkstreaming---pom.xml

  • fifteenth day for learning

    apace虚拟主机功能 一 基于IP地址 1 创建基于IP得网站目录及首页 如 home www html 129 home www html 130 echo 129 gt home www html 129 index html ech
  • ZooKeeper服务器启动流程

    ZooKeeper服务器启动 1 单机版服务器启动 ZooKeeper服务器的启动 大体可以分为下面五个主要步骤 配置文件解析 初始化数据管理器 初始化网络I O管理器 数据恢复和对外服务 流程如下图所示 2 集群版服务器启动 Leader
  • Python中的嵌套循环

    1 什么是嵌套循环 所谓嵌套循环就是一个外循环的主体部分是一个内循环 内循环或外循环可以是任何类型 例如 while 循环或 for 循环 例如 外部 for 循环可以包含一个 while 循环 反之亦然 外循环可以包含多个内循环 循环链没
  • Maven学习笔记十:Maven坐标和依赖(依赖的配置)

    Maven坐标和依赖 依赖的配置 依赖会有基本的groupId artifactId和version等元素组成 其实一个依赖声明可以包含如下的一些元素
  • 诺基亚NoKia 8250维修笔记

    今天从桌底翻出一台诺基亚8250 零几年的老物件 尝试着加电启动 发现无论如何都是按下开机键电流上升到30MA然后回到0 看了下元器件无明显损坏 各电容均正常无击穿现象 正负极无短路 怀疑可能是芯片坏了或者晶振坏了 网上找了相关资料 怀疑可
  • 升级Mac后,连接easyconnect不能访问网页

    升级Mac后 连接运行EasyConnect后 打开网页如下提示代理问题 查看论坛 发现可能是升级Mac后导致的 见链接 关于Mac OS10 15无法使用SSL VPN 的问题预警 根据其中的连接 https bbs sangfor co
  • React组件写法

    一 傻瓜组件也叫展示组件 负责根据props显示页面信息 聪明组件也叫容器组件 负责数据的获取 处理 优势 分离工作组件和展示组件 解耦 提高组件的重用行 提高组件的可用性和代码阅读 便于测试与后续的维护 二 深入理解函数组件 函数式组件是
  • ffmpeg builds by zeranoe_手把手搭建FFmpeg的Windows环境

    1 简述 在Windows平台 搭建FFmpeg开发环境 能够帮助我们做各种开发的测试 如推流 拉流 滤镜等 2 下载源码 1 登陆FFMPEG官网 官网地址 http ffmpeg org 下载4 2 1版本源码地址 https ffmp
  • 复杂链表的复制java - 左神算法基础课04 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天讲讲复杂链表的复制 一个链表在原来的基础上新增一个指针 随机指向任意一个节点 可能是null 然后要求你复制链表 随机链表的生成 复杂链表 public clas
  • 在sqlplus中执行语句时候报错误SP2-0734: 未知的命令开头"id varchar..." - 忽略了剩余的行

    在sqlplus中执行语句时候报unknown command beginning错误 提交给维护部门批量修改数据的文件 在sqlplus中执行时候报错 SP2 0734 unknown command beginning where t
  • [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)

    这是作者新开的一个专栏 主要翻译国外知名安全厂商的APT报告 了解它们的安全技术 学习它们溯源APT组织和恶意代码分析的方法 希望对您有所帮助 当然 由于作者英语有限 会借助机翻进行校验 还请包涵 前文分享了Lazarus攻击工业事件 主要
  • Layui之动态树 左侧树形菜单栏 详细全面

    本期看点 该篇是运用Layui框架来编写后台树形菜单栏 并且结合MySql来编写完成 目录 一 效果图 二 具体步骤 2 1 数据库 2 2 树形导航栏 第一个类 Treevo 第二个类 BuildTree 2 3 Dao方法 2 3 1
  • java中对象、成员变量、静态变量、方法的内存分配

    http jameszhao1987 iteye com blog 1320630 ava中内存主要包含4块 即heap 堆内存 stack 栈内存 data segment 静态变量或是常量存放区 codesegment 方法区 堆内存中
  • 微信小程序----相对路径图片不显示

    WXRUI体验二维码 如果文章对你有帮助的话 请打开微信扫一下二维码 点击一下广告 支持一下作者 谢谢 出现场景 在本地调试的时候本地图片显示 但是手机浏览的时候本地图片不显示 出现图片不显示的原因 小程序只支持网络路径和base64的图片