1

imagecreatefromjpegを使用してオリジナルのサムネイルバージョンを作成し、それを新しいフォルダーに保存する簡単なPHPスクリプトがあります。解析を高速化するために(静的サイトにアップロードする前にすべてバックエンドで実行されます) 、作成前に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ハッシュという名前を付けることにより、オリジナルからサムネイルへの1対1のマップを作成できます。このアプローチの欠点は、元のサムネイルが使用されなくなったときに未使用のサムネイルを削除する方法が必要になることです。

このアプローチを使用するには、次のようなものを使用します。

<?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 に答える