如何更改URL中的图像是否已更改?

时间:2016-05-18 11:54:29

标签: c# .net image-processing

因此,我获得了大量的图片网址并将其处理到我的blob存储中并将其映射到我的CDN。现在,问题是,有时图像会在原始网址中更新,但网址不会更改。例如:

第一张图片:

Original ImageUrl: "<websiteUrl>/image1.jpg";
My BlobUrl: "<bloburl>/myimage1.jpg";
My CDN Url: "<cdnurl>/myimage1.jpg

更新图片:

orignal imageurl是相同的,所以我无法检查图像网址是否更新。我以为我可以检查exif datetime属性但不幸的是这些图像不是exif中的datetime属性。我在exif中只有的信息是:

File Size 236 kB 
File Type JPEG 
MIME Type image/jpeg 
Image Width 1000 
Image Height 1500 
Encoding Process Baseline DCT, Huffman coding
Bits Per Sample 8 
Color Components 3
X Resolution 72 
Y Resolution72 
YCbCr Sub Sampling YCbCr4:2:0 (2 2)

我的问题是,在这种情况下,如何检测网址中的图像是否与我的图像中的图像不同。

2 个答案:

答案 0 :(得分:1)

在第一个实例中,您应该检查文件本身的LastModified日期,该日期将告诉您自上次访问文件以来该文件是否已实际更改。然后只需重新加载文件,如果它比您存储的日期更新。您还可以检查文件的大小,如果它与它几乎肯定更改之前的大小不同。

但是,如果您无法获得该信息,则唯一的方法是比较图像的像素,看它们是否不同。

但是,您不必逐像素比较。如果在第一次加载图像时从图像生成校验和,并将其与网址一起存储在数据库中。然后,您可以在下次需要显示图像时重复此过程,并将存储的校验和与新计算的校验和进行比较。如果它们不同则图像不同。

这意味着您每次都必须检索图像是否已被更改。

答案 1 :(得分:0)

您应该为文件创建校验和并将其存储在文件中。 然后,您可以轻松计算新的校验和以查看它是否已更改:

using (var md5 = MD5.Create())
{
    using (var stream = File.OpenRead(filename))
    {
        return md5.ComputeHash(stream);
    }
}