javascript - 在提交表单 html5 之前调整图像大小

标签 javascript html html5-canvas filereader

我需要在客户端调整图片大小并在提交前将其添加到表单。

这是完整的 html:

<html>
   <body>
      <form action="url">
         <label><b>Avatar image:</b></label>
         <input type="file" id="imageLoader" name="avatar" onchange="return ShowImagePreview( this, 0 );" /><br />    
         <canvas id="imageCanvas" class="previewcanvas" width="133" height="100"></canvas>
         <br />
         <input type="submit" value="Save" />
      </form>
      <script>
         var imageLoader = document.getElementById('imageLoader');
         function HandleFileEvent( event, selection )
         {
             var img = new Image; 
             img.onload = function( event ) { UpdatePreviewCanvas( event, img, selection ) }
             img.src = event.target.result;
         }

         function ShowImagePreview( object, selection )
         {
             if( typeof object.files === "undefined" )
                 return;

             var files = object.files;

             if( !( window.File && window.FileReader && window.FileList && window.Blob ) )
             {
               alert('The File APIs are not fully supported in this browser.');
               return false;
             }

             if( typeof FileReader === "undefined" )
             {
                 alert( "Filereader undefined!" );
                 return false;
             }

             var file = files[0];

             if( file !== undefined && file != null && !( /image/i ).test( file.type ) )
             {
                 alert( "File is not an image." );
                 return false;
             }

             reader = new FileReader();
             reader.onload = function( event ) { HandleFileEvent( event, selection ) }
             reader.readAsDataURL( file );
         }

         function UpdatePreviewCanvas( event, img, selection )
         {    
             var canvas = document.getElementById('imageCanvas');
             var context = canvas.getContext( '2d' );

             var world = new Object();
             world.width = canvas.offsetWidth;
             world.height = canvas.offsetHeight;

             canvas.width = world.width;
             canvas.height = world.height;

             var WidthDif = img.width - world.width;
             var HeightDif = img.height - world.height;

             var Scale = 0.0;
             if( WidthDif > HeightDif )
             {
                 Scale = world.width / img.width;
             }
             else
             {
                 Scale = world.height / img.height;
             }
             if( Scale > 1 )
                 Scale = 1;

             var UseWidth = Math.floor( img.width * Scale );
             var UseHeight = Math.floor( img.height * Scale );

             var x = Math.floor( ( world.width - UseWidth ) / 2 );
             var y = Math.floor( ( world.height - UseHeight ) / 2 );

             context.drawImage( img, x, y, UseWidth, UseHeight );  
         }
      </script>
  </body>
</html>

我想到的是将图像放到 Canvas 上,但我不知道如何将它恢复为输入。

(使用这个 link )

最佳答案

您可以使用 drawImage 的扩展版本来调整原始图像的大小。

扩展版本从 [0,0] 和 img.width x img.height 拉取完整的原始图像。

然后缩放原图并在 Canvas 上的 [0,0] 处绘制缩放后的版本

context.drawImage(  img, 0,0,img.width,img.height,  0,0,UseWidth,UseHeight );

关于javascript - 在提交表单 html5 之前调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653041/

相关文章:

javascript - 在 ReactJS 中使用下划线

html - CSS 无序列表样式

javascript - Q : HTML5 Canvas change background color

javascript - 无法在 Canvas 上绘图。可能是什么问题?

javascript - 如何使用 NativeScript 的 BarcodeScanner 插件

javascript - Firefox 或 JavaScript,计算 DOM

javascript - 在传播到下一个监听器之前更改事件?

jquery - 如果没有悬停在元素 A 或元素 B 上

jquery - 当用户开始输入时删除错误类

javascript - Fabric.js 动态裁剪区域以不同方式影响图像和 SVG/形状