整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用JS把圖片壓縮并轉成Base64的簡便方法

          個過程用到了畫布(canvas)來幫忙完成

          過程: 選擇圖片文件 > 準備畫布 > 按需壓縮圖片并繪制在畫布上 > 生成Base64 > 完成.

          先上效果圖

          詳細過程如下:

          準備一個簡潔的HTML文件, 代碼如下

          用一個file dom來選擇圖片文件

          <!DOCTYPE html>
          <html lang="zh-CN">
              <script type="text/javascript" src="../js/jquery.min.js"></script>
              <body>
                  <input name="file" id="thumbnail" type="file" onchange="previewPic(this)"
                      accept="image/x-png, image/jpg, image/jpeg, image/gif" />
              </body>
          </html>

          為了方便后面的代碼操作, 引用了JQuery

          然后準備2個容器, 一個放預覽圖; 另一個放Base64內容

          <div>下面這個Div用來預覽圖片</div>
          <div id="showpic" style="padding:7px;"></div>
          
          <div>下面這個Div用來存放Base64內容</div>
          <div id="picb64"></div>

          接下來是靈魂:JS代碼

                      function previewPic(tis) {
                          var fileObj = tis.files[0];         //獲取圖片文件對象
                          if (undefined == fileObj) { console.log("未選擇待上傳的文件"); return; }
                          var picid = "imgComp";
                          $("<img>", {
                              id: picid,
                          }).appendTo($("#showpic"));         //先生成IMG的DOM,以防順序亂掉
                          genCompPic(picid, fileObj);
                      }
                      function genCompPic(picid, fileObj) {
                          var ready = new FileReader();
                          /*開始讀取指定的Blob對象或File對象中的內容. 當讀取操作完成時,readyState屬性的值會成為DONE,如果設置了onloadend事件處理程序,則調用之.同時,result屬性中將包含一個data: URL格式的字符串以表示所讀取文件的內容.*/
                          ready.readAsDataURL(fileObj);
                          ready.onload = function () {
                              canvasDataURL(this.result, { width: 200 }, function (base64Codes) {
                                  $("#"+ picid).attr("src", base64Codes); //在IMG DOM中顯示圖片預覽
                                  $("#picb64").html(base64Codes);         //得到Base64結果,填充到Div中顯示
                              })
                          }
                      }
                      //利用canvas生成壓縮后的圖片
                      function canvasDataURL(path, obj, callback) {
                          var img = new Image();
                          img.src = path;
                          img.onload = function () {
                              var w = obj.width;
                              var h = obj.width / (this.width/ this.height);  //按比例壓縮,計算出等比例高
                              var canvas = document.createElement('canvas');  //生成canvas
                              var ctx = canvas.getContext('2d');
                              // 創建屬性節點
                              var anw = document.createAttribute("width");
                              anw.nodeValue = w;
                              var anh = document.createAttribute("height");
                              anh.nodeValue = h;
                              canvas.setAttributeNode(anw);       //設置圖片寬
                              canvas.setAttributeNode(anh);       //設置圖片高
                              ctx.drawImage(this, 0, 0, w, h);    //繪制圖片
                              var quality = 1;  // 圖片質量為0.1~1, quality值越小,所繪制出的圖像越模糊
                              var base64 = canvas.toDataURL('image/jpeg', quality);   //利用canvas生成Base64
                              callback(base64);                   // 回調函數返回base64的值
                          }
                      }

          雖然有點長, 不過關鍵位置都寫上注釋了, 大家可以參考使用

          如果不想壓縮圖片, 在canvasDataURL方法里可以把設置寬和高的代碼換成原圖參數即可

          完整代碼

          <!DOCTYPE html>
          <html lang="zh-CN">
              <script type="text/javascript" src="../js/jquery.min.js"></script>
              <style>
                  #picb64{width: 95%;height: 300px;overflow-wrap: break-word;overflow: auto;margin: auto;background-color: #676767;border-radius: 10px;}
              </style>
              <body>
                  <input name="file" id="thumbnail" type="file" onchange="previewPic(this)"
                      accept="image/x-png, image/jpg, image/jpeg, image/gif" />
          
                  <div>下面這個Div用來預覽圖片</div>
                  <div id="showpic" style="padding:7px;"></div>
                  <div>下面這個Div用來存放Base64內容</div>
                  <div id="picb64"></div>
          
                  <script>
                      function previewPic(tis) {
                          var fileObj = tis.files[0];         //獲取圖片文件對象
                          if (undefined == fileObj) { console.log("未選擇待上傳的文件"); return; }
                          var picid = "imgComp";
                          $("<img>", {
                              id: picid,
                          }).appendTo($("#showpic"));         //先生成IMG的DOM,以防順序亂掉
                          genCompPic(picid, fileObj);
                      }
                      function genCompPic(picid, fileObj) {
                          var ready = new FileReader();
                          /*開始讀取指定的Blob對象或File對象中的內容. 當讀取操作完成時,readyState屬性的值會成為DONE,如果設置了onloadend事件處理程序,則調用之.同時,result屬性中將包含一個data: URL格式的字符串以表示所讀取文件的內容.*/
                          ready.readAsDataURL(fileObj);
                          ready.onload = function () {
                              canvasDataURL(this.result, { width: 200 }, function (base64Codes) {
                                  $("#"+ picid).attr("src", base64Codes); //在IMG DOM中顯示圖片預覽
                                  $("#picb64").html(base64Codes);         //得到Base64結果,填充到Div中顯示
                              })
                          }
                      }
                      //利用canvas生成壓縮后的圖片
                      function canvasDataURL(path, obj, callback) {
                          var img = new Image();
                          img.src = path;
                          img.onload = function () {
                              var w = obj.width;
                              var h = obj.width / (this.width/ this.height);  //按比例壓縮,計算出等比例高
                              var canvas = document.createElement('canvas');  //生成canvas
                              var ctx = canvas.getContext('2d');
                              // 創建屬性節點
                              var anw = document.createAttribute("width");
                              anw.nodeValue = w;
                              var anh = document.createAttribute("height");
                              anh.nodeValue = h;
                              canvas.setAttributeNode(anw);       //設置圖片寬
                              canvas.setAttributeNode(anh);       //設置圖片高
                              ctx.drawImage(this, 0, 0, w, h);    //繪制圖片
                              var quality = 0.8;  // 圖片質量為0.1~1, quality值越小,所繪制出的圖像越模糊
                              var base64 = canvas.toDataURL('image/jpeg', quality);   //利用canvas生成Base64
                              callback(base64);                   // 回調函數返回base64的值
                          }
                      }
                  </script>
              </body>
          </html>

          擴展應用: 可以利用壓縮后再上傳來節省帶寬


          本期分享就醬紫, 下期再見[看]

          復雜的問題簡單化

          每次只關注一個知識點

          對技術有興趣的小伙伴可以關注我, 以后會經常分享各種奇奇怪怪又實用的技術知識

          當今互聯網時代,HTML 和 Markdown 都是非常流行的標記語言。HTML 用于構建網頁結構和內容,而 Markdown 則以其簡潔易讀的語法被廣泛用于編寫文檔、博客文章等。在很多場景下,我們需要將 HTML 內容轉換為 Markdown 格式,例如網頁內容抓取、文檔格式轉換等。

          Rust 作為一門以安全、性能和可靠性著稱的系統級編程語言,也提供了相應的庫來處理 HTML 到 Markdown 的轉換。本文將介紹一個名為 htmd 的 Rust 庫,它提供了一種高效且易于使用的方式來完成這項任務。

          htmd 簡介

          htmd 是一個受 JavaScript 庫 turndown.js 啟發而開發的 Rust 庫,用于將 HTML 文檔轉換為 Markdown 格式。它具有以下特點:

          • 功能豐富: 提供了與 turndown.js 相媲美的豐富選項,可以靈活地控制轉換過程。
          • 可靠性高: 通過了 turndown.js 的所有測試用例,確保轉換結果的準確性。
          • 依賴項少: 僅依賴于 html5ever 庫,輕量級且易于集成。
          • 性能優異: 轉換速度快,能夠高效處理大型 HTML 文檔。

          htmd 的安裝

          在使用 htmd 之前,我們需要先安裝它。將以下依賴項添加到你的 Cargo.toml 文件中:

          [dependencies]
          htmd = "0.1"

          htmd 的使用

          基本轉換

          使用 htmd 進行 HTML 到 Markdown 的基本轉換非常簡單。以下代碼展示了如何將一個 <h1> 標簽轉換為 Markdown 中的 # 標題:

          use htmd::HtmlToMarkdown;
          
          fn main() {
              let markdown = HtmlToMarkdown::new();
              let html = "<h1>這是一個標題</h1>";
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "# 這是一個標題\n");
          }

          跳過標簽

          在某些情況下,我們可能希望跳過 HTML 文檔中的某些標簽,例如 <script><style> 標簽。htmd 提供了 skip_tags 方法來實現這一點:

          use htmd::HtmlToMarkdown;
          
          fn main() {
              let markdown = HtmlToMarkdown::builder()
                  .skip_tags(vec!["script", "style"])
                  .build();
          
              let html = r#"
                  <script>
                      // 一些 JavaScript 代碼
                  </script>
                  <h1>這是一個標題</h1>
              "#;
          
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "# 這是一個標題\n");
          }

          自定義標簽處理器

          htmd 允許我們自定義標簽處理器來處理特定的 HTML 標簽。例如,我們可以定義一個處理器將 <img> 標簽轉換為 Markdown 中的圖片語法:

          use htmd::{HtmlToMarkdown, HandleResult};
          use html5ever::tendril::StrTendril;
          use html5ever::QualName;
          
          fn main() {
              let markdown = HtmlToMarkdown::builder()
                  .add_handler(
                      vec!["img"],
                      |el| {
                          let src = el
                              .attrs
                              .iter()
                              .find(|(name, _)| name.local.as_ref() == "src")
                              .map(|(_, value)| value.as_ref());
          
                          let alt = el
                              .attrs
                              .iter()
                              .find(|(name, _)| name.local.as_ref() == "alt")
                              .map(|(_, value)| value.as_ref());
          
                          match (src, alt) {
                              (Some(src), Some(alt)) => Some(format!("![{}]({})", alt, src)),
                              _ => None,
                          }
                      },
                  )
                  .build();
          
              let html = r#"<img src="https://example.com/image.jpg" alt="圖片描述">"#;
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "![圖片描述](https://example.com/image.jpg)\n");
          }

          多線程處理

          htmd 支持多線程處理,可以充分利用多核 CPU 的性能來加速轉換過程。以下代碼展示了如何使用多線程將多個 HTML 文檔轉換為 Markdown:

          use htmd::HtmlToMarkdown;
          use std::sync::Arc;
          use std::thread;
          
          fn main() {
              let markdown = Arc::new(HtmlToMarkdown::new());
              let html_docs = vec![
                  "<h1>文檔 1</h1>",
                  "<h2>文檔 2</h2>",
                  "<h3>文檔 3</h3>",
              ];
          
              let threads: Vec<_> = html_docs
                  .into_iter()
                  .map(|html| {
                      let markdown = markdown.clone();
                      thread::spawn(move || {
                          let result = markdown.convert(html).unwrap();
                          println!("{}", result);
                      })
                  })
                  .collect();
          
              for thread in threads {
                  thread.join().unwrap();
              }
          }

          結論

          htmd 是一個功能強大且易于使用的 Rust 庫,用于將 HTML 文檔轉換為 Markdown 格式。它提供了豐富的選項、自定義標簽處理器和多線程支持,可以滿足各種轉換需求。如果你正在尋找一種高效可靠的 HTML 到 Markdown 轉換解決方案,htmd 絕對值得一試。

          當今數字化時代,PDF文檔已成為我們傳遞和保存信息的重要形式之一。然而,有時候我們需要將這些PDF文檔內容轉換為HTML網頁或圖片,以便更好地展示和傳播。使用首助編輯高手軟件,您可以輕松實現這一目標,批量轉換PDF文檔為HTML網頁和圖片。下面,讓我們一起來了解這款軟件的獨特功能及具體操作步驟。

          一、專業且高效的PDF轉換工具

          它是一款專門針對PDF文檔轉換等強大功能的專業軟件,它不僅具備高效穩定的性能,還擁有豐富的功能和工具,可以滿足您各種不同的PDF轉換需求。通過這款軟件,您可以輕松將PDF文檔批量轉為HTML網頁和圖片,提高工作效率。

          二、具體步驟:如何使用軟件實現PDF文檔批量轉為HTML網頁與圖片

          1.安裝并啟動軟件,其中支持AI文章創作、魔法繪圖、圖片批量處理、文本批量操作,點擊“PDF工具箱”功能模塊。

          2.如果要將文檔轉為html,就將格式轉換切換為“pdf轉html”,點擊“添加文件”按鈕,選擇需要轉換的pdf文檔,支持同時添加多個文件。

          3.選擇新文件保存位置,支持保存在原文件相同位置,或者指定位置

          4.如果選擇指定位置的話,可以進入“選擇新位置”窗口,選擇好文件的保存路徑,電腦的任意文件夾都行

          5.點擊“開始轉換”按鈕,等待軟件自動完成轉換過程。等轉換完成,可以看到pdf文檔均被轉為html

          6.如果想要將pdf轉為圖片,可以將格式轉換選項切換為“pdf轉圖片”,再去轉換,轉換后一組圖片一個文件夾自動分類保存著,雙擊文件件進去查看,pdf均被轉為圖片格式了

          三、軟件的優勢特點

          高效穩定:軟件具備高效穩定的轉換性能,可以快速批量處理大量PDF文檔,保證轉換過程的流暢與穩定。

          多樣化的輸出格式:除了支持轉換為HTML網頁和圖片外,該軟件還支持其他多種格式,,滿足您多樣化的需求。

          豐富的編輯功能:還提供了豐富的編輯工具和功能,如文本編輯、圖像處理、AI文章創作、魔法繪圖等等。

          個性化設置:您可以右擊控制面板,其中支持多種軟件皮膚的選擇,以滿足特定的需求和喜好。

          四、總結

          軟件以其專業高效的功能和特點,為您的PDF文檔批量轉為HTML網頁和圖片提供了便捷的解決方案。通過簡單的操作步驟和強大的編輯功能,您可以輕松實現各種PDF文檔的轉換和處理。這款軟件不僅提高了您的工作效率和質量,還為您的其他編輯和處理需求提供了全面的支持。如果您還在為繁瑣的PDF轉換過程煩惱,不妨嘗試一下首助編輯高手軟件,相信它會成為您工作中的得力助手。


          上一篇:HTML的再學習
          下一篇:前端基礎:HTML
          主站蜘蛛池模板: 手机看片福利一区二区三区| 久久一区二区三区精华液使用方法| 麻豆AV一区二区三区| 亲子乱av一区二区三区| 精品国产亚洲一区二区三区| 消息称老熟妇乱视频一区二区| 国产福利一区二区三区| 精品国产区一区二区三区在线观看 | 亚洲国产老鸭窝一区二区三区| 色窝窝无码一区二区三区色欲| 亚洲熟女www一区二区三区| 日本美女一区二区三区| 国产亚洲无线码一区二区 | 色系一区二区三区四区五区| 一区二区三区无码视频免费福利| 中文字幕精品一区二区日本| 国产精品一区二区久久乐下载| 中文字幕日韩人妻不卡一区 | 成人中文字幕一区二区三区| 波多野结衣免费一区视频| 男插女高潮一区二区| 国产伦精品一区二区| 国产AV一区二区三区无码野战| 天堂一区人妻无码| 亚洲日韩精品无码一区二区三区| 日韩精品一区二区三区老鸭窝 | 欧洲无码一区二区三区在线观看| 精品人妻少妇一区二区三区不卡 | 无码国产精品一区二区免费式影视 | 国产在线精品一区二区三区不卡| 美女啪啪一区二区三区| 亚洲AV成人一区二区三区在线看 | 国产精品揄拍一区二区| 内射白浆一区二区在线观看 | 久久久久久人妻一区二区三区| 人妻少妇AV无码一区二区| 日韩视频一区二区在线观看| 久久精品岛国av一区二区无码| 日韩AV在线不卡一区二区三区| 亚洲天堂一区二区三区| 中文字幕色AV一区二区三区|