PHP - 在不加载图像的情况下获取有关图像(高度和宽度)的信息
Posted
技术标签:
【中文标题】PHP - 在不加载图像的情况下获取有关图像(高度和宽度)的信息【英文标题】:PHP - Get information about image (Height and Width) without loading it 【发布时间】:2013-03-16 14:10:09 【问题描述】:是否可以在不使用 php 加载实际图像的情况下获取图像信息?就我而言,我想要高度和宽度。
我有这段代码可以从目录中获取图像。我回显出图片的 url 并用 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++;
?>
【问题讨论】:
php.net/manual/en/function.getimagesize.php 如果您需要信息,您必须以一种或另一种方式使用图像,但是,您可以将信息存储在类似的文本拼贴中,以便以后访问。 @Philip PHP 将解析您传递给它的每个图像,但 Cal 的答案是正确的,因为当函数获取大小并将它们分配给变量时,它将释放内存。如果我知道你,我应该坚持他的方法。 @Jonast92 - 你的回答/评论是我这样做的方式。谢谢。 好的,@Philip,我用相同的评论/答案创建了一个答案,因为我猜它算是一个答案。 【参考方案1】:这取决于您所说的“不加载它”是什么意思。
内置的getimagesize() 可以做到这一点。
list($w, $h) = getimagesize($filename);
【讨论】:
我有数千张图片,如果我必须加载它,我需要很长时间才能检索到有关图片的信息。 “加载”是什么意思?您必须(显然)查看图像的字节以找出其大小。您是在谈论缓存文件或数据库中的大小吗?你的问题很模糊。 我对它的“大小”不感兴趣,我只对它的宽度和高度感兴趣。我说的是捕获文件中的大小。确切地说是 Jpeg。 您的问题是老实说“我可以在不了解文件的情况下获得图像的宽度和高度”吗?这和我问你穿什么颜色的袜子是一样的(但你不能看)。 至少使用getImageSize(),他可以只看你的脚,而不是看你的整个身体来弄清楚。【参考方案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';
如果图像不是标记的一部分,这可能很有用;)
【讨论】:
【参考方案3】:getImageSize()
是在 PHP 中获取此信息的正确方法
它会根据图像类型做最少的工作。例如,GIF 图像的高度/宽度存储在标题中。非常容易访问和阅读。所以这就是函数最有可能从文件中获取信息的方式。对于 JPEG,它必须做更多的工作,使用 SOFn 标记。
访问此信息的最快方法是在每次上传新文件时维护一个文件尺寸数据库。
鉴于您目前的情况。我建议编写一个 PHP 脚本,获取所有当前图像文件,使用此函数获取大小,然后将信息插入数据库以供将来使用。
【讨论】:
【参考方案4】:您可以将 width'n'height 信息存储在文本文件中,稍后再加载。
【讨论】:
【参考方案5】:list($width, $height, $type, $attr) = getimagesize($_FILES["Artwork"]['tmp_name']);
使用这个。
【讨论】:
以上是关于PHP - 在不加载图像的情况下获取有关图像(高度和宽度)的信息的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何在不加载完整位图的情况下将流式图像即时渲染到 ImageView?
在不延迟页面加载的情况下将图像不可见地预加载到 DOM [重复]