【问题标题】:How to detect change in Source image如何检测源图像的变化
【发布时间】:2011-09-20 15:13:24
【问题描述】:

我目前有一些用 PHP 编写的图像处理脚本,用于 CMS 网站。其中一个获取客户端上传的源图像,调整其大小,使用特定文件名写出处理后的图像(例如 100x100_id240.jpg 用于 100 x 100 缩略图,用于页面 id 240),最重要的是更改新的时间戳处理后的图像以匹配源图像。

每次浏览器请求页面时,php 脚本都会检查源图像和已处理图像的时间戳以确保它们匹配 - 如果不匹配,则客户端必须更改源图像,因此重复处理并且新版本会覆盖 100x100_id240.jpg。如果时间戳确实匹配,那么我们不需要重新处理图像,因此我们只需使用已处理的缩略图。

这很好用。然而,我时不时地得到一个客户端,他上传一堆具有完全相同时间戳的图像,达到 100 秒。如果然后将页面的源图像更改为具有相同时间戳的备用图像,则 php 脚本会愉快地进行并将源图像时间戳与处理后的图像时间戳进行比较,发现时间戳相同,因此不要重新处理新的源图像。然后我们得到一个不正确的缩略图输出。

我考虑过在上传时向源图像写入一个随机时间戳,这样可以解决问题。但我宁愿保留这个印章。 所以我需要另一种方法(处理不繁重,例如计算源图像中所有红色的像素)。我想知道我是否可以编写一个独特的代码来 exif 数据或其他东西。但是 exif 仅适用于 jpg 对吗? 关于如何解决这个问题的任何想法?谢谢

【问题讨论】:

标签: php image image-processing


【解决方案1】:

您可以使用md5_file 或sha1_file 来检查文件是否相同。

【讨论】:

  • 这有多大的处理量?每次请求图像(或图像的缩略图版本)时,都需要对源图像执行此操作。我认为它会将整个文件(比如 300Kb)读入内存,然后执行一些魔术 - 我的问题是,这比每次简单地重新处理图像并根据要求即时重新创建缩略图要快多少?
【解决方案2】:

您应该尝试计算图像的 CRC32 并进行比较。这样你就可以知道图片是否被其他人修改过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多