圖片文件未正確加載?—— Webpack 無法正確解析圖片,生成了一個空的 Base64 URL

如果你打印出的圖片 URL 是 data:image/png;base64, 后面沒有實際的 Base64 數據,可能有以下幾種原因:


??1. 圖片文件未正確加載??

  • ??可能原因??:圖片路徑錯誤,導致 Webpack 無法正確解析圖片,生成了一個空的 Base64 URL。
  • ??解決方案??:
    • 檢查圖片路徑是否正確(@/assets/image/icons/fog.png 是否真實存在)。
    • 在瀏覽器開發者工具(Network 面板)查看圖片請求是否成功。

??2. Webpack 配置問題??

  • ??可能原因??:
    • url-loaderfile-loader 配置不正確,導致圖片沒有被正確轉換成 Base64。
    • 圖片文件過大,超過了 url-loaderlimit 限制,但 file-loader 未正確接管。
  • ??解決方案??:
    • 檢查 Webpack 配置,確保圖片處理規則正確:
      // webpack.config.js
      module.exports = {module: {rules: [{test: /\.(png|jpe?g|gif|svg)$/i,use: [{loader: 'url-loader',options: {limit: 8192, // 小于 8KB 的圖片轉 Base64name: 'images/[name].[hash:8].[ext]', // 大于 limit 的圖片輸出路徑},},],},],},
      };
    • 如果圖片較大(超過 limit),確保 file-loader 已安裝并正確配置。

??3. 動態導入(import())未正確處理??

  • ??可能原因??:
    • 使用 import() 動態導入圖片時,返回的是 Promise,而不是直接的 URL。
    • 如果直接打印 import() 的結果,會得到 Promise 對象,而不是 Base64 數據。
  • ??解決方案??:
    • 改用靜態 importrequire
      // ? 推薦:靜態導入
      import fogUrl from '@/assets/image/icons/fog.png';
      console.log(fogUrl); // 直接打印 URL// 或者使用 require
      const fogUrl = require('@/assets/image/icons/fog.png');
      console.log(fogUrl);
    • 如果必須用 import(),需要 await
      const fogUrl = await import('@/assets/image/icons/fog.png');
      console.log(fogUrl.default); // 注意:動態導入的模塊在 .default 里

??4. 圖片文件損壞??

  • ??可能原因??:圖片文件本身損壞,導致 Webpack 無法正確讀取并生成 Base64。
  • ??解決方案??:
    • 嘗試用其他圖片替換測試,看是否能正常顯示。
    • 用圖片查看工具檢查圖片是否能正常打開。

??5. 瀏覽器緩存問題??

  • ??可能原因??:瀏覽器緩存了錯誤的圖片 URL(如之前的空 Base64)。
  • ??解決方案??:
    • 清除瀏覽器緩存,或使用 Ctrl + F5 強制刷新。
    • 在開發者工具(Network 面板)勾選 ??Disable cache?? 測試。

??調試建議??

  1. ??檢查 console.log(url) 輸出??:

    • 如果輸出 data:image/png;base64, 后面沒有數據,說明圖片未正確加載。
    • 如果輸出 Promise,說明你用了 import() 但未 await
    • 如果輸出 [object Module],說明需要 .default(如 url.default)。
  2. ??檢查 Webpack 構建日志??:

    • 運行 npm run buildyarn build,看是否有圖片相關的警告或錯誤。
  3. ??直接訪問圖片 URL??:

    • 在瀏覽器地址欄輸入 http://localhost:8080/assets/image/icons/fog.png(根據你的開發服務器調整路徑),看是否能訪問到圖片。

??最終推薦寫法??

// ? 靜態導入(推薦)
import fogUrl from '@/assets/image/icons/fog.png';
import fireUrl from '@/assets/image/icons/fire.png';
import floodUrl from '@/assets/image/icons/flood.png';
import epidemicUrl from '@/assets/image/icons/epidemic.png';const customConfig = {flood: { url: floodUrl, attr: { x: 0, y: 0, width: 48, height: 48 } },fire: { url: fireUrl, attr: { x: 0, y: 0, width: 48, height: 48 } },fog: { url: fogUrl, attr: { x: 0, y: 0, width: 48, height: 48 } },epidemic: { url: epidemicUrl, attr: { x: 0, y: 0, width: 48, height: 48 } },
};// 使用示例
const { url, attr } = customConfig.flood;
console.log(url); // 應該輸出完整的 data:image/png;base64,... 或正確的圖片路徑
const customIcon = svgCreate('image', { ...attr, href: url });

如果問題仍然存在,請提供:

  1. console.log(url) 的完整輸出。
  2. 你的 Webpack 配置(特別是 module.rules 部分)。
  3. 圖片文件的實際存放路徑。

在你的代碼中,我看到有幾個關于圖片導入和使用方式的問題,這可能導致URL訪問不到的問題。以下是分析和解決方案:

問題分析

  1. ??混合使用不同導入方式??:

    • 你使用了多種導入圖片的方式(importrequire、動態import()),這可能導致不一致的行為
    • import()返回的是Promise,不能直接作為URL使用
  2. ??URL格式問題??:

    • 不同導入方式產生的URL格式可能不同(可能是模塊對象、字符串或Promise)

解決方案

方案1:統一使用靜態導入(推薦)
import fogUrl from '@/assets/image/icons/fog.png';
import fireUrl from '@/assets/image/icons/fire.png';
import floodUrl from '@/assets/image/icons/flood.png';
import epidemicUrl from '@/assets/image/icons/epidemic.png';const customConfig = {flood: {url: floodUrl,attr: { x: 0, y: 0, width: 48, height: 48 }},fire: {url: fireUrl,attr: { x: 0, y: 0, width: 48, height: 48 }},fog: {url: fogUrl,attr: { x: 0, y: 0, width: 48, height: 48 }},epidemic: {url: epidemicUrl,attr: { x: 0, y: 0, width: 48, height: 48 }}
};// 使用時
const { url, attr } = customConfig[key];
console.log(url, attr);
const customIcon = svgCreate('image', {...attr,href: url
});
方案2:統一使用require
const customConfig = {flood: {url: require('@/assets/image/icons/flood.png'),attr: { x: 0, y: 0, width: 48, height: 48 }},fire: {url: require('@/assets/image/icons/fire.png'),attr: { x: 0, y: 0, width: 48, height: 48 }},fog: {url: require('@/assets/image/icons/fog.png'),attr: { x: 0, y: 0, width: 48, height: 48 }},epidemic: {url: require('@/assets/image/icons/epidemic.png'),attr: { x: 0, y: 0, width: 48, height: 48 }}
};
方案3:處理動態導入(如果需要)

如果你確實需要使用動態導入:

const customConfig = {// ...其他配置fire: {url: import('@/assets/image/icons/fire.png').then(module => module.default),attr: { x: 0, y: 0, width: 48, height: 48 }}
};// 使用時需要await
const { url: urlPromise, attr } = customConfig[key];
const url = await urlPromise;
const customIcon = svgCreate('image', {...attr,href: url
});

額外建議

  1. ??檢查webpack配置??:

    • 確保你的webpack配置了正確的loader處理圖片文件(通常是file-loaderurl-loader
  2. ??路徑問題??:

    • 確認@別名在webpack中正確配置,指向你的src目錄
  3. ??調試??:

    • 在訪問URL前先console.log它,看看實際得到的是什么
    • 確保URL是字符串格式(有些導入方式可能需要.default
  4. ??SVG使用??:

    • 確認你的svgCreate函數和瀏覽器環境支持使用外部圖片作為SVG的href

選擇方案1通常是最簡單可靠的方式,除非你有特殊的代碼分割需求需要使用動態導入。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82445.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3D打印仿造+ AI大腦賦能,造出會思考的全景相機

在自然界的生存競賽里,節肢動物堪稱視覺界的 "卷王"!那些長著復眼的小機靈鬼,比如蜜蜂、蜻蜓,別看個頭小,視覺能力卻超強。 現在,科學家把它們的眼睛 " 偷"過來啦 —— 不是真偷&…

rabbitmq單機多實例部署

RabbitMQ 單實例部署 單實例部署是指在一臺服務器上運行一個 RabbitMQ 實例。這種部署方式適用于小型應用或開發環境,配置簡單,資源占用較少。單實例部署的核心是安裝 RabbitMQ 并啟動服務,通常需要配置 Erlang 環境,因為 RabbitMQ 是基于 Erlang 編寫的。單實例部署的優勢…

知識宇宙-職業篇:后端工程師

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 目錄 一、后端工程師的定義與職責1. 什么是后端工程師?2. 主要工作職責 二、…

機試 | vector/array Minimum Glutton C++

題目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴數&#xff0c;X&#xff1a;總甜度閾值&#xff0c;Y&#xff1a;總咸度閾值int…

【Django ORM】三萬字了解Django ORM的基本概念和基本使用

第一章 Django ORM 概述 1.1 什么是Django ORM 1.1.1 ORM的基本概念 ORM 即對象關系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;它是一種編程技術&#xff0c;用于在面向對象編程語言&#xff08;如 Python&#xff09;和關系型數據庫&#xff08;如…

在springboot項目中是否可以使用兩個不同地址的redis

在Spring Boot項目中可以通過多數據源配置的方式使用兩個不同地址的Redis實例。以下是具體實現方案 1.依賴配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusio…

JMeter 教程:監控性能指標 - 第三方插件安裝(PerfMon)

目錄 【簡單介紹】 ? PerfMon 插件是什么&#xff1f; &#x1f6e0;? 安裝 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安裝&#xff08;推薦&#xff09; &#x1f50c; 安裝完成后組件介紹 &#x1f310; 服務端安裝 ServerAgent&#xff08;用于被…

【后端高階面經:數據庫篇】19、分庫分表查詢困境:無分庫分表鍵時的高效應對

一、分庫分表下的無分片鍵查詢困境 在分布式數據庫架構中,分庫分表通過分片鍵(如買家ID)將數據分散存儲,顯著提升了單表性能和系統擴展性。然而,當業務需要從非分片鍵維度(如賣家ID)進行查詢時,傳統架構暴露出以下核心問題: 1.1 跨分片掃描的性能災難 數據分散性:以…

ARM架構

目錄 哈佛結構 arm指令格式 有符號數的溢出&#xff08;8bit)? 無符號數的進位/借位 CPSR&#xff08;當前程序狀態寄存器&#xff09; ARM模式 arm異常類型 ARMv7架構異常向量表 arm異常的處理流程 arm寄存器 堆棧指針寄存器 arm模式切換流程 LDR指令、STR指令 指…

canvas(三)-動畫3d

在 <canvas> 中實現 3D 動畫通常需要借助 WebGL 技術,因為原生的 2D 上下文(CanvasRenderingContext2D)無法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API,可以直接在瀏覽器中實現高性能的 3D 圖形渲染。以下是關于 <canvas> 3D 動畫的概念…

右鍵打開 pycharm 右鍵 pycharm

文件夾右鍵打開pycharm aaa.reg notepad 右下角把文件格式改為&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…

一張紙決定的高度

從我捧起《格局》這個本書開始&#xff0c;轉眼間兩個月過去了。 回頭望一望&#xff0c;好似還在昨天。 這兩個月&#xff0c;心態在變&#xff0c;前進的方向在變&#xff0c;但唯一不變的就是每天晚上睡前&#xff0c;留給自己十分鐘的讀書時光。 我也從來沒想過&#xf…

R 語言科研繪圖 --- 熱力圖-匯總

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

新手到資深的Java開發編碼規范

新手到資深的開發編碼規范 一、前言二、命名規范&#xff1a;代碼的 “第一印象”2.1 標識符命名原則2.2 命名的 “自描述性” 原則2.3 避免魔法值 三、代碼格式規范&#xff1a;結構清晰的視覺美學3.1 縮進與空格3.2 代碼塊規范3.3 換行與斷行 四、注釋規范&#xff1a;代碼的…

鴻蒙倉頡開發語言實戰教程:實現商城應用詳情頁

昨天有朋友提到鴻蒙既然有了ArkTs開發語言&#xff0c;為什么還需要倉頡開發語言。其實這個不難理解&#xff0c;安卓有Java和Kotlin&#xff0c;iOS先后推出了Objective-C和Swift&#xff0c;鴻蒙有兩種開發語言也就不奇怪了。而且倉頡是比ArkTs更加靈活的語言&#xff0c;雖然…

CNN手寫數字識別/全套源碼+注釋可直接運行

數據集選擇&#xff1a; MNIST數據集來自美國國家標準與技術研究所, National Institute of Standards and Technology (NIST)。訓練集&#xff08;training set&#xff09;由來自250個不同人手寫的數字構成&#xff0c;其中50%是高中學生&#xff0c;50%來自人口普查局&…

探秘谷歌Gemini:開啟人工智能新紀元

一、引言 在人工智能的浩瀚星空中&#xff0c;每一次重大模型的發布都宛如一顆璀璨新星閃耀登場&#xff0c;而谷歌 Gemini 的亮相&#xff0c;無疑是其中最為耀眼的時刻之一。它的出現&#xff0c;猶如在 AI 領域投下了一顆重磅炸彈&#xff0c;引發了全球范圍內的廣泛關注與熱…

小白場成長之路-計算機網絡(三)

文章目錄 一、網絡參數配置1.圖形化配置2.命令行配置2.1、ifconfig命令2.2ifup和ifdown子接口配置 2.3 多ip地址配置2.4子接口配置 總結 一、網絡參數配置 1.圖形化配置 NetworkManager&#xff0c;Linux7系統中&#xff0c;一般建議停止該管理方式&#xff1b;Linux8以上操作…

WireShark網絡抓包—詳細教程

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Wireshark入門指南&#xff1a;從零開始掌握網絡抓包分析 一、Wireshark是什么&#xff1f; Wireshark 是全球最受歡迎的開源網絡協議分析工具&#xff0c;被廣泛應用于網絡故障排查、協議學習、網絡安全分析等領域。它支…

區塊鏈DApp的開發技術方案

區塊鏈DApp開發技術方案&#xff1a;架構設計與實踐指南 引言&#xff1a;DApp的技術革新與生態價值 區塊鏈技術的去中心化特性與智能合約的自動化執行能力&#xff0c;推動DApp&#xff08;去中心化應用&#xff09;成為Web3.0的核心載體。截至2025年&#xff0c;全球DApp用…