<tfoot id='YMFuW'></tfoot>
      1. <legend id='YMFuW'><style id='YMFuW'><dir id='YMFuW'><q id='YMFuW'></q></dir></style></legend>

        <small id='YMFuW'></small><noframes id='YMFuW'>

        <i id='YMFuW'><tr id='YMFuW'><dt id='YMFuW'><q id='YMFuW'><span id='YMFuW'><b id='YMFuW'><form id='YMFuW'><ins id='YMFuW'></ins><ul id='YMFuW'></ul><sub id='YMFuW'></sub></form><legend id='YMFuW'></legend><bdo id='YMFuW'><pre id='YMFuW'><center id='YMFuW'></center></pre></bdo></b><th id='YMFuW'></th></span></q></dt></tr></i><div id='YMFuW'><tfoot id='YMFuW'></tfoot><dl id='YMFuW'><fieldset id='YMFuW'></fieldset></dl></div>
        • <bdo id='YMFuW'></bdo><ul id='YMFuW'></ul>
      2. 在 JavaScript 中调整 Base-64 图像的大小而不使用画布

        时间:2023-06-22
          <tfoot id='K4FRf'></tfoot>

              <bdo id='K4FRf'></bdo><ul id='K4FRf'></ul>

                <tbody id='K4FRf'></tbody>
                • <i id='K4FRf'><tr id='K4FRf'><dt id='K4FRf'><q id='K4FRf'><span id='K4FRf'><b id='K4FRf'><form id='K4FRf'><ins id='K4FRf'></ins><ul id='K4FRf'></ul><sub id='K4FRf'></sub></form><legend id='K4FRf'></legend><bdo id='K4FRf'><pre id='K4FRf'><center id='K4FRf'></center></pre></bdo></b><th id='K4FRf'></th></span></q></dt></tr></i><div id='K4FRf'><tfoot id='K4FRf'></tfoot><dl id='K4FRf'><fieldset id='K4FRf'></fieldset></dl></div>
                  <legend id='K4FRf'><style id='K4FRf'><dir id='K4FRf'><q id='K4FRf'></q></dir></style></legend>

                  <small id='K4FRf'></small><noframes id='K4FRf'>

                  本文介绍了在 JavaScript 中调整 Base-64 图像的大小而不使用画布的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我需要一种无需使用 HTML 元素即可在 JavaScript 中调整图片大小的方法.

                  我的移动 HTML 应用程序捕获照片,然后将它们转换为 base64 字符串.此后,我需要在将它们发送到 API 之前调整它们的大小以节省存储空间.

                  我正在寻找一种与使用画布元素不同且更合适的方法来调整大小,有什么方法吗?

                  解决方案

                  避免主要 HTML 受到影响的一种方法是创建一个远离 DOM 树的屏幕外画布.

                  这将提供位图缓冲区和本机编译代码来编码图像数据.这样做很简单:

                  function imageToDataUri(img, width, height) {//创建一个离屏画布var canvas = document.createElement('canvas'),ctx = canvas.getContext('2d');//将其尺寸设置为目标尺寸画布.宽度 = 宽度;canvas.height = 高度;//将源图像绘制到离屏画布中:ctx.drawImage(img, 0, 0, 宽度, 高度);//使用 base64 版本的压缩图像将图像编码为 data-uri返回画布.toDataURL();}

                  如果您想生成与 PNG(默认)不同的格式,只需像这样指定类型:

                  return canvas.toDataURL('image/jpeg', quality);//质量 = [0.0, 1.0]

                  值得注意的是,CORS 限制适用于 toDataURL().p>

                  如果您的应用只提供 base64 编码图像(我假设它们是带有 base64 数据的 data-uri?)那么您需要先加载"图像:

                  var img = new Image;img.onload = resizeImage;img.src = originalDataUriHere;函数 resizeImage() {var newDataUri = imageToDataUri(this, targetWidth, targetHeight);//从这里继续...}

                  如果源是纯 base-64 字符串,只需向其添加标头以使其成为 data-uri:

                  function base64ToDataUri(base64) {返回'数据:图像/png;base64,'+ base64;}

                  只需将 image/png 部分替换为 base64 字符串表示的类型(即,使其成为可选参数).

                  I need a way to resize pictures in JavaScript without using a HTML element.

                  My mobile HTML app captures photos and then converts them to base64 strings. Thereafter I need to resize them before they are sent to the API in order to save storage space.

                  I'm looking for a different and more suitable way for resizing than using a canvas element, is there a way?

                  解决方案

                  A way to avoid the main HTML to be affected is to create an off-screen canvas that is kept out of the DOM-tree.

                  This will provide a bitmap buffer and native compiled code to encode the image data. It is straight forward to do:

                  function imageToDataUri(img, width, height) {
                  
                      // create an off-screen canvas
                      var canvas = document.createElement('canvas'),
                          ctx = canvas.getContext('2d');
                  
                      // set its dimension to target size
                      canvas.width = width;
                      canvas.height = height;
                  
                      // draw source image into the off-screen canvas:
                      ctx.drawImage(img, 0, 0, width, height);
                  
                      // encode image to data-uri with base64 version of compressed image
                      return canvas.toDataURL();
                  }
                  

                  If you want to produce a different format than PNG (default) just specify the type like this:

                  return canvas.toDataURL('image/jpeg', quality);  // quality = [0.0, 1.0]
                  

                  Worth to note that CORS restrictions applies to toDataURL().

                  If your app is giving only base64 encoded images (I assume they are data-uri's with base64 data?) then you need to "load" the image first:

                  var img = new Image;
                  
                  img.onload = resizeImage;
                  img.src = originalDataUriHere;
                  
                  function resizeImage() {
                      var newDataUri = imageToDataUri(this, targetWidth, targetHeight);
                      // continue from here...
                  }
                  

                  If the source is pure base-64 string simply add a header to it to make it a data-uri:

                  function base64ToDataUri(base64) {
                      return 'data:image/png;base64,' + base64;
                  }
                  

                  Just replace the image/png part with the type the base64 string represents (ie. make it an optional argument).

                  这篇关于在 JavaScript 中调整 Base-64 图像的大小而不使用画布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:上传前在浏览器中裁剪图像 下一篇:HTML5 Canvas 相机/视口 - 如何实际做到这一点?

                  相关文章

                    <bdo id='fXToS'></bdo><ul id='fXToS'></ul>
                  <legend id='fXToS'><style id='fXToS'><dir id='fXToS'><q id='fXToS'></q></dir></style></legend>
                • <tfoot id='fXToS'></tfoot>

                      <i id='fXToS'><tr id='fXToS'><dt id='fXToS'><q id='fXToS'><span id='fXToS'><b id='fXToS'><form id='fXToS'><ins id='fXToS'></ins><ul id='fXToS'></ul><sub id='fXToS'></sub></form><legend id='fXToS'></legend><bdo id='fXToS'><pre id='fXToS'><center id='fXToS'></center></pre></bdo></b><th id='fXToS'></th></span></q></dt></tr></i><div id='fXToS'><tfoot id='fXToS'></tfoot><dl id='fXToS'><fieldset id='fXToS'></fieldset></dl></div>

                      <small id='fXToS'></small><noframes id='fXToS'>