如果原始文件已更改,请创建新的JPG图像缩略图

时间:2011-05-17 14:37:49

标签: md5-file

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

我想我需要使用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非常糟糕,并且对于任何来自新的(专家)视图的指针感到高兴。

谢谢,约翰

3 个答案:

答案 0 :(得分:0)

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

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

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

  

谢谢大家 - 不确定如果原始图像是先前创建的,但仅仅用于例如其他地方存档的库存图像,然后将其拖入/ images /文件夹以替换现有图像但文件名相同..时间戳是否显示拖动的日期或创建时间?

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

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

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

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

答案 1 :(得分:0)

应该足以比较拇指的最后修改日期和原始图像。如果原始图像比拇指更新,则应重新创建它。

答案 2 :(得分:0)

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

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

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

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

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

如果您拥有与不同文件名完全相同的大图像,则可以实现相同的缩略图。