webp.html 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>webp</title>
  6. <style>
  7. #image-display {
  8. max-width: 100%;
  9. max-height: 100%;
  10. border: 1px solid gray;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <h1>粘贴图片并展示</h1>
  16. <p>右键粘贴图片,本地图片或网络图片地址都可以,将被压缩为webp格式并展示<span id="status"></span></p>
  17. <div id="image-container">
  18. <img id="image-display" src="" alt="Image Display">
  19. </div>
  20. <script>
  21. const imageDisplay = document.getElementById("image-display");
  22. // 监听粘贴事件
  23. document.addEventListener("paste", (event) => {
  24. // 获取粘贴板数据
  25. const items = event.clipboardData.items;
  26. if (!items) {
  27. return;
  28. }
  29. // 查找图片数据
  30. for (let i = 0; i < items.length; i++) {
  31. if (items[i].type.indexOf("image") !== -1) {
  32. // 获取图片文件或URL
  33. const blob = items[i].getAsFile();
  34. const imageUrl = URL.createObjectURL(blob);
  35. // 将图片展示
  36. imageDisplay.src = imageUrl;
  37. document.getElementById("status").innerText = " 压缩中……";
  38. // 压缩为webp格式
  39. const image = new Image();
  40. image.onload = () => {
  41. const canvas = document.createElement("canvas");
  42. canvas.width = image.naturalWidth;
  43. canvas.height = image.naturalHeight;
  44. const context = canvas.getContext("2d");
  45. context.drawImage(image, 0, 0);
  46. canvas.toBlob((webpBlob) => {
  47. // 将压缩后的webp图片展示在页面上
  48. const webpUrl = URL.createObjectURL(webpBlob);
  49. imageDisplay.src = webpUrl;
  50. document.getElementById("status").innerText = " 已压缩☺";
  51. }, "image/webp", 0.8);
  52. };
  53. image.src = imageUrl;
  54. // 防止页面跳转
  55. event.preventDefault();
  56. }
  57. }
  58. });
  59. </script>
  60. </body>
  61. </html>