<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 图像的大小而不使用画布

        Resize a Base-64 image in JavaScript without using canvas(在 JavaScript 中调整 Base-64 图像的大小而不使用画布)
          <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 图像的大小而不使用画布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  How to make rooftext effect and valley text effect in HTML5 (or Fabric.js)(如何在 HTML5(或 Fabric.js)中制作屋顶文字效果和山谷文字效果)
                  Draw border around nontransparent part of image on canvas(在画布上的图像不透明部分周围绘制边框)
                  dragging and resizing an image on html5 canvas(在 html5 画布上拖动图像并调整其大小)
                  What#39;s the difference between a boolean as primitive and a boolean as property of an object?(作为原始对象的布尔值和作为对象属性的布尔值有什么区别?)
                  I want to do animation of an object along a particular path(我想沿特定路径对对象进行动画处理)
                  How to upload image into HTML5 canvas(如何将图像上传到 HTML5 画布中)
                    <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>
                        <tbody id='fXToS'></tbody>

                            <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'>