Javascript 如何在保持纵横比的同时在网页上显示调整大小的图像?

Javascript 如何在保持纵横比的同时在网页上显示调整大小的图像?,javascript,jquery,image,image-manipulation,Javascript,Jquery,Image,Image Manipulation,使用JavaScript在客户端调整图像大小的最佳和最快的方法是什么 编辑:对不起,我指的是在客户端显示已调整大小的图像的最佳方式。我不确定您的意思是实际调整图像大小还是只设置图像显示的大小。一个是不可能的,另一个是使用jQuery设置宽度和高度属性 如果您想在语句中这样做,那么高度和宽度属性很可能是最好的 如果您想要设置动画,可以使用.animate(…)命令并将高度和宽度设置为参数。这将使图像变化平稳过渡。图像应始终以显示的大小提供。最好在服务器上有多个副本,而不是通过网络复制一个文件并尝

使用JavaScript在客户端调整图像大小的最佳和最快的方法是什么


编辑:对不起,我指的是在客户端显示已调整大小的图像的最佳方式。

我不确定您的意思是实际调整图像大小还是只设置图像显示的大小。一个是不可能的,另一个是使用jQuery设置宽度和高度属性


如果您想在语句中这样做,那么高度和宽度属性很可能是最好的


如果您想要设置动画,可以使用
.animate(…)
命令并将高度和宽度设置为参数。这将使图像变化平稳过渡。

图像应始终以显示的大小提供。最好在服务器上有多个副本,而不是通过网络复制一个文件并尝试在客户端进行操作。考虑这一点:

  • 当您实际需要100X80时,传输500X400映像会浪费网络资源
  • 在某些图像API中,在客户端缩小/放大图像时也会浪费CPU
调整图像大小并不是简单地改变高度/宽度。如果指定的大小与原始图像大小不同(通过样式、脚本等),浏览器将使用本机API(例如win32 draw)正确缩小/放大图像。裁剪图像(丢失部分图像)比较容易,但很少需要。

容易

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Client-Side Image Resize (Why?!)</title>
    <script type="text/javascript">
      window.onload = function() {
        var url = "http://www.google.com/intl/en_ALL/images/logo.gif";
        var img = new Image();
        img.onload = function() {
          var w = parseInt((this.width + "").replace(/px/i, ""), 10);
          var h = parseInt((this.height + "").replace(/px/i, ""), 10);

          // 50% scale
          w = (w / 2) + "px";
          h = (h / 2) + "px";

          var htmlImg = document.createElement("img");
          htmlImg.setAttribute("src", url);
          htmlImg.setAttribute("width", w);
          htmlImg.style.width = w;
          htmlImg.setAttribute("height", h);
          htmlImg.style.height = h;
          document.body.appendChild(htmlImg);
        }
        img.src = url;
      }
    </script>
  </head>
  <body>
    <h1>Look, I'm Resized!</h1>
  </body>
</html>

客户端图像大小调整(为什么?!)
window.onload=函数(){
变量url=”http://www.google.com/intl/en_ALL/images/logo.gif";
var img=新图像();
img.onload=函数(){
var w=parseInt((this.width+).replace(/px/i,”),10);
var h=parseInt((this.height+).replace(/px/i,”),10);
//50%比例
w=(w/2)+“px”;
h=(h/2)+“px”;
var htmlImg=document.createElement(“img”);
setAttribute(“src”,url);
htmlImg.setAttribute(“宽度”,w);
htmlImg.style.width=w;
htmlImg.setAttribute(“高度”,h);
htmlImg.style.height=h;
document.body.appendChild(htmlImg);
}
img.src=url;
}
看,我的尺寸变大了!

如果您对flash不太感兴趣,那么使用flash10,您现在可以选择在将上传的文件发送到服务器之前在客户端处理这些文件。因此,您可以使用一个隐藏/透明/小的flash对象来允许客户端上传他们的图像,让flash调整图像大小(它有一些好的图像处理api),然后将字节数据发送到服务器

如果您想在上传之前将图像编码为任何一种格式,as3核心库都有一个jpeg和png编码器


如果你没有flash,你可以下载Flex3(或4)sdk并使用flashdevelop免费完成所有工作。

上传前调整大小将是一个非常强大的工具。这将减少将图像上载到服务器所需的时间。我们的用户通常有500万像素的图像刚从他们的相机上消失,他们不知道如何使用图像编辑器缩小尺寸。我们想要上传的是一张1500像素宽的照片,jpg或png压缩到500字节以下


这套衣服声称能做到,但我还没有检查过。我很希望找到一种使用JQuery做同样事情的方法。

flash 10支持在客户端调整图像大小:

上传前调整大小。灵活、紧密的JavaScript集成,让您可以使用任何后端语言、快速、高质量的图像

一个比展示JavaScript集成的主页更好的演示:


像啤酒一样免费。希望能有所帮助。

当用户希望从客户端上传图像时,您是否希望通过在将图像发送到服务器之前先将图像大小调整为更小的方式来最大限度地减少网络流量?@Jeffrey:是的,完全正确。否则,只需在发送之前调整服务器端的大小。@mattt:许多人提供了在上传图像之前调整图像大小的解决方案。这就是你要找的吗?(问题的当前文本有点不清楚,编辑会有帮助)。-1表示“应始终提供服务”。以不同的大小重复使用相同的图像有助于节省带宽。此外,当允许用户导入图像(例如在论坛中)时,您可能需要调整大小。制作重量和高度并不意味着调整图像的大小。