1

我有一个简单的 PHP 脚本,使用imagecreatefromjpeg创建原始的缩略图版本并将其保存到新文件夹中。为了加快解析速度(所有在上传到静态站点之前在后端完成),我在创建之前使用file_exist来检查它是否存在并显示 - 如果没有创建新的并显示。这可以正常工作,但如果原始图像发生更改,则脚本不会生成,因为缩略图图像以其旧形式存在。

我想我需要使用 MD5 测试,但作为一个 n00b,不确定如何测试生成的缩略图版本是否与主图像生成的现有缩略图版本不同。

当前逻辑:

if thumb exist == do nothing,
if thumb does not exist == create it

附加逻辑

if thumb will change due to change in original == create it,
if thumb will stay the same == do nothing

现有的 PHP 很差,而且很混乱,因此很高兴从新的(专家)视图中获得任何指针。

谢谢,约翰

4

3 回答 3

0

简单来说,假设我们有一个 200x200 的图像,其中填充了红色并且只有红色(所以是红色方块)。我们创建 80x80 的缩略图。如果原始图像发生变化但仍是相同的红色填充方块,则缩略图不会改变。

问题是,为了检测到这一点,您需要创建缩略图或应用高级图像比较技术,您也可以保存它。

但是,您可以使用 MD5 创建从原始到缩略图的一对一映射,方法是将缩略图命名为原始的 MD5 哈希。这种方法的缺点是,当不再使用它们的原件时,您将需要一种方法来删除未使用的缩略图。

要使用这种方法,请使用以下内容:

<?php
$thumbname = md5_file($bigimage_path);
if( !file_exists("images/thumbs/$thumbname.jpg") )
{
    create_thumb($bigimage_path, $thumbname);
}
?>

这将实现,如果您具有与不同文件名完全相同的大图像,它们将全部映射到相同的缩略图。

于 2011-05-17T17:27:11.837 回答
0

您要检查文件的修改时间。

http://php.net/manual/en/function.filemtime.php

如果原始文件的时间戳比缩略图的时间戳更新,则制作一个新的缩略图。

谢谢大家-如果原始图像是以前创建的,但只是被使用,例如其他地方的文件中的库存图像,然后拖到 /images/ 文件夹中以替换现有图像但文件名相同,则不确定这是否可行。时间戳显示拖动的日期或创建时间?

如果您移动文件,修改后的时间戳不会更改。

如果您复制文件,则副本由复制操作创建。

创建文件时,其修改日期时间戳与其创建日期时间戳相同。

因此,如果您的拖动正在复制文件,那么修改后的时间戳就是文件被复制那一刻的时间戳。

于 2011-05-17T14:46:30.797 回答
0

将拇指的最后修改日期与原始图像进行比较就足够了。如果原始图像比拇指新,您应该重新创建它。

于 2011-05-17T14:46:53.803 回答