base64与图片的转换和预览

新建一个html,然后copy如下代码,保存,然后打开浏览器就能看到如下的样式

页面样式

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>图片预览 &amp; Base64 查看</title>
  <style>
    :root {
      --primary: #5c6bc0;
      --light: #f5f5f5;
      --dark: #424242;
      --accent: #ff7043;
      --radius: 8px;
    }
    * {
      box-sizing: border-box;
    }
    body {
      margin: 0;
      font-family: "Helvetica Neue", Arial, sans-serif;
      background-color: var(--light);
      color: var(--dark);
      display: flex;
      justify-content: center;
      align-items: flex-start;
      padding: 40px 0;
    }
    .container {
      width: 90%;
      max-width: 800px;
      background: #fff;
      border-radius: var(--radius);
      box-shadow: 0 4px 16px rgba(0,0,0,0.1);
      padding: 24px;
    }
    h1 {
      margin-top: 0;
      text-align: center;
      color: var(--primary);
    }
    .section {
      margin-bottom: 24px;
    }
    .section label {
      display: block;
      margin-bottom: 8px;
      font-weight: bold;
    }
    .section input[type="text"],
    .section textarea {
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: var(--radius);
      font-family: monospace;
      resize: vertical;
      background: #fafafa;
    }
    .section input[type="file"] {
      display: block;
      margin-top: 4px;
    }
    .buttons {
      text-align: center;
      margin-top: 8px;
    }
    .buttons button {
      background: var(--primary);
      color: #fff;
      border: none;
      padding: 10px 20px;
      border-radius: var(--radius);
      cursor: pointer;
      font-size: 1rem;
      transition: background 0.3s ease;
      margin: 0 8px;
    }
    .buttons button:hover {
      background: var(--accent);
    }
    #preview {
      display: block;
      max-width: 100%;
      border-radius: var(--radius);
      margin: 12px auto;
      box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    }
    #base64Output {
      height: 120px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>图片预览 &amp; Base64 查看</h1>

    <div class="section">
      <label for="base64Input">粘贴 Base64 字符串</label>
      <textarea id="base64Input" placeholder="以 data:image/png;base64,... 开头"></textarea>
    </div>

    <div class="section">
      <label for="imageInput">或 上传 图片</label>
      <input type="file" id="imageInput" accept="image/*">
    </div>

    <div class="buttons">
      <button id="showBtn">显示预览</button>
      <button id="clearBtn" style="background:#999;">清空</button>
    </div>

    <div class="section">
      <label>图片预览</label>
      <img id="preview" alt="预览图像" style="display:none;">
    </div>

    <div class="section">
      <label for="base64Output">对应的 Base64 字符串</label>
      <textarea id="base64Output" readonly placeholder="这里会显示图片的 Base64"></textarea>
    </div>
  </div>

  <script>
    const base64Input = document.getElementById('base64Input');
    const imageInput = document.getElementById('imageInput');
    const preview = document.getElementById('preview');
    const base64Output = document.getElementById('base64Output');
    const showBtn = document.getElementById('showBtn');
    const clearBtn = document.getElementById('clearBtn');

    function displayPreview() {
      const b64 = base64Input.value.trim();
      const file = imageInput.files[0];

      if (b64) {
        // 使用粘贴的 Base64
        preview.src = b64;
        base64Output.value = b64;
        preview.style.display = 'block';
      } else if (file) {
        // 使用上传的文件,转为 Base64
        const reader = new FileReader();
        reader.onload = (e) => {
          preview.src = e.target.result;
          base64Output.value = e.target.result;
          preview.style.display = 'block';
        };
        reader.readAsDataURL(file);
      } else {
        preview.style.display = 'none';
        base64Output.value = '';
      }
    }

    function clearAll() {
      base64Input.value = '';
      imageInput.value = '';
      preview.style.display = 'none';
      base64Output.value = '';
    }

    showBtn.addEventListener('click', displayPreview);
    clearBtn.addEventListener('click', clearAll);

    // 可选:在粘贴或选图时自动预览
    base64Input.addEventListener('input', () => {
      if (base64Input.value.trim()) {
        displayPreview();
      }
    });
    imageInput.addEventListener('change', displayPreview);
  </script>
</body>
</html>
相关推荐
ZHOUPUYU8 小时前
PHP性能分析与调优:从定位瓶颈到实战优化
开发语言·后端·html·php
Dxy12393102169 小时前
HTML常用布局详解:从基础到进阶的网页结构指南
前端·html
柒.梧.1 天前
Redis通用命令+五大核心数据结构
前端·bootstrap·html
Dxy12393102161 天前
HTML常用标签详解
前端·html
Predestination王瀞潞1 天前
5.4.1 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web)基本信息&核心设计目标&现实意义
css·网络·网络协议·html·url·www
小J听不清2 天前
CSS 外边距(margin)全解析:取值规则 + 实战用法
前端·javascript·css·html·css3
小J听不清2 天前
CSS 边框(border)全解析:样式 / 宽度 / 颜色 / 方向取值
前端·javascript·css·html·css3
赵锦川2 天前
大屏比例缩放
前端·javascript·html
我命由我123452 天前
Element Plus 2.2.27 的单选框 Radio 组件,选中一个选项后,全部选项都变为选中状态
开发语言·前端·javascript·html·ecmascript·html5·js
dzj8882 天前
云朵字生成器-html
前端·css·html·云朵字