<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>图片到Base64 URL</title> <style> html, body { font-family: sans-serif; padding: 0; margin: 0; width: 100%; height: 100%; } body { display: flex; } .drop-zone { flex: 1; background: #E6E6E6; transition: background 50ms ease-in; display: flex; flex-direction: column; } .drop-zone p { text-align: center; } .drag-over .drop-zone { background: gold; } .error { color: red; } textarea { border: 0; background: none; display: block; padding: 0; margin: 0; font-family: monospace; flex: 1; } textarea:focus { outline: none; } .get-it { display: none; } .get-it a { flex: 1; text-align: center; padding: 0.5rem; } .success .get-it { display: flex; } </style></head><body> <div class="drop-zone"> <p>将您的图片拖放到此处以将其转换为Base64数据URL</p> <p class="error"></p> <div class="get-it"> <a id="copy" href="#copy">复制</a> <a id="download" download="base64.txt">下载</a> </div> <textarea></textarea> </div> <script> (() => { 'use strict'; const body = document.body; const dropZone = document.querySelector('.drop-zone'); const error = document.querySelector('.error'); const textarea = document.querySelector('textarea'); const download = document.querySelector('#download'); const copy = document.querySelector('#copy'); const MIME_TYPE = 'text/plain'; window.addEventListener('dragenter', e => { body.classList.add('drag-over'); e.preventDefault(); }, false); window.addEventListener('dragleave', e => { body.classList.remove('drag-over'); e.preventDefault(); }, false); dropZone.addEventListener('dragover', e => { e.preventDefault(); }); dropZone.addEventListener('drop', e => { e.preventDefault(); const dt = e.dataTransfer; const file = dt.items[0].getAsFile(); if (!/image/.test(file.type)) { return showError('File has to be an image file'); } const reader = new FileReader(); reader.addEventListener('load', () => { textarea.value = reader.result; const blob = new Blob([reader.result], {type: MIME_TYPE}); const href = window.URL.createObjectURL(blob); download.setAttribute('href', href); download.setAttribute('downloadUrl', [ MIME_TYPE, 'base64.txt', href, ].join(':')); body.classList.remove('drag-over'); body.classList.add('success'); }); reader.readAsDataURL(file); }); copy.addEventListener('click', (event)=> { event.preventDefault(); const range = document.createRange(); range.selectNode(textarea); window.getSelection().addRange(range); try { document.execCommand('copy'); } catch (error) { alert('Copy failed'); } }); function showError(message) { body.classList.remove('drag-over'); error.innerText = message; setTimeout(()=> { error.innerText = ''; }, 5000); } })(); </script></body></html>
评论已关闭!