2013-03-26 58 views
3

是否可以在不使用PHP加载实际图像的情况下获取图像信息?在我的情况下,我想要的高度和宽度。PHP - 获取有关图像(高度和宽度)的信息,但不加载它

我有这段代码从目录中获取图像。我回应出图片的网址并用JS取回。

<?php 

    $directory = "./images/photos/"; 
    $sub_dirs = glob($directory . "*"); 
    $i = 0; 
    $len = count($sub_dirs); 
    foreach($sub_dirs as $sub_dir) 
    { 
     $images = glob($sub_dir . '/*.jpg'); 
     $j = 0; 
     $len_b = count($images); 
     foreach ($images as $image) 
     { 

      if ($j == $len_b - 1) { 
       echo $image; 
      } else { 
       echo $image . "|"; 
      } 

      $j++; 

     } 

     if ($i == $len - 1) { 
     } else { 
      echo "|"; 
     } 
     $i++; 
    } 

?> 
+0

http://php.net/manual/en/function.getimagesize.php – 2013-03-26 16:54:21

+1

如果您需要这些信息,您必须以某种方式使用该图像,但是,您可以将信息存储在文本块中类似的东西,以后再访问它。 – Jonast92 2013-03-26 16:54:30

+0

@Philip PHP会解析你传递给它的每一张图片,但是Cal的回答是正确的,因为当函数获得大小并将它们分配给变量时,它将释放内存。如果我是你,我应该坚持他的方法。 – 2013-03-26 16:57:24

回答

7

getImageSize()是在PHP中获取这些信息的正确方法

它根据图像类型进行最少量的工作。例如,GIF图像的高度/宽度存储在标题中。非常容易访问和阅读。所以这就是函数最可能从文件中获取信息的方式。对于JPEG,它必须使用SOFn标记做更多的工作。

访问此信息的最快方法是在每次上载新文件时维护一个文件维度数据库。

鉴于您目前的状况。我建议编写一个PHP脚本,它可以获取所有当前的图像文件,使用此功能获取大小,然后将信息插入数据库中以供将来使用。

+0

谢谢你的解释。 – Philip 2013-03-26 17:15:03

5

这取决于你的意思是“没有加载它”。

内置getimagesize()这样做。

list($w, $h) = getimagesize($filename); 
+0

我有成千上万的图像,如果我不得不加载它,在检索关于图像的信息之前需要很长时间。 – Philip 2013-03-26 16:54:45

+0

“负载”是什么意思?你必须(很明显)看图像的字节来找出它的大小。你在谈论缓存文件或数据库中的大小吗?你的问题非常模糊。 – Cal 2013-03-26 16:55:43

+0

我对它的“尺寸”不感兴趣,我只对它的宽度和高度感兴趣。我正在谈论捕捉文件中的大小。 Jpeg是确切的。 – Philip 2013-03-26 16:58:21

2

可以以编程方式获取图像,并使用Javascript检查尺寸...

var img = new Image(); 
img.onload = function() { 
    alert(this.width + 'x' + this.height); 
} 
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif'; 

如果图像是不是该标记的一部分,这可能是有用的;)

2

您可以将width'n'height信息存储在文本文件中,稍后加载。

2
list($width, $height, $type, $attr) = getimagesize($_FILES["Artwork"]['tmp_name']); 

使用此。