Javascript-获取图像高度
我需要使用AJAX在网页上显示一堆图像。它们都具有不同的尺寸,因此我想在显示它们之前调整它们的大小。有没有办法用JavaScript做到这一点?
对每个图像使用PHP的getimagesize()
会导致不必要的性能下降,因为将会有很多图像。
解决方案
我们是要调整图像本身还是调整图像的显示方式?如果是前者,则需要在服务器端进行操作。如果是后者,则只需更改image.height和image.width。
...但是...在服务器端调整图像大小,而不是将字节传输到浏览器并在浏览器中进行操作会更好吗?
当我说调整图像大小时,我并不是说要在HTML图像标签中设置高度和宽度。如果这样做,我们仍将大量字节从服务器传送到客户端。我的意思是,实际上是在服务器端操纵图像本身。
我在这里使用.NET Ccode采取这种方法,但是也必须有一种php方法来做到这一点:http://ifdefined.com/www/gallery.html
另外,通过在服务器端进行操作,这打开了仅进行一次调整然后保存调整后图像的可能性,这将非常快。
好吧...有几种方法可以解释这个问题。
第一种方式和我认为的意思是简单地更改显示尺寸,以便所有图像显示相同的尺寸。为此,我实际上将使用CSS而不是JavaScript。只需创建一个设置了适当的width和height值的类,并使所有的<img>标签都使用该类。
第二种方法是我们要保留所有图像的宽高比,但将显示尺寸缩放为合理的值。有一种方法可以使用JavaScript进行访问,但是我需要一点时间来编写一个快速的代码示例。
第三种方法(希望我们不要这样)是更改图像的实际大小。这是我们必须在服务器端执行的操作,因为JavaScript不仅无法创建图像,而且由于已经发送了完整尺寸的图像,因此没有任何意义。
试试这个:
var curHeight; var curWidth; function getImgSize(imgSrc) { var newImg = new Image(); newImg.src = imgSrc; curHeight = newImg.height; curWidth = newImg.width; }
值得注意的是,在Firefox 3和Safari中,仅通过更改高度和宽度来调整图像大小似乎还不错。在其他浏览器中,它看起来非常吵杂,因为它使用的是最近邻居重采样。当然,我们需要付费以提供更大的图像,但这可能并不重要。
对于这种情况,我的首选解决方案是调整服务器端的大小,这样就可以减少不必要的数据传输。
如果我们必须在客户端执行此操作,并且需要保持图像比例,则可以使用以下方法:
var image_from_ajax = new Image(); image_from_ajax.src = fetch_image_from_ajax(); // Downloaded via ajax call? image_from_ajax = rescaleImage(image_from_ajax); // Rescale the given image to a max of max_height and max_width function rescaleImage(image_name) { var max_height = 100; var max_width = 100; var height = image_name.height; var width = image_name.width; var ratio = height/width; // If height or width are too large, they need to be scaled down // Multiply height and width by the same value to keep ratio constant if(height > max_height) { ratio = max_height / height; height = height * ratio; width = width * ratio; } if(width > max_width) { ratio = max_width / width; height = height * ratio; width = width * ratio; } image_name.width = width; image_name.height = height; return image_name; }
我正在寻找一种使用JavaScript获取图像高度和宽度的解决方案。我发现了很多,但是所有这些解决方案仅在浏览器缓存中存在图像时才起作用。
最后,我找到了一种解决方案,即使图像在浏览器缓存中不存在,也可以获取图像的高度和宽度:
<script type="text/javascript"> var imgHeight; var imgWidth; function findHHandWW() { imgHeight = this.height; imgWidth = this.width; return true; } function showImage(imgPath) { var myImage = new Image(); myImage.name = imgPath; myImage.onload = findHHandWW; myImage.src = imgPath; } </script>
谢谢,
比诺德·苏曼(Binod Suman)
http://binodsuman.blogspot.com/2009/06/how-to-get-height-and-widht-of-image.html